Postfix. Установка и настройка
Postfix - это агент передачи почты, MTA (Mail Transfer Agent). Он отвечает только за приём почты и раскладке его по нужным каталогам, отдаёт почту уже другой агент.
- Устанавливаем необходимые пакеты, также будет весьма полезно установить документацию (Debian):
# apt-get install postfix postfix-mysql postfix-doc
- Почту будем раскладывать по каталогам и забирать от туда пользователем postfix. Можно для этих целей добавить отдельного пользователя, например vmail и от его имение работать с каталогами и файлами почтовых ящиков. Узнаем какой у postfix номер пользователя (uid) и группы (gid) в ситсеме:
# id postfix uid=107(postfix) gid=108(postfix) groups=108(postfix)
- Вносим изменения в /etc/postfix/main.cf:
myhostname = teo.mynetwork.ru alias_maps = hash:/etc/postfix/aliases mydomain = teo.mynetwork.ru mynetworks = 10.0.0.0/24 10.0.10.0/24 10.0.20.0/24
В список mynetworks также можно добавить адреса доменов, которые воспринимаются как спамеры, но письма с них получать нужно. Делать это стоит только если не удалось настроить приложение отвечающее за борьбу со спамом. Переменную relayhost можно закоментировать или вообще убрать, так как мы будем использовать транспортную таблицу, которая перекрывает её.
- Добавляем в конец файла следующие строки конфигурации:
# устанавливаем ограничение на ящик в 100Мб и на письмо в 10Мб mailbox_size_limit = 102400000 message_size_limit = 10240000 # Создаём виртуальный домен, учитывая что uid=107(postfix) gid=108(postfix) vivirtual_mailbox_base = /var/spool/postfix/vmail virtual_mailbox_domains = mysql:/etc/postfix/virt_domain.cf virtual_alias_maps = mysql:/etc/postfix/virt_alias.cf virtual_mailbox_maps = mysql:/etc/postfix/virt_mailbox.cf transport_maps = mysql:/etc/postfix/transport.cf virtual_minimum_uid = 100 virtual_uid_maps = static:107 virtual_gid_maps = static:108 # Добавим небольшой фильтр от спама header_checks = regexp:/etc/postfix/header_checks # Различные ограничения, призванные помочь в борьбе со спамом smtpd_etrn_restrictions = permit_mynetworks, reject smtpd_helo_required = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
- Создаём каталог, где будет храниться почта и изменяем владельца и права доступа:
# mkdir /var/spool/postfix/vmail # chown postfix.postfix /var/spool/postfix/vmail # chmod 700 /var/spool/postfix/vmail
- Создаём файл /etc/postfix/header_checks, в котором пропишем правило отсева сообщений в теме которых содержаться слова sex, viagra, seduce, naked:
/^Subject.*(sex|viagra|seduce|naked)/ FILTER REJECT:
- Создадим файлы доступа к MySQL. Пользователь postfixadmin в MySQL будет создан позже, при установке Postfix Admin. Создаём файл /etc/postfix/virt_alias.cf:
user = postfixadmin password = postfixadmin hosts = 127.0.0.1 dbname = postfix table = alias select_field = goto where_field = address
- Создаём файл /etc/postfix/virt_domain.cf:
user = postfixadmin password = postfixadmin hosts = 127.0.0.1 dbname = postfix table = domain select_field = description where_field = domain
- Создаём файл /etc/postfix/virt_mailbox.cf:
user = postfixadmin password = postfixadmin hosts = 127.0.0.1 dbname = postfix table = mailbox select_field = maildir where_field = username
- Создаём файл /etc/postfix/transport.cf:
user = postfixadmin password = postfixadmin hosts = 127.0.0.1 dbname = postfix table = transport select_field = destination where_field = domain
указывая в hosts IP адрес, мы принуждаем Postfix соединяться с MySQL через порт, если же указать localhost, то он будет стараться соединиться через сокет.
Подробней о настройке и отладке можно почитать в статье посвящённой отдельно Postfix.
Проверяем работу Postfix
Теперь в консоли с помощью telnet проверяем как работает доставка почты, т.е. smtp (учитывая требования MeTA1[1]):
# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 teo.mynetwork.ru ESMTP Postfix helo teo.mynetwork.ru 250 teo.mynetwork.ru mail from:<pm@teo.mynetwork.ru> 250 Ok rcpt to:<p@teo.mynetwork.ru> 250 Ok data 354 End data with <CR><LF>.<CR><LF> this is the test . 250 Ok: queued as A7CAC36B52 quit 221 Bye Connection closed by foreign host.
- Идём в наш почтовый каталог /var/spool/postfix/vmail/ там, если не был, появился каталог p@teo.mynetwork.ru, а в нём (в каталоге new) сообщение.
Настраиваем шифрование. TLS
Если отказались от TLS, то пропускаем этот шаг.
- Конфигурируем Postfix. Добавляем настройки tls в конец файла /etc/postfix/main.cf:
# TLS tls_random_source = dev:/dev/urandom smtp_use_tls = yes smtp_tls_note_starttls_offer = yes smtp_tls_loglevel = 1 smtp_tls_key_file = /etc/apache2/ssl/server.key smtp_tls_cert_file = /etc/apache2/ssl/server.crt smtp_tls_CAfile = /etc/apache2/ssl/ca.crt smtpd_use_tls = yes smtpd_tls_auth_only = no smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s smtpd_tls_loglevel = 1 smtpd_tls_key_file = /etc/apache2/ssl/server.key smtpd_tls_cert_file = /etc/apache2/ssl/server.crt smtpd_tls_CAfile = /etc/apache2/ssl/ca.crt
Проверяем по telnet:
# postfix reload # telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 teo.mynetwork.ru ESMTP Postfix ehlo teo.mynetwork.ru 250-teo.mynetwork.ru 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-STARTTLS 250 8BITMIME starttls 220 Ready to start TLS close Connection closed by foreign host.
- В случае сбоев смотреть лог-файлы /var/log/mail.err, mail.warn, mail.log
Сноски
- ↑ Цитата с сайта журнала Системный Администратор:
Нужно заметить, что MeTA1 более строго относится к стандартам. Например, во время SMTP-сеанса такой вольности, как
- mail from: user@server.ru
- 501 5.1.7 Bad sender’s mailbox address syntax
- mail from: user@server.ru
См. также
- Общие вопросы по настройке Postfix
- ClamAV - бесплатный антивирус
- telnet - хорошее средство для отладки сетевых сервисов
- Другие статьи в категории Postfix