Postfix настройка TLS шифрования

Продолжаем настройку нашего почтового сервера Postfix на Arch Linux. В этой статье я опишу процесс настройки TLS шифрования для Postfix. Сертификаты будем использовать от Let’s Encrypt. Для этого установим необходимые пакеты:

pacman -Syu certbot certbot-nginx nginx

Создадим каталог для конфигов Nginx:

mkdir -p /etc/nginx/conf.d

Далее необходимо добавить загрузку конфигов из каталога conf.d

nano /etc/nginx/nginx.conf

Внутри блока http { ... } в конце файла добавь строку:

include conf.d/*.conf;

Базовые настройки сайта для генерирования сертификатов от Let’s Encrypt. Не забываем менять домен на свой.

cat > /etc/nginx/conf.d/mx.codebeer.ru.conf <<'EOF'
server {
      listen 80;
      listen [::]:80;
      server_name mx.codebeer.ru;

      root /var/lib/letsencrypt;

      location ~ /.well-known/acme-challenge {
         allow all;
      }
}
EOF

Применяем настройки:

systemctl enable nginx
systemctl restart nginx

Авто-рестарт Nginx при падении:

mkdir -p /etc/systemd/system/nginx.service.d

cat > /etc/systemd/system/nginx.service.d/restart.conf <<'EOF'
[Unit]
StartLimitIntervalSec=300
StartLimitBurst=5

[Service]
Restart=on-failure
RestartSec=5s
EOF

Применяем настройки:

systemctl daemon-reload
systemctl restart nginx
systemctl --no-pager -l status nginx

Может высветится вот такое предупреждение:

Feb 07 00:10:05 mx.codebeer.ru systemd[1]: Starting nginx web server...
Feb 07 00:10:05 mx.codebeer.ru nginx[16960]: 2026/02/07 00:10:05 [warn] 16960#16960: could not build optimal types_hash, you should increase either types_hash_max_size: 1024 or types_hash_bucket_size: 64; ignoring types_hash_bucket_size
Feb 07 00:10:05 mx.codebeer.ru systemd[1]: Started nginx web server.

Предупреждение types_hash не критично, но лучше поправить:

nano /etc/nginx/nginx.conf

Внутри блока http { ... } добавить:

types_hash_max_size 2048;
types_hash_bucket_size 128;

Убьём процесс nginx, systemd должен поднять снова:

pkill -9 nginx
sleep 2
systemctl status nginx --no-pager

Nginx настроен. Теперь можно переходить непосредственно к выпуску сертификат:

certbot --nginx -d mx.codebeer.ru

В процессе вас попросят указать ваш email, принят правила сервиса и вы можете разрешить принимать информационную рассылку на ваш email или отказаться.

Сертификат и ключ будет записан по указанному пути:

/etc/letsencrypt/live/mx.codebeer.ru/fullchain.pem
/etc/letsencrypt/live/mx.codebeer.ru/privkey.pem

Дале включаем автоматический перевыпуск сертификата:

systemctl enable --now certbot-renew.timer
systemctl status certbot-renew.timer --no-pager
systemctl list-timers | grep certbot

После этого systemd будет запускать обновление сертификата по расписанию.

Включаем шифрование в Postfix

Нужно внести изменения в master.cf

nano /etc/postfix/master.cf

Добавить в файл:

submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

Прописываем TLS сертификат для Postfix:

postconf -e "smtpd_tls_cert_file = /etc/letsencrypt/live/mx.codebeer.ru/fullchain.pem"
postconf -e "smtpd_tls_key_file = /etc/letsencrypt/live/mx.codebeer.ru/privkey.pem"

Чтобы отключить небезопасные версии SSL/TLS, добавьте в конец файла /etc/postfix/main.cf:

smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1

Далее отключим авторизацию на порте 25. Это нужно что бы подключаться к серверу можно было только через порты с шифрованием.

smtpd_tls_auth_only = yes

Применяем настройки:

postfix reload
systemctl restart postfix

Следующий этап настройки Postfix настройка OpenDKIM