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

Мой сервер не слушает порт 25, хотя iptables разрешает трафик smtp

Мой общедоступный сервер принимает трафик и ретранслирует его на другие машины в сети с помощью правил IPTables PREROUTING. Недавно я добавил почтовый сервер 192.168.1.10 и сделал его правила iptables для приема трафика порта 25.

-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT 

С участием netstat -nat на почтовом сервере я вижу, что он слушает: 25

На своей общедоступной машине я добавил

-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT 
-A PREROUTING -i eth1 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.1.10:25

Правило, но его не слушают: 25. Мой университет не пропускает трафик в свою сеть через: 25, поэтому, когда я использую telnet локально, я получаю сообщение об отказе в соединении. Предполагается, что университетский почтовый сервер-ретранслятор будет ретранслировать электронные письма с адреса user@site.uni.tld на мой почтовый сервер (по адресу: 25), но соединение не работает.

----- Transcript of session follows -----
<user@site.uni.tld>... Deferred: Connection refused by site.uni.tld.
Warning: message still undelivered after 4 hours
Will keep trying until message is 2 weeks old

Final-Recipient: RFC822; user@site.uni.tld
Action: delayed
Status: 4.4.1
Remote-MTA: DNS; site.uni.tld

Есть идеи, почему? Записи DNS в порядке и были перенесены на серверы uni relay.

Правило iptables PREROUTING не будет отображаться в стандартном листинге netstat, поскольку в режиме NAT оно работает на уровне ядра, поэтому не регистрируется как процесс, который прослушивает. Лучший способ диагностировать это - отслеживать весь трафик на этой машине через порт 25, чтобы увидеть, как он ведет себя в соответствии с установленными у вас правилами;

tcpdump -nn -i eth0 port 25

(заменяя eth0 с соответствующим именем интерфейса). Это покажет вам весь трафик, поступающий на локальный порт 25 или исходящий на порт 25 на удаленном хосте (так что вы можете смотреть на него в обоих направлениях). Если трафик не отправляется должным образом, ваше правило iptables искажено и требует более внимательного изучения. Если да, то проблема в удаленном хосте.

Изменить: забыл добавить, что вам нужно настроить цепочку MASQUERADE в POSTROUTING:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

что позволит вашему внутреннему устройству связываться с внешним миром и отвечать своим клиентам.