20.9. Настройка smtp-auth для аутентификации пользователей

Проблема

Вы хотите организовать аутентификацию пользователей (особенно удалённых) на сервере Postfix, чтобы сервер не использовался для несанкционированных пересылок.

Решение

Потребуются следующие компоненты:

Если поддержка 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.