Конфигурационный файл настройки postfix

Разберем примерный конфигурационный файл настройки postfix (на момент написания статьи это был postfix-2.6.3,1 на сервере под управлением FreeBSD 7.2-RELEASE), который стоит между internet и сервером MS Exchange 2007. На сервере, где стоит postfix почтовых ящиков нет.

Конфигурационный файл postfix находится в /usr/local/etc/postfix/main.cf.

Или же выполните команду:

#postconf sample_directory

которая покажет вам путь к файлу конфигурации.

В первых закомментированных строках конфигурационного файле указано, что для выяснения полного синтаксиса конкретного параметра необходимо обратиться к man-странице командой man 5 postconf. Также много полезной для себя информации можно почерпнуть из файлов readme, которые при установке пакета помещаются в /usr/local/share/doc/postfix. Если вы не обнаружите по данному пути документации выполните команду:

#postconf html_directory

или

#postconf readme_directory

которая выведет вам путь к файлам документации.

Так же вам рекомендуют менять за один раз не более 2-3 параметров и каждый раз проверять после этого корректную работу postfix. От себя – делайте бекапы, копируя конфигурационный файл в другое место, например в /var/backups. Итак, начнем.

 

# SOFT BOUNCE

soft_bounce = no

При изменении этого параметра в “soft_bounce = yes” мы укажем posfix заменить действия с REJECT (отклонить) на DEFER (попытаться позже). Это позволит оставлять сообщения в очереди, которые в противном случае были бы возвращены отправителю, т.е. postfix заменит все коды ответов 5xx на 4xx. Бывает очень полезным при тестировании новых restrictions (ограничений на прием почты).

 

# LOCAL PATHNAME INFORMATION

queue_directory = /var/spool/postfix

command_directory = /usr/local/sbin

daemon_directory = /usr/local/libexec/postfix

data_directory = /var/db/postfix

Выше перечислены стандартные пути до места, где будет находится очередь postfix, где находятся все команды, относящиеся к postfix, где расположен демон программы postfix, путь где postfix создает свои различные служебные файлы (например, master.lock)

 

# QUEUE AND PROCESS OWNERSHIP

mail_owner = postfix

рекомендованный “посвященный” пользователь, от имени которого будет работать postfix.

 

# INTERNET HOST AND DOMAIN NAMES

#myhostname = host.domain.tld

#myhostname = virtual.domain.tld

#mydomain = domain.tld

В данных параметрах мы можем указать наш хостнейм и обслуживаемый нашим postfix домен. Но если команды:

postconf myhostname и postconf mydomain изначально выводят правильные и нужные нам значения – то указывать это тут не обязательно. Данные значения буду многократно использоваться самим postfix

 

# SENDING MAIL

myorigin = $myhostname

Указывает полное доменное имя машины (fully-qualified domain name – FQDN), на которой функционирует Postfix. По умолчанию, myhostname устанавливается в имя локальной машины. Если имя вашей машины не указано в полной доменной форме (FQDN), или вы запускаете postfix на виртуальном интерфейсе, вам необходимо указать полное доменное имя (FQDN), которое должна использовать почтовая система. Альтернативно, если вы укажете значение mydomain, то postfix использует это значение, чтобы сгенерировать полное доменное имя машины (FQDN) для параметра myhostname.

По умолчанию, используется имя локальной машины – $myhostname.

 

# RECEIVING MAIL

inet_interfaces = $myhostname, localhost

В данном параметре указаны сетевые интерфейсы, на которых работает postfix. По умолчанию, он работает на всех сетевых интерфейсах почтового сервера. Вы так же можете указать на каких именно он должен работать (принимать почту). Такая необходимость возникает, если у вас поднято несколько виртуальных адресов на одном из сетевых интерфейсах. Например:

inet_interfaces = 123.456.789.0, 127.0.0.1

в результате postfix будет “слушать” на 123.456.789.0 адресе и на локалхосте.

 

mydestination = $myhostname, localhost.$mydomain, localhost

