Задача стояла приблизительно такая. Необходимо настроить на одном сервере с двумя интерфейсами, Postfix с разными очередями для разных внешних IP. Пример на картинке.
Прошу пожаловать под кат, кому эта тема интереса.
- Debian сервер
- eth0, eth0:1, eth0:2 — внешний интерфейс с алиасами
- x.x.x.1, x.x.x.2, x.x.x.3
- eth1, eth1:1, eth1:2 — внутренний интерфейс с алиасами
- y.y.y.1, y.y.y.2, y.y.y.3
- eth0, eth0:1, eth0:2 — внешний интерфейс с алиасами
- Postfix 2.9.x
- Домен — example.com
Задача:
- Мапинг внутренних и внешних IP с индивидуальными очередями и возможностью индивидуальной настройки. Все что приходит на отсылку в определенный внутренний интерфейс должно уйти через предопределенный внешний интерфейс
- localhost(sendmail, mail()) -> x.x.x.1
- y.y.y.1 -> x.x.x.1
- y.y.y.2 -> x.x.x.2
- y.y.y.3 -> x.x.x.3
- Входящая почта (MX) example.com принимается на один IP
- x.x.x.1
- Доставка почты от пользователей домена + sasl авторизация
- x.x.x.1 -> x.x.x.1
Решение:
Для удобства придумываем хостнеймы для IP, я использую нотацию по назначению:
- y.y.y.1 — mx.example.com
- y.y.y.2 — mail-out2.example.com
- y.y.y.3 — mail-out3.example.com
- x.x.x.1 — mx.local
- x.x.x.2 — mail-out2.local
- x.x.x.3 — mail-out3.local
Для нормальной работы следует позаботиться о DNS, у нас один принимает почту и все postfix’ы будут отсылать почту, для них следует прописать PTR и SPF записи, вот так будут выглядеть прямые и обратные RR для example.com:
example.com. IN MX 0 mx.example.com. mx.example.com. IN A x.x.x.1 mail-out2.example.com. IN A x.x.x.2 mail-out3.example.com. IN A x.x.x.3 example.com. IN TXT "v=spf1 ip4:x.x.x.2 ip4:x.x.x.4 mx -all" 1.x.x.x..in-addr.arpa. IN PTR mx.example.com. 2.x.x.x..in-addr.arpa. IN PTR mail-out2.example.com. 3.x.x.x..in-addr.arpa. IN PTR mail-out3.example.com.
Пред тем как заняться инстансами, необходимо изменить настройки основного postfix’а, как настроить postfix для работы MX написано было много, посему остановлюсь на основных моментах, редактируем /etc/postfix/main.cf:
Оставляем только ipv4 и прописываем необходимые ip, обработка писем
inet_interfaces = x.x.x.1, y.y.y.1, 127.0.0.1 inet_protocols = ipv4
Принудительно отправляем письма с одного IP и прописываем к нему HELO
smtp_bind_address = x.x.x.1 smtp_helo_name = mx.example.com myhostname = mx.example.com
Доставляем письма только со своей внутренней сети и своих IP:
mynetworks = x.x.x.1, x.x.x.2, x.x.x.3, y.y.y.0/24
Принимаем почту для своего домена:
mydestination = example.com, *.example.com, localhost
Основной Postfix готов. Создаем наши инстансы. Нам понадобиться 2 дополнительных инстанса которые будут настроены лишь для отсылки писем, стандартный будет принимать локальную почту, а так же будет MX’ом для домена example.com.
# postmulti -e init # postmulti -I postfix-mail-out2 -G out-only -e create # postmulti -I postfix-mail-out3 -G out-only -e create
Настраиваем инстансы. Файлы настроек будет в /etc/postfix-mail-out2 и postfix-mail-out3 соответственно. Открываем /etc/postfix-mail-out2/main.cf. Прописываем HELO, внешний и внутренний IP:
myhostname = mail-out2.example.com smtp_bind_address = x.x.x.2 smtp_helo_name = mail-out2.example.com inet_protocols = ipv4 inet_interfaces = x.x.x.2, y.y.y.2
Поскольку дополнительные инстансы будут заниматься только отсылкой почты, надо запретить локальную доставку и прописать откуда возможен релей:
mydestination = alias_maps = alias_database = local_recipient_maps = local_transport = error:5.1.1 Mailbox unavailable mynetworks = /etc/postfix/mynetworks
Чтобы иметь возможность перекидывать почту с одного физического сервера на другой в внутри локальной сети, необходимо добавить еще один траспорт, назовем его lrelay. Делаем это в master.cf каждого инстанса. Добавляем строку:
lrelay unix - - - - - smtp -o smtp_bind_address=y.y.y.2
Перекидывать с одного сервера на другой можно будет через transport_maps. Прописываем в каждый инстанс:
transport_maps = hash:/etc/postfix-mail-out1/transport
Например чтобы все письма с mail-out1 были переправлены на mail-out2. В /etc/postfix-mail-out1/transport добавляем строку:
* lrelay:y.y.y.3
Второй инстанс настраивается аналогично, меняются только IP.
После настройки необходимо активировать инстансы:
# postmulti -i postfix-mail-out2 -e enable # postmulti -i postfix-mail-out3 -e enable
И перезапустить postfix:
# /etc/init.d/postfix restart
Перезапуск, старт и остановка отдельных инстансев может производиться через postmulti:
# postmulti -i postfix-mail-out2 -p start/stop # postmulti -i postfix-mail-out3 -p start/stop
Проверить кто запущен, а кто нет:
# postfix status postfix/postfix-script: the Postfix mail system is running: PID: 762 postfix-mail-out2/postfix-script: the Postfix mail system is running: PID: 114 postfix-mail-out3/postfix-script: the Postfix mail system is running: PID: 149
Теперь имеем 3 раздельные очереди, которые можно до-настраивать по собственному желанию.
У меня для основного постфикса и дополнительных инстансев запущены dkim и domainkey демоны которые подписывают исходящие письма.
Для каждого инстанса можно настроить любые фильтры и подключить все что необходимо, spamassin, gerylist и т.д.
Как и для чего можно использоваться такую конфигурацию:
- bulk рассылка, можно иметь на одном сервере много IP с которых ведется рассылка с индивидуальными настройками
- высокая производительность
- часто большие почтовые службы ограничивают прием писем по IP, имея в своем распоряжении несколько можно улучшить доставку большего количества писем
- виртуальный почтовых безопасный хостинг
- для каждого домена можно настроить свою копию
- сложная обработка писем, на уровне сервера
- например внутренняя корреспонденция обрабатывается без фильтров
- внешняя корреспонденция обрабатывается более строго, спам, серые и листы, например
Немного полезные ссылок по настройке Postfix\а:
- OpenDKIM + Postfix = просто
- DKIM + Postfix = просто
- Антиспам средствами postfix+spamassassin
- Защита пользователей почтового сервера от спаммеров — несколько шагов, которые помогут вам отослать спаммеров подальше
P.S. Какая же работа сервиса без статистики. В связи с этим написал расширение для Cacti которое будет собирать с каждого инстанса статистику по кол-ву писем в очередях через SNMP. Напишу это отдельным постом.
Задавайте вопросы, буду рад помочь.
ссылка на оригинал статьи http://habrahabr.ru/post/167269/
Добавить комментарий