Все ленты — последние статьи

Прозрачное перенаправление почты через iptables

Заголовок можно продолжить:… или плавный перевод почты на другой сервер.
 Недавно встала задача — реализовать возможность использования почтового сервера, не имеющего прямого выхода в интернет. Причем работать он должен вместо старого, который работает, естественно под другим IP-адресом.

 Принципиальный момент — почта изначально хранилась на шлюзе. Настройку iptables будем производить на шлюзе, iptables на почтовом сервере настраивать не нужно.

Исходные данные:
 сервер — CentOS 5
 192.168.0.3 — ай-пи почтового сервера
 192.168.0.1 — внутренний ай-пи адрес бывшего почтового сервера/шлюза
 199.199.199.199 — ай-пи адрес бывшего почтового сервера/шлюза

 

eth0 — локальный интерфейс на шлюзе
 eth1 — внешний интерфейс на шлюзе

Настройка сетевого интерфейса на почтовом сервере:
 ip-адрес: 192.168.0.3
 маска: 255.255.255.0
 шлюз: 192.168.0.1

Перенаправлять будем IMAP (143 порт), SMTP (25 порт).

Перейдем непосредственно к реализации:

1. Прием почты

1.1.1
 # Все то, что пришло на внутренний интерфейс по почтовым портам — перенаправляем
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.0.3 --dport 25 -j DNAT --to-destination 192.168.0.3:25

iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.0.3 --dport 143 -j DNAT --to-destination 192.168.0.3:143


1.1.2
 # Все то, что пришло на внешний интерфейс по почтовым портам — перенаправляем
iptables -t nat -A PREROUTING -i eth1 -p tcp -d 199.199.199.199 --dport 143 -j DNAT --to-destination 192.168.0.3:143

iptables -t nat -A PREROUTING -i eth1 -p tcp -d 199.199.199.199 --dport 25 -j DNAT --to-destination 192.168.0.3:25


1.2
 # Меняем исходный IP-адрес клиента на IP-адрес шлюза.
 # Очень важно делать SNAT только для компьютеров в локальной сети, иначе RBL проверки при приеме почты работать не будут,
 # так как вообще все будет приниматься с одного IP-адреса. Это плохо еще и тем, что нельзя ввести ограничение на количество
 # соединений с одного IP-адреса.
iptables -t nat -A POSTROUTING -o eth0 -p tcp -s 192.168.0.0/24 -d 192.168.0.3 --dport 25 -j SNAT --to-source 192.168.0.1

iptables -t nat -A POSTROUTING -o eth0 -p tcp -s 192.168.0.0/24 -d 192.168.0.3 --dport 143 -j SNAT --to-source 192.168.0.1


1.3
 # Разрешаем проброс портов после перенаправления портов на шлюзе
iptables -A FORWARD -p tcp -d 192.168.0.3 --dport 143 -j ACCEPT

iptables -A FORWARD -p tcp -d 192.168.0.3 --dport 25 -j ACCEPT


2. Отправка почты

2.1
 # Разрешаем отправку почты с почтового сервера
iptables -A FORWARD -s 192.168.0.3 -j ACCEPT


2.2
 # В интернет отправляем пакеты, естественно, только с одного IP-адреса
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 199.199.199.199


Не забываем об обязательном условии
 /etc/sysctl.conf:
net.ipv4.ip_forward = 1


Напоследок, подробная схема работы iptables.


Дополнение.
 Естественным желанием является унификация доменных имен для настройки почтовых клиентов.
 Так чтобы настройка почтового клиента вне офиса не отличалась от настройки внутри офиса.
 Тем более что в новой версии Thunderbird (преимущественно которой мы пользуемся) появился мастер автоматического определения SMTP, POP, IMAP серверов для настраиваемой учетной записи.

Ориентироваться будем на общепринятые имена:
 imap.mydomain.ru
 smtp.mydomain.ru
 mx запись для домена

Нам нужно настроить записи для домена 2 раза — для самого домена в админке доменного имени и в DNS в локальной сети.

Рассмотрим настройку записей на DNS-сервере в локальной сети.
 В named.conf добавляем:


view "internal"
{
        match-clients           { localnets; };
        match-destinations      { localnets; };

....

        zone    "mydomain.ru" IN {
            type master;
            file "master/mydomain.ru";
            allow-update { 127.0.0.1; 192.168.0.1; };
        };

};

Создаем master/mydomain.ru:
$ORIGIN .
$TTL 259200     ; 3 days
mydomain.ru        IN SOA  ns.mydomain.ru. root.mydomain.ru. (
                                23840      ; serial
                                10800      ; refresh (3 hours)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )

                        NS      ns.mydomain.ru.

$ORIGIN mydomain.ru.
@       IN MX 10                mail.mydomain.ru.
ns                       A       192.168.0.1
mail                    A        192.168.0.3
imap                   CNAME    mail
smtp                   CNAME    mail