Мой общедоступный сервер принимает трафик и ретранслирует его на другие машины в сети с помощью правил 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
что позволит вашему внутреннему устройству связываться с внешним миром и отвечать своим клиентам.