Обзор
В данной статье рассматривается настройка почтового сервера 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