У меня проблема в том, что я не могу подключиться к своему SMTP-серверу exim4 из домашней сети:
$ telnet -4 example.com 25
Trying 1.2.3.4...
telnet: connect to address 1.2.3.4: Connection refused
telnet: Unable to connect to remote host
netstat
на сервере сообщает мне, что exim4 прослушивает порт 25, как IPv4, так и IPv6. Я начал tcpdump
на моем сервере, чтобы проверить, доходит ли запрос до сервера, он ничего не показывает. Я был озадачен и в качестве последнего теста удалил все iptables
правила, как описано Вот. Тем не менее, я получаю В соединении отказано ошибка.
Wireshark сообщает мне, что сервер отвечает на мой запрос telnet с помощью RST / ACK, что означает, что порт закрыт. Однако, если я подключаюсь к серверу откуда угодно, кроме моей домашней сети, он работает без проблем.
Я проверил, что запрос покидает мой локальный шлюз, и это действительно так.
Так что теперь у меня нет идей. Что могло привести к отклонению этого запроса? поскольку tcpdump
ничего не показывает, и я получаю RST / ACK, он должен быть на очень низком уровне, но я не могу представить, что помимо iptables может блокировать входящий запрос - тем более, что это, похоже, происходит только для пакетов с моего домашнего IP.
Убедитесь, что хост на другой стороне доступен для проверки связи. Когда вы это сделаете, попробуйте пропинговать его и настроить
tcpdump -ni any icmp
на сервере Exim.
Вы должны быть в состоянии подтвердить, что эхо-запросы проходят правильно и что адрес в iptables на стороне сервера правильный.
Если у вас есть какие-либо другие службы на сервере Exim, попробуйте подключиться к ним по telnet, например, HTTP на порт 80 или что-то подобное. Когда это удастся, вы будете знать, что приближаетесь, если этого не произойдет, дважды проверьте правила брандмауэра и что они вставлены ПЕРЕД то УДАЛИТЬ (фактически ОТКАЗАТЬ в этом случае, как говорит телнет) правила, иначе у них никогда не будет возможности работать.
Чтобы поместить правило в iptables в позицию 0, используйте
iptables -I INPUT -p tcp --dport 25 -s 5.6.7.8 -j ACCEPT
вместо того
iptables -A INPUT -p tcp --dport 25 -s 5.6.7.8 -j ACCEPT
где 5.6.7.8 должен быть адрес, который вы видели в tcpdump с пакетами ICMP или на любом другом сайте whatsmyip.
Если другие службы работают, а порт 25 все еще не работает, имейте в виду, что некоторые Интернет-провайдеры намеренно заблокировать TCP-порт 25, чтобы уменьшить количество спама в сети, поэтому вам может потребоваться либо: