Настройка почтового шлюза на базе Postfix

Обзор

В данной статье рассматривается настройка почтового сервера Postfix в качестве почтового шлюза организации. Самой распространенной причиной для данных действий является повышение безопасности, даже в случае, если вы не используете Exchange. Улучшение безопасности достигается за счет того, что на шлюзе не открыты никакие порты, за исключением SMTP и на нем не хранятся почтовые сообщения пользователей. Худшее что может произойти — атакующий получит список адресов электронной почты вашего домена. Также шлюз используется для фильтрации спама, грейлистинга, сканирования на вирусы и некоторые другие полезные действия.


В интернете существует большое количество «статей», которые очень упрощают процесс использованием директивы «relayhost = internalsmtp.example.com». В данном случае возникает проблема с тем, что шлюз незнает ничего о внутренний адресах (даже в случае если он настроен на прием почты только для домена @example.com). Может возникнуть, и обязательно возникнет ситуация во время спам атаки, когда будет идти поток писем на неверные адреса, которые внешний шлюз перешлет на внутренний почтовый сервер, тот потратит время на обработку, отклонит письмо и отправит обратно на шлюз и т.д. Большое количество таких сообщений существенно снизят производительность почтового сервера.

Для корректной настройки почтового шлюза необходимо чтобы он знал правильные внутренние адреса. В данном случае любое сообщение, содержащее несуществующий адрес немедленно отсекается сервером, ещё до момента приема данных.

 

Настройка

В данной статье мы не будем рассматривать установку Postfix, так как данный сервер легко устанавливается под большинство дистрибутивов, и вы можете найти большое количество статей, посвященных данному действию.

 

/etc/postfix/main.cf

Как должно быть понятно из названия, это основной конфигурационный файл Postfix.

Совет: Команда ниже покажет вам все конфигурационные директивы, значения которых отличаются от дефолтных:

postconf -n

Так как на шлюзе требуется только пересылка почты, отключаем локальную доставку сообщений (Замечание: пустое значение конфигурациооной директивы означает её отключение):

mydestination =
	local_recipient_maps =
	local_transport = error:local mail delivery is disabled

Установите директиву myorigin в значение домена, на который пересылается почта:

myorigin = example.com

Директива mynetworks = определите сети, которым разрешено выполнять пересылку через данный сервер. Обычно сюда включают только внутреннюю локальную сеть, или вообще только IP внутреннего почтового сервера:

mynetworks =
	    127.0.0.0/8,
	    172.16.42.0/24

Данная секция предотвращает прием сообщений для адресов вида [email protected] to match. Мы явно определим домены, для которых необходимо принимать почту в директиве relay_domains ниже.

parent_domain_matches_subdomains =
	    debug_peer_list,
	    smtpd_access_maps

relay_domains = в данной директиве определяем домены, для которых необходимо принимать почту.

relay_domains =
	    example1.com,
	    example2.com,
	    subdomain.example.com

smtpd_recipient_restrictions = контролируем действия сервера после команды RCPT TO.

smtpd_recipient_restrictions =
	    permit_mynetworks,
	    reject_unauth_destination

transport_maps = указываем связь между доменами и SMTP серверами, на которые будет пересылаться почта.

transport_maps = hash:/etc/postfix/transport

relay_recipient_maps = указатель на файл, который будет содержать спискок адресов электронной почты, для которых Postfix будет принимать сообщения.

relay_recipient_maps = hash:/etc/postfix/relay_recipients

show_user_unknown_table_name = в установленном значении no возвращает сообщение «User unknown» если адрес электронной почты не найден. Используется в связке с relay_recipient_maps.

show_user_unknown_table_name = no

Хотя локальная доставка почты отлючена, почтовый шлюз должен принимать почты для адресов postmaster и abuse. Для этого определите виртуальные алиасы.

virtual_alias_maps = hash:/etc/postfix/virtual

 

