20.9. Настройка smtp-auth для аутентификации пользователей
Проблема
Вы хотите организовать аутентификацию пользователей (особенно удалённых) на сервере Postfix, чтобы сервер не использовался для несанкционированных пересылок.
Решение
Потребуются следующие компоненты:
- Cyrus-SASL2;
- OpenSSL;
- Программа Postfix, откомпилированная с поддержкой Cyrus-SASL;
- Ключи и сертификат сервера.
Если поддержка Cyrus-SASL не установлена, обратитесь к разделу 20.7. Когда поддержка SASL будет установлена и успешно заработает, переходите к созданию сертификата сервера SSL. Найдите каталог /usr/lib/ssl/misc
и войдите в него:
# cd /usr/lib/ssl/misc
# ls
CA.pl c_info c_name der_chop CA.sh c_hash c_issuer demoCA
Ключи генерируются скриптом CA.pl
(в каталоге может также присутствовать скрипт CA.sh
— «обёртка» для CA.pl
, немного расширяющая его функциональность). Выберите один из скриптов и создайте его резервную копию:
# cp CA.sh CA.sh-old
Отредактируйте скрипт, добавив ключ -nodes
в строках, где встречается $REQ
:
# Создание сертификата
$REQ -new -nodes -x509 -keyout newreq.pem -out newreq.pem $DAYS
# Создание запроса сертификата
$REQ -new -nodes -keyout newreq.pem -out newreq.pem $DAYS
RET=$?
else
echo "Making CA certificate..."
$REQ -new -nodes -x509 -keyout ${CATOP}/private/$CAKEY \
-out ${CATOP}/$CACERT $DAYS
Отказ от использования пароля позволяет избежать ввода при каждом перезапуске сервера, что особенно полезно при автоматических перезагрузках. Если хотите, можете установить пароль для большей безопасности.
Создайте новый сертификат:
# ./CA.sh -newca
# ./CA.sh -newreq
# ./CA.sh -sign
В результате будут созданы файлы newreq.pem
, newcert.pem
и demoCA/cacert.pem
. Скопируйте их в каталог /etc/postfix
:
# cp newcert.pem /etc/postfix/
# cp newreq.pem /etc/postfix/
# cp demoCA/cacert.pem /etc/postfix/
Добавьте следующий фрагмент в /etc/postfix/main.cf
:
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/newreq.pem
smtpd_tls_cert_file = /etc/postfix/newcert.pem
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
Активируйте изменения:
# postfix reload
Теперь протестируйте сервер:
$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 windbag.test.net ESMTP Postfix (Libranet/GNU)
EHLO windbag.test.net
250-windbag.test.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-XVERP
250-8BITMIME
Команда STARTTLS
активирует защищённое соединение. После этого ваш сервер готов к работе с почтовыми клиентами. Настройте почтовые клиенты пользователей для сохранения имени и пароля, чтобы при отправке почты аутентификация выполнялась автоматически.
Комментарий
Настройки Postfix почти не зависят от дистрибутива Linux, но рекомендуется тщательно проверить все пути в файле /etc/postfix/main.cf
, так как структура каталогов может немного отличаться.
См. также
Описание параметров main.cf находится в /usr/share/doc/postfix/examples/
; описание параметров аутентификации — в /usr/share/doc/postfix/examples/sample-auth.cf.gz
.