Настройка нескольких экземпляров Postfix на одном сервере

от автора

Хочу поделиться с Вами одним из вариантов настройки и использования Postfix’a, когда в нашем распоряжении есть несколько IP с которых можно вести доставку писем.

Задача стояла приблизительно такая. Необходимо настроить на одном сервере с двумя интерфейсами, 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
  • 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\а:

P.S. Какая же работа сервиса без статистики. В связи с этим написал расширение для Cacti которое будет собирать с каждого инстанса статистику по кол-ву писем в очередях через SNMP. Напишу это отдельным постом.

Задавайте вопросы, буду рад помочь.

ссылка на оригинал статьи http://habrahabr.ru/post/167269/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *