FreeBSD: строим почтовую систему Postfix + Dovecot + MySQL + Postfix Admin, часть 2 — установка и настройка Postfix.

Автор: | 08/05/2012
 

Это вторая часть.

Первая часть тут>>>.

Третья часть тут>>>.

Приступаем к установке MTA Postfix:

# cd /usr/ports/mail/postfix/
# make config-recursive

# make install clean

В процессе нам предлагает сконфигурировать и установить Dovecot:

В процессе установки будет вопрос:

Would you like to activate Postfix in /etc/mail/mailer.conf [n]? y

Если устанавливаем как полную замену SMTP-сервера, то отвечаем Y. Sendmail использоваться в данном случае не будет вообще, так что заменяем.

Отредактируем файлы конфигурации, первым — /usr/local/etc/postfix/main.cf:

# cat /usr/local/etc/postfix/main.cf | grep -v '^#' | sed '/^$/d' | more

#Настройки каталогов
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix

#Системный пользователь, которому будет "принадлежать" почта
mail_owner = postfix

#Различные сетевые настройки
myhostname = akira.domain.org.ua
mydomain = domain.org.ua
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, 77.120.106.40

#Прочие настройки, достаточно описаны в самом файле
local_recipient_maps = unix:passwd.byname $alias_maps
unknown_local_recipient_reject_code = 550
mynetworks_style = host
mynetworks = 127.0.0.0/8
relay_domains =
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
smtpd_banner = $myhostname ESMTP $mail_name
debug_peer_level = 2
debug_peer_list = 127.0.0.1
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
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

#Т.к. мы используем MySQL для хранения данных, то ящики и домены считаются "виртуальными", указываем где и как искать информацию о них
virtual_mailbox_base = /usr/mail
virtual_alias_maps = proxy:mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 65534
virtual_uid_maps = static:65534
virtual_gid_maps = static:65534
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

#Описываем аутентификацию, Т.к. в этих параметрах много чего важного - постараюсь описать все как можно подробнее.
#Независимо от типа аутентификации этот параметр всегда должен быть включен
smtpd_sasl_auth_enable = yes

#Некоторые клиенты настаивают на использовании SASL аутентификации, если оно предлагается, даже если они не настроены на отправку учетных данных, - и поэтому они всегда терпят неудачу и отключаются. Для них скрываем свою возможность проводить аутентификацию
smtpd_sasl_exceptions_networks = $mynetworks

#Ограничиваем варианты аутентификации, как минимум noanonymous обязано быть
smtpd_sasl_security_options = noanonymous

#Не все клиенты проводят процесс аутентификации согласно RFC, для них делаем исключение
broken_sasl_auth_clients = yes

#По-умолчанию Postfix использует механизм аутентификации с Cyrus SASL, мы установим Dovecot
smtpd_sasl_type = dovecot

#Dovecot настроен на использование UNIX-сокета, указываем это Postfix-у
smtpd_sasl_path = private/auth

#Далее - настройки отсеивания нежелательной почты, хотя в этом варианте конфигурации блокируется только НЕ прошедшие проверку, используйте reject вместо permit в конце блока для изменения
smtpd_client_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_pipelining
permit

smtpd_helo_restrictions =
permit

smtpd_sender_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_non_fqdn_sender
reject_unknown_sender_domain
permit

smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_non_fqdn_recipient
reject_unauth_destination
reject_unknown_recipient_domain
reject_unverified_recipient
permit

smtpd_data_restrictions =
permit

smtpd_end_of_data_restrictions =
permit

smtpd_etrn_restrictions =
permit

На этом файл сохраняем.

Файл для проверки синонимов почтовых ящиков, postfix — пользователь, а mypassword — пароль к базе данных, который указывали при конфигурировании Postfix Admin в первой части. Сам файл находится тут — /usr/local/etc/postfix/mysql_virtual_alias_maps.cf. ВАЖНО: параметр query может меняться в зависимости от версии сервера, в описываемом примере используется postfix-2.9.3,1!

# cat /usr/local/etc/postfix/mysql_virtual_alias_maps.cf | grep -v '^#' | sed '/^$/d' | more
user = postfix
password = mypassword
hosts = localhost
dbname = postfix
query           = SELECT goto FROM alias WHERE address='%s' AND active = '1'

Файл для проверки почтовых доменов /usr/local/etc/postfix/mysql_virtual_domains_maps.cf:

# cat /usr/local/etc/postfix/mysql_virtual_domains_maps.cf | grep -v '^#' | sed '/^$/d' | more
user = postfix
password = mypassword
hosts = localhost
dbname = postfix
query          = SELECT domain FROM domain WHERE domain='%u'

Файл для проверки почтовых ящиков /usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf:

# cat /usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf | grep -v '^#' | sed '/^$/d' | more
user = postfix
password = mypassword
hosts = localhost
dbname = postfix
query           = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'

В конец файла настройки процессов Postfix/usr/local/etc/postfix/master.cf добавляем указание работать с Dovecot через UNIX-сокет:

dovecot    unix  -       n       n       -        -       pipe
flags=DRhu user=nobody:nobody argv=/usr/local/libexec/dovecot/deliver -d ${recipient}

Проверяем конфигурацию:

# postfix check

Если ошибок нет — просто выдаст новую строку, если есть — укажет в какой строке и что именно:

# postfix check
postfix: fatal: /usr/local/etc/postfix/main.cf, line 30: missing '=' after attribute name: "sdcsdc"

Ещё вариант ошибки — такой:

# postfix check
postfix: fatal: /usr/local/etc/postfix/main.cf, line 702: missing '=' after attribute name: "permit"

В данном случае — не установлен отступ от начала строки в блоке:

smtpd_etrn_restrictions =
permit

Вариантов записи два. Первый — каждый параметр с новой строки, с отступом от начала:

smtpd_etrn_restrictions =
  permit

Другой вариант — через запятую:

smtpd_etrn_restrictions = permit,<другие параметры через запятую>,

Запятая после последнего параметра в списке — обязательна.

Добавляем Postfix в запуск при загрузке системы в файл /etc/rc.conf:

postfix_enable="YES"

Запустим Postfix:

# service postfix start
postfix/postfix-script: starting the Postfix mail system

И проверим его состояние:

# service postfix status
postfix is running as pid 78100.

Переходим к третьей части — настройка Dovecot.