В данном параметре указано, для каких доменов почта будет доставляться локально вместо пересылки на другой хост. По умолчанию postfix принимает почту только для локальной машины. Не указывайте тут свои виртуальные домены, для которых вы хотите принимать почту. Это делается в параметре virtual_mailbox_domains.

 

# REJECTING MAIL FOR UNKNOWN LOCAL USERS

#local_recipient_maps =

unknown_local_recipient_reject_code = 550

Данную секцию я оставляю не тронутой, т.к. все мои почтовые аккаунты хранятся в Active Directory.

И по умолчанию действие postfix на почту для не найденного в моей системе локального получателя – reject (отклонить). В процессе отладки и настройки получателей рекомендуют устанавливать данный параметр в 450 – попробовать позже.

 

# TRUST AND RELAY CONTROL

#mynetworks_style = class

#mynetworks_style = subnet

#mynetworks_style = host

mynetworks = 192.168.0.19/32, 127.0.0.0/8

Очень важная секция, в которой указываются авторизованные сети, от которых ваш postfix будет пересылать через себя почту.

Настоятельно рекомендую указать в данном параметре только нужные для вас сети, т.к. postfix по умолчанию является опен-релеем, т.е. позволяет всем слать через себя почту. В данном примере – 192.168.0.19/32 ip-адрес локального сервера (которому я доверяю), от которого разрешено пересылать почту. Он-же: сервер на котором стоит MS Exchange 2007.

 

#relay_domains = $mydestination

relay_domains = your_domain.ru

В данном параметре перечислены домены, на которые разрешена пересылка корреспонденции от посторонних клиентов.

 

# REJECTING UNKNOWN RELAY USERS

relay_recipient_maps = ldap:/usr/local/etc/postfix/ldap_relay_recipient_maps.cf

Мой postfix является “мостом” для передачи почты из/в internet. В организации используется домен и почтовый сервер MS Exchange 2007, т.е. все пользователи заведены в Active Directory. В данном параметре указано, что получателей локальной почты postfix должен искать по ldap-протоколу в Active Directory домена. С помощью настроек, описанных в ldap_relay_recipient_maps.cf, postfix авторизуется в домене и вычисляет локальных пользователей.

Для этого вам необходимо завести в домене пользователя postfix, присвоить ему пароль и не переносить его из контейнера пользователей по умолчанию Users. В файле ldap_relay_recipient_maps.cf по пути, который выдает команда postconf sample_directory необходимо указать следующее:

 

server_host = 192.168.0.2

search_base = dc=your_domain, dc=ru

version = 3

bind_dn = CN=postfix,CN=Users,DC=your_domain,DC=ru

bind_pw = passwd

query_filter = (proxyAddresses=smtp:%s)

result_attribute = mail

где server_host – ip-адрес домен-контроллера;

bind_pw – пароль пользователя posfix в домене;

your_domain – ваш домен.

 

# ALIAS DATABASE

alias_maps = hash:/etc/mail/aliases

alias_database = hash:/etc/mail/aliases

Пусть к таблице локальных пользователей почты на сервере, где стоит posfix – aliases, на основе которой будет создана база aliases, когда вы дадите команду newaliases после правки таблицы aliases. А также тип и путь к самой базе.

 

# DEBUGGING CONTROL

debug_peer_level = 2

debugger_command =

PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin

ddd $daemon_directory/$process_name $process_id & sleep 5

Параметры, относящиеся для отладки работы postfix. Я их оставил без изменения.

 

# INSTALL-TIME CONFIGURATION INFORMATION

sendmail_path = /usr/local/sbin/sendmail

newaliases_path = /usr/local/bin/newaliases

mailq_path = /usr/local/bin/mailq

setgid_group = maildrop

html_directory = /usr/local/share/doc/postfix

manpage_directory = /usr/local/man

sample_directory = /usr/local/etc/postfix

readme_directory = /usr/local/share/doc/postfix

Название секции говорит само за себя. Тут прописаны пути для директорий, команд и файлов помощи postfix, куда они поместились в процессе установки пакета.

 

Далее начинается самое интересное. Пишем свои правила 🙂

Все взято из указанных в начале статьи документов и статьи, опубликованной на этом сайте.

