пятница, 17 февраля 2012 г.

Перенос сервера на postfix за NAT

     Время от времени, я думаю, эта проблема возникает у многих. У нас после реорганизации подключения к Интернет при смене провайдера решено было перенести почтовый сервер за NAT, до этого внешний интерфейс почтовика смотрел в интернет непосредственно, через свич провайдера, и имел белый IP-адрес.
     Через некоторое время было обнаружено, что трафик сервера резко увеличился внезапно, и появились письма, пересылаемые с одних внешний адресов на другие, внешние же. То есть, проще говоря, сервер вдруг внезапно превратился в open relay и начал рассылать чей-то спам куда попало, в спамбота мы превратились, однако.
     Причем, конфигурация postfix не изменилась вообще, формально в main.cf строка relay domains осталась прописанной как положено в $mydestinations и плюс ссылка на мои же внутренние домены, прописанные в ldap - proxy:ldap:/etc/postfix/ldap_relay_domains.cf
     Решение проблемы мною было найдено и я привожу его далее. Хотя причина возникновения этой ситуации мне точно неизвестна - я эксплуатирую postfix, но не занимаюсь его разработкой, так что сорсы postfix я не читал и не анализировал. Кстати, все же интересно будет, если специалист соответствующего уровня прокомментирует этот пост и опишет более-менее подробно, почему так происходит. Мне понятно только, что раз сервер за NAT, то все его интерфейсы получают IP-адреса, которые он воспринимает, как адреса из внутренней сети и внешняя почта воспринимается как будто идущая от $mydestination
     Итак, чтобы заставить postfix правильно обрабатывать внешнюю почту, необходимо сделать это через классы, а именно:
    1) дописываем в main.cf определение нового класса и добавляем ссылку на него в main.cf в строке smtpd_sender_restrictions :

smtpd_restrictions_classes = from_mydomain
from_mydomain = permit_sasl_authenticated, reject
smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain, permit_sasl_authenticated, reject_unlisted_sender, reject_unauth_destination, check_sender_access hash:/etc/postfix/mysenders
     2) создаем файл /etc/postfix/mysenders в который прописываем строку:
mydomain.ru from_mydomain
     Конечно, не забываем сделать postmap /etc/postfix/mysenders  :)
     Рестартим сервис postfix, имеет смысл почистить также очередь, чтобы старый спам,  bounce на него нашему серверу от других серверов и прочий мусор не висели там больше и не мешали работать.