Назад | Перейти на главную страницу

Не удается подключиться к SMTP-серверу exim4

У меня проблема в том, что я не могу подключиться к своему 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, чтобы уменьшить количество спама в сети, поэтому вам может потребоваться либо:

  • свяжитесь с вашим интернет-провайдером и запросите снятие бана с этого порта с вашего IP
  • настроить Exim для работы с другим портом (я предлагаю порт 465 с шифрованием, но для обхода таких брандмауэров очень часто используется незашифрованный порт 587)
  • использовать VPN для настройки туннеля к серверу exim и маршрутизации трафика через него