Целью написания данных правил является отсечение огромного количества спама и вирусных сообщений, приходящего на почтовые адреса сотрудников организации. Гарантирую, что если вы таким (ну, или почти таким) образом настроите свой postfix, количество спама упадет в разы!

 

##########################################

############ my  rules ###################

##########################################

content_filter=amavisfeed:[127.0.0.1]:10024

На моем сервере используется антивирус amavis. В данном параметре указано, на каком порту и какого типа у нас работает антивирус.

 

strict_rfc821_envelopes = yes

Запрет некорректного синтаксиса в командах MAIL FROM или RCPT TO. Отключено по умолчанию.

– запрещает использования синтаксиса адресов RFC 822;

– запрещает использования адресов, которые не заключены в угловые скобки <>.

 

relay_transport = smtp:192.168.0.19:25

Параметр указывает следующий сервер и порт для доставки почты к указанным в relay_domains доменам. В моем случае – это сервер, где работает MS Exchange 2007.

 

smtp_host_lookup = native

В данном параметре указывается механизм, с помощью которого postfix определяет ip адреса подключающихся к нему хостов.

 

message_size_limit = 52400000

Данный параметр ставит ограничение на максимальный размер пересылаемого письма в байтах.

 

mailbox_size_limit = 524000000

Данный параметр ставит ограничение на максимальный размер почтового ящика получателя почты в байтах. В моем случае этот параметр не актуален.

 

maximal_queue_lifetime = 10d

Этим параметром указывается сколько времени максимально (в данном случае – 10 дней) письмо может находится в очереди, пока не будет отослано назад отправителю с пометкой, что оно не может быть доставлено.

 

disable_vrfy_command = yes

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

(Но существует вероятность, что почтовый сервер получателя проверяет нашу почту на реальность адрес нашего отправителя. При такой настройке, он не получит его подтверждения. Так что используйте эту настройку на свое усмотрение).

 

smtpd_reject_unlisted_sender = yes

Отклонение писем с несуществующим адресом отправителя. Эта форма фильтрации “на входе” может помочь в борьбе с “червями” и спамерами. Отключено по умолчанию. (См. предыдущий параметр. Используйте на свое усмотрение).

 

max_use = 500

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

 

smtpd_delay_reject = yes

Данной настройкой мы даем команду postfix откладывать обработку списков ограничений до получения команды RCPT TO или ETRN. Таким образом мы сможем увидеть в логе postfix информацию о письме (от кого, кому и т.д.), чтобы при необходимости проанализировать причину, по которой письмо было отклонено.

 

smtpd_helo_required = yes

Требование к клиентам отсылать команду HELO или EHLO перед использованием команды MAIL FROM или ETRN. Ограничение отключено по умолчанию.

 

smtpd_recipient_limit = 10

Ограничиваем максимальное количество получателей на одно почтовое сообщение. По умолчанию – 1000. 

 

Далее последуют ограничения, которые мы хотим наложить на входящие соединения. Каждый список ограничений обрабатывается слева направо до тех пор, пока какое-либо ограничение не выдаст результат PERMIT (разрешить), REJECT (отклонить) или DEFER (отложить для последующей повторной попытки). Достижение конца списка эквивалентно получению результата PERMIT. Списки ограничений обрабатываются в следующем порядке: client, helo, etrn или client, helo, sender, recipient, data, end-of-data. Когда список ограничений (например, client) выдает результат REJECT или DEFER, обработка всех последующих списков helo, sender, и т.д. не выполняется.

 

Ограничения, накладываемые на клиента в момент установления соединения:

 

smtpd_client_restrictions =

        permit_mynetworks

        check_client_access hash:/usr/local/etc/postfix/sender_access

        reject_unknown_reverse_client_hostname

        reject_rbl_client bl.spamcop.net

        reject_rbl_client sbl.spamhaus.org

        reject_rbl_client zen.spamhaus.org

        reject_rbl_client dnsbl.ahbl.org

        reject_rbl_client dnsbl.njabl.org

        reject_rbl_client dnsbl.sorbs.net

        reject_rbl_client aspews.ext.sorbs.net

        reject_rbl_client cbl.anti-spam.org.cn

        reject_rbl_client cblplus.anti-spam.org.cn

        reject_rbl_client cblless.anti-spam.org.cn

