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

NAT-соединение с iptables перезаписывает исходный IP-адрес в журналах

У меня есть следующая инфраструктура:

 internet   [outside 81.x.x.x] router [inside 192.168.1.1] 
                                    |    [network 192.168.1.0/24] 
                                    | 
                                   mail server [192.168.1.2]

На роутере (DD-WRT) с iptables. У меня включен NAT, так как я хочу, чтобы мой почтовый сервер отвечал за внешний IP-адрес. У меня следующая установка:

iptables -t nat -I PREROUTING -d 81.x.x.x -j DNAT --to 192.168.1.2 
iptables -t nat -I POSTROUTING -s 192.168.1.2 -j SNAT --to 81.x.x.x 
iptables -I FORWARD -d 192.168.1.2 -p tcp --dport 25 -j ACCEPT

с некоторыми другими открытыми портами.

Однако, когда почта приходит на почтовый сервер, postfix показывает следующее сообщение:

postfix/smtpd[6964]: connect from unknown[192.168.1.1]

Кажется, что все письма, приходящие извне, приходят с маршрутизаторами внутри IP-адреса. Что мне не хватает, чтобы отображался исходный IP-адрес вместо маршрутизаторов внутри IP?

Странности ISTR похожи на эту раньше, но чего-то не хватает, как вы говорите. Следующая информация может быть полезна от маршрутизатора:

iptables -t nat -L -n
iptables -L -n
ip route

И это с почтового сервера:

iptables -t nat -L -n
ip route
grep . /proc/sys/net/ipv4/conf/*/rp_filter

Без этой информации я бы просто стер существующий брандмауэр и сделал что-то более конкретное:

iptables -t nat -F  # also on server
iptables -t nat -I PREROUTING -p tcp -d 81.x.x.x --dport 25 \
    -j DNAT --to 192.168.1.2:25

И посмотрите, что происходит в логах почты. Если вам нужен SNAT для исходящего SMTP, что-то вроде:

iptables -t nat -I POSTROUTING -p tcp -s 192.168.1.2 --dport 25 \
    -m multiport --sports 1024:65535 -j SNAT --to 81.x.x.x:25

И если локального преобразователя DNS недостаточно:

iptables -t nat -I POSTROUTING -p udp -s 192.168.1.2 --dport 53 \
    -j SNAT --to 81.x.x.x

Кажется, вы настроили NAT «1 к 1» с первыми двумя правилами iptables, но затем вы добавили третье, довольно любопытное правило:

iptables -I FORWARD -d 192.168.1.2 -p tcp --dport 25 -j ACCEPT

В таких правилах нет необходимости при выполнении NAT «1 к 1», и они не делают ничего полезного. Из предоставленной вами информации это наиболее вероятная причина проблемы. Просто удалите это.

iptables -D FORWARD -d 192.168.1.2 -p tcp --dport 25 -j ACCEPT