воскресенье, 13 июля 2008 г.

Postfix + TLS

Здесь я буду постить результаты своих попыток прикручивания TLS к Постфиксу.

Для начала нам нужен сертификат нашего центра сертификации:

#cd /usr/share/ssl/misc
#./CA.pl -newca

В процессе создания говорим, что common name - имя нашего хоста.

Получаем каталог /usr/share/ssl/demoCA, в кот. есть файлик cacert.pem, ставим этот сертификат конкверором.

Делаем сертификат Постфикса:
из каталога /usr/share/ssl

#openssl req -new -nodes -keyout postfix_private_key.pem -out postfix_private_key.pem -days 730
#openssl ca -policy policy_anything -out postfix_public_cert.pem -infiles postfix_private_key.pem
если в процессе выполнения второй команды получаем ошибки открытия файлов - значит есть проблема с путями (т.к. путь к закрытому ключу сервера относительный, то имеет значение, откуда даётся команда).

Дальше делаем каталог /etc/postfix/certs, куда копируем /usr/share/ssl/demoCA/cacert.pem и созданные для постфикса закрытый ключ postfix_private_key.pem и сертификат postfix_public_cert.pem. Устанавливаем на ключ права 600.

Пишем в /etc/postfix/main.cf :

smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom

smtpd_tls_key_file = /etc/postfix/certs/postfix_private_key.pem
smtpd_tls_cert_file = /etc/postfix/certs/postfix_public_cert.pem
smtpd_tls_CAfile = /etc/postfix/certs/cacert.pem

smtpd_tls_loglevel = 2
smtpd_tlsreceived_header = yes
Таким образом мы включили TLS, сказали, где генератор случайных чисел, сертификаты, а таже установили детальные логи для tls и добавление заголовков.

Внимание - грабли!

В /etc/postfix/master.cf раскомментируйте строку
tlsmgr unix - - n 1000? 1 tlsmgr
Иначе получите ошибки, вроде:
Jul 15 15:26:19 deck postfix/smtpd[3098]: initializing the server-side TLS engine
Jul 15 15:26:19 deck postfix/smtpd[3098]: warning: connect to private/tlsmgr: Connection refused
Jul 15 15:26:19 deck postfix/smtpd[3098]: warning: problem talking to server private/tlsmgr: Connection refused
Jul 15 15:26:20 deck postfix/smtpd[3098]: warning: connect to private/tlsmgr: Connection refused
Jul 15 15:26:20 deck postfix/smtpd[3098]: warning: problem talking to server private/tlsmgr: Connection refused
Jul 15 15:26:20 deck postfix/smtpd[3098]: warning: no entropy for TLS key generation: disabling TLS support
Убеждаемся, что всё работает:

#openssl s_client -starttls smtp -connect localhost:25
Если мы видим данные о сертификате и ожидание дальнейшего ввода - значит всё правильно.

А так, как ранее мы прикрутили к нашему серваку plaintext аутентификацию, то имеет смысл засунуть её под шифрование, /etc/postfix/main.cf:
smtpd_tls_auth_only = yes
Коннектимся телнетом и убеждаемся, что нам не предлагают аутентификацию, а только STARTTLS, опять коннектимся, используя openssl, потом приветствуем сервер и убеждаемся, что теперь аутентификация возможна.

для оптимизации шифрования добавляем в конфиг:

smtpd_tls_session_cache_database = sdbm:/etc/postfix/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s

Продолжение следует...

2 комментария:

Alexandr комментирует...

Даешь handmake ман Postfix+MySQL+SASL+SpamAssassin+ClamAV+Squirrelmail
под FreeBSD!!!

=)

AccessD комментирует...

Будет ))
Только с TLS разберусь..