— Разрешаем слать почту через себя только авторизованным сетям, указанным в параметре mynetworks.

– Указываем на список, где перечислены домены, которым мы доверяем, т.е. принимаем от них почту без проверки в данном ограничении. Таблица имеет вид:

 

# hosts, contains spamtraps

spamcop.net                     OK

listme.dsbl.org                 OK

# good hosts

forumcomp.ru                    OK

maxblogs.ru                     OK

Не забывайте каждый раз после изменений, вносимых в данный файл, давать команду на перестроение базы по нему:

postmap /usr/local/etc/postfix/sender_access

в результате чего у вас появиться hash-база sender_access.db

Затем необходимо дать команду postfix, чтобы он перечитал свои конфигурационные файлы:

/usr/local/etc/rc.d/postfix reload

– Отклоняем почтовые сервера, которые не имеют обратной dns-записи. Но очень часто попадаются почтовые сервера, от которых нам надо принимать почту, но у которых нет обратной dns-записи. Такие сервера заносим в таблицу sender_access. Применяйте данное ограничение по вашему усмотрению.

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

 

Ограничения, накладываемые на сообщения, на основании информации HELO/EHLO:

(В данных ограничениях происходят проверки на корректность HELO/EHLO)

 

smtpd_discard_ehlo_keywords =

silent-discard

dsn

smtpd_helo_restrictions =

        permit_mynetworks

        check_helo_access hash:/usr/local/etc/postfix/sender_access

        reject_invalid_helo_hostname

        reject_unknown_helo_hostname

        reject_non_fqdn_helo_hostname

Следующим ограничением мы запрещаем использование команды ETRN из-за пределов авторизованных сетей:

 

smtpd_etrn_restriction =

        permit_mynetworks

        reject

Ограничения, накладываемые на основании информации MAIL FROM:

 

smtpd_sender_restrictions =

        permit_mynetworks

        check_sender_access hash:/usr/local/etc/postfix/sender_access

        reject_non_fqdn_sender

        reject_unverified_sender

reject_unknown_sender_domain

Ограничения, накладываемые на основании информации RCPT TO:

 

smtpd_recipient_restrictions =

        check_recipient_access hash:/usr/local/etc/postfix/recipient_access

        permit_mynetworks

        permit_auth_destination

        reject_unauth_destination

— Указываем на список, где перечислены домены, которым мы безоговорочно не доверяем, т.е. даже не собираемся слать туда почту, а также локальные почтовые адреса, на которые вы не хотите принимать почту из вне. Не разрешаем делать это даже авторизованным сетям. Таблица выглядит таким образом:

 

abuse&your_domain.ru               OK

postmaster&your_domain.ru          OK

maxblogs.ru                        OK

все@your_domain.ru                 REJECT

ВСЕ@your_domain.ru                 REJECT

Все@your_domain.ru                 REJECT

qmail.com                          REJECT

Не забывайте создавать на ее основе hash-базу.

– Разрешаем пересылать почту из авторизованных сетей, из обслуживаемого нами домена, а также принимаем почту, если письма адресованы именно нам.

– reject_unauth_destination запрещает стать нашему postfix открытым релеем почты!

 

virtual_alias_maps=hash:/usr/local/etc/postfix/relay_aliases

У меня возникла ситуация, когда стало необходимым пересылать почту, адресованную несуществующему на нашем AD пользователю в другое место.

Для этого была создана такая таблица и на ее основе hash-база:

 

vasya@your_domain.ru      

Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Очень полезным бывает при тестировании нового ограничения почты, которое вы собираетесь применить, но в действии которого вы не уверены, указать перед ним warn_if_reject. Это позволит заменить действия posfix REJECT на замечания – warnings. Вместо отклонения команды клиента postfix зарегистрирует в своих логах, что он собирался отвергнуть. Например:

 

smtpd_sender_restrictions =

        permit_mynetworks

        warn_if_reject reject_sender_login_mismatch

Вот в принципе и все. 

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

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