Postfix. Установка и настройка

Материал из СисадминВики (SysadminWiki.ru)
Перейти к: навигация, поиск

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


Сноски


  1. Цитата с сайта журнала Системный Администратор:
    Нужно заметить, что MeTA1 более строго относится к стандартам. Например, во время SMTP-сеанса такой вольности, как
    mail from: user@server.ru
    он не допустит, ругнувшись про
    501 5.1.7 Bad sender’s mailbox address syntax
    Адрес должен непременно быть в виде <user@server.ru>, причём пробел между двоеточием и открывающей угловой скобкой не допускается.


См. также

  • Общие вопросы по настройке Postfix
  • ClamAV - бесплатный антивирус
  • telnet - хорошее средство для отладки сетевых сервисов
  • Другие статьи в категории Postfix