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

iptables двунаправленный нат / дважды нат для smtp

мы используем брандмауэр linux с несколькими внешними IP-адресами. допустим, у нас есть это:

webserver (www.blabla.com)   : (ext)10.0.0.1 -> (int)172.99.0.2 
mailserver (mail.blabla.com) : (ext)10.0.0.2 -> (int)172.99.1.2

эта маршрутизация выполняется с помощью простой переадресации портов. но если почтовый сервер отправляет почту, он использует первый внешний IP-адрес (10.0.0.1).

работает неплохо, но некоторые smtp-серверы рассматривают нашу почту как спам. потому что 10.0.0.1 не покрывается mail.blabla.com (это исправление).

Я читал кое-что о двунаправленном натурном изображении, чтобы добиться этого:

псевдологика:

if destination port == smpt and source is internal 172.99.1.2 {
   set external address 10.0.0.2
}

ты знаешь, как это сделать?

это способ сделать это:

iptables -t nat -A POSTROUTING -s $INTERNAL_NET -d ! $INTERNAL_NET -dport SMTP -j SNAT --to $EXTERNAL_IP

Рассматривали ли вы пересылку IP-адреса на почтовый сервер? Тогда это будет отправка с желаемого адреса. В этом случае вы не будете использовать NAT для почтового сервера. Проверьте документацию Shorewall за некоторыми примерами.

я бы использовал iptables и iproute:

1. используйте iptables для отметки пакетов, приходящих с почтового сервера и исходящих на любой порт 25

iptables -A PREROUTING -i <mailsrv_iface> -t mangle -p tcp --dport 25 -j MARK --set-mark 25

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

echo 25 mailgw >> /etc/iproute2/rt_tables
ip ru add fwmark 25 table mailgw
ip ro add default via <correct_mailgw_ip> dev <correct_mailgw_iface> table mailgw

Да, это в основном то правило брандмауэра, которое вам нужно. Берегись, это --dport, т.е. вам нужен двойной тире.

В качестве альтернативы можно попросить вашего интернет-провайдера поставить другую обратную запись DNS (также называемую PTR) для второго IP-адреса, а затем создать запись MX, использующую тот же IP-адрес с более высоким значением, чтобы доставка извне всегда была попытался сначала на реальном сервере.