воскресенье, 7 апреля 2013 г.

Настройка Postfix с SMTP-AUTH и TLS

Эта заметка является продолжением статьи Идеальный сервер — Ubuntu Server Precise Pangolin 12.04 i386 [ISPConfig 3]. Посвящена базовой настройке Postfix с модулем проверки подлинности SMTP AUTH и протоколом защиты данных TLS.

Postfix - агент передачи почты.

SMTP AUTH - продолжение протокола передачи почты посредством которого, клиент SMTP может войти, используя механизм аутентификации выбран. Модуль проверки подлинности является обязательным для представления серверов.

TLS —криптографический протокол, обеспечивающий защищённую передачу данных между узлами в сети Интернет.



Установка:
# aptitude install postfix libsasl2-2 sasl2-bin libsasl2-modules procmail 





Далее нужно отредактировать основной конфигурационный файл postfix.
(вообще я рекомендую писать это непосредственно в файле /etc/postfix/main.cf, так как с помощью текстового редактора vim, можно подсвечивать синтаксис, это гораздо удобнее, нежели писать в командном интерпретаторе).

Пример записи непосредственно в файл:
smtpd_sasl_local_domain =

Иначе, пишем так:
# postconf -e 'smtpd_sasl_local_domain ='
# postconf -e 'smtpd_sasl_auth_enable = yes'
# postconf -e 'smtpd_sasl_security_options = noanonymous'
# postconf -e 'broken_sasl_auth_clients = yes'
# postconf -e 'smtpd_sasl_authenticated_header = yes'
# postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
# postconf -e 'inet_interfaces = all'
# echo 'pwcheck_method: saslauthd' >> /etc/postfix/sasl/smtpd.conf
# echo 'mech_list: plain login' >> /etc/postfix/sasl/smtpd.conf


Далее создаем сертификаты для TLS:
# mkdir /etc/postfix/ssl
# cd /etc/postfix/ssl/
# openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
# chmod 600 smtpd.key
# openssl req -new -key smtpd.key -out smtpd.csr
# openssl -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
# openssl rsa -in smtpd.key -out smtpd.key.unencrypted
# mv -f smtpd.key.unencrypted smtpd.key
# openssl -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650


Далее конфигурируем Postfix для TLS:
# postconf -e 'myhostname = server.example.com'

# postconf -e 'smtpd_tls_auth_only = no'
# postconf -e 'smtp_use_tls = yes'
# postconf -e 'smtpd_use_tls = yes'
# postconf -e 'smtp_tls_note_starttls_offer = yes'
# postconf -e 'smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key'
# postconf -e 'smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt'
# postconf -e 'smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem'
# postconf -e 'smtpd_tls_loglevel = 1'
# postconf -e 'smtpd_tls_received_header = yes'
# postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
# postconf -e 'tls_random_source = dev:/dev/urandom'


Проверьте, что что вы записали в файле /etc/postfix/main.cf. Исправьте ошибки.

Файл должен выглядеть так: 
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = server.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = server.example.com, localhost.example.com, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_tls_auth_only = no
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom


Проверка подлинности будет осуществляться через saslauthd. 
Теперь нужно кое-что подкорректировать, чтобы оно работало как следует:
# mkdir -p /var/spool/postfix/var/run/saslauthd

Далее редактируем файл /etc/default/saslauthd:
меняем значений START с no на yes и OPTIONS на -c -m /var/run/saslauthd на -c -m /var/spool/postfix/var/run/saslauthd -r 

Создадим пользователя с именем postfix и группой sasl:
# adduser postfix sasl

Перезапускаем Postfix и запускаем saslauthd:
# /etc/init.d/postfix restart
# /etc/init.d/saslauthd start


Для проверки правильности настройки, воспользуемся утилитой telnet:
# telnet localhost 25
Введем туда:
ehlo localhost

Если видим эти строчки:
250-STARTTLS
и
250-AUTH PLAIN LOGIN
то все настроено правильно.

Вводим quit, для выхода в shell.

Комментариев нет: