Postfix + Dovecot + MySQL + Postfix Admin, часть 2 – установка и настройка Postfix

Приступаем к установке 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.

Часть 1 (PostfixAdmin)
Часть 3 (Dovecot)
Apache24, MySQL56, PhP5

image_pdfimage_print

Leave a Reply

Your email address will not be published. Required fields are marked *