/etc/postfix/master.cf

Данный файл определяет определяет обслуживаемые Postfix службы. Для полного отключения локальной доставки, отредактируйте данный файл и вставьте символ # в начале следующей строки:

#local     unix  -       n       n       -       -       local

 

/etc/postfix/virtual

В случае типичной настройки Postfix файл /etc/aliases используется для пересылки почты на другие аккаунты или внешние адреса. Однако, так как локальная доставка отключена, модификация файла etc/aliases не принесет результатат. Поэтому нам нужно использовать файл /etc/postfix/virtual.

postmaster      [email protected]
	abuse           [email protected]
	root		[email protected]

Вы также можете использовать данный файл более широко. Вы можете перенаправлять почту на другие адреса, создавать простые списки рассылки или копировать почту другому пользователю и прочее..

[email protected]      [email protected]
	[email protected]     [email protected],[email protected],[email protected]
	[email protected]         [email protected]
	[email protected]             [email protected],[email protected]

 

/etc/postfix/transport

Данный файл определяет отношения между доменами и серверами, куда должна пересылаться почта для данных доменов.

example1.com              smtp:insidesmtp.example.com
	example2.com              smtp:insidesmtp.example.com
	subdomain.example.com     smtp:insidesmtp.example.com

 

/etc/postfix/relay_recipients

Данный файл содержит полный списко адресов электронно почты, для которых шлюз будет принимать сообщения.

[email protected] OK
	[email protected] OK
	[email protected] OK
	[email protected] OK
	[email protected] OK
	[email protected] OK

 

Заполняем файл relay_recipients адресами из Active Directory

Данный скрипт требует установленного perl и модуля Net::LDAP.

  • Скачайте скрипт с http://www-personal.umich.edu/~malth/gaptuning/postfix/getadsmtp.pl
  • Отредактируйте скрипт в соответствии с своими значениями:
$VALID = "/etc/postfix/relay_recipients";
	$dc1="domaincontroller1.example.com";
	$dc2="domaincontroller2.example.com";
	$hqbase="cn=Users,dc=example,dc=com";
	$user="cn=user,cn=Users,dc=example,dc=com";
	$passwd="password";

Создаем базы

Для завершения нам необходимо сделать хэшированные базы данных из наполненных нами файлов:

postmap hash:/etc/postfix/virtual
	postmap hash:/etc/postfix/transport
	postmap hash:/etc/postfix/relay_recipients

Заметка: помните, что необходимо перехэшировать базу после каждого изменения файла..

 

Перезапуск Postfix

Предпочитаемый способ для того, чтобы Postfix перечитал конфигурационные файлы следующий:

postfix reload

 

Проверка

Как вы можете видеть из следующего примера, данная конфигурация работает:

<strong>	telnet emailgateway.example.com smtp</strong>
	220 emailgateway.example.com ESMTP Postfix
<strong>	EHLO localhost</strong>
	250-emailgateway.example.com
	250-PIPELINING
	250-SIZE 10240000
	250-VRFY
	250-ETRN
	250 8BITMIME
<strong>	MAIL FROM: <[email protected]></strong>
	250 Ok
<strong>	RCPT TO: <[email protected]></strong>
	554 <[email protected]>: Relay access denied
<strong>	RCPT TO: <[email protected]></strong>
	554 <[email protected]>: Relay access denied
<strong>	RCPT TO: <[email protected]></strong>
	250 Ok
<strong>	DATA</strong>
	354 End data with <CR><LF>.<CR><LF>
<strong>	Subject: test</strong>
<strong>	test 1 2 3</strong>
<strong>	.</strong>
	250 Ok: queued as 5152A39097
<strong>	QUIT</strong>
	221 Bye

 

 

Источник

 

 

Запись опубликована в рубрике Postfix. Добавьте в закладки постоянную ссылку.

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

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

Я не спамер This plugin created by Alexei91