Настройка и реализация защиты для агента отправки сообщений MTA в Debian 9 Stretch.
Who is Who:
Почтовая система состоит из трёх частей: [link]
- MUA ( Mail User Agent ) Пользовательский почтовый агент - это программа, с которой работает пользователь для написания и чтения писем.
- MTA ( Mail Transfer Agent ) Агент пересылки почты - отвечает за пересылку сообщений между компьютерами.
- MDA ( Mail Delivery Agent ) Агент доставки почты - отвечает за доставку входящей почты в почтовый ящик пользователя.
Установка и настройка:
Устанавливаем необходимые пакеты:
# apt-get update && apt-get upgrade
# apt-get install postfix
- Переконфигурировать postfix,
# dpkg-reconfigure postfix
# apt-get install opendkim opendkim-tools postfix-policyd-spf-python mailutils
- Для управления записями домена я использую DNS Manager.
1. SPF: Sender Policy Framework [link]
Это расширение для протокола отправки электронной почты через SMTP. Благодаря SPF можно проверить, не подделан ли домен отправителя. SPF позволяет владельцу домена, в TXT-записи, соответствующей имени домена, указать список серверов, имеющих право отправлять email-сообщения с обратными адресами в этом домене. Агенты передачи почты, получающие почтовые сообщения, могут запрашивать SPF-информацию с помощью простого DNS-запроса, верифицируя таким образом сервер отправителя.
Настраиваем TXT запись домена:
Полезным будет почитать про SPF Record Syntax.
- Добавляем новую запись:
Имя: unix.center.
Тип: TXT
Значение: v=spf1 mx mx:unix.center -all
Настраиваем SPF policy agent для Postfix:
Если используется "SpamAssassin", то редактируем "policyd-spf.conf" и ставим "False".
# nano /etc/postfix-policyd-spf-python/policyd-spf.conf
HELO_reject = False
Mail_From_reject = False
Domain_Whitelist = unix.center, mail.unix.center
Postfix master.cf:
Добавляем в самый конец.
# nano /etc/postfix/master.cf
policyd-spf unix - n n - 0 spawn
user=policyd-spf argv=/usr/bin/policyd-spf
- И отключим chroot для службы cleanup;
# service type private unpriv chroot wakeup maxproc command + args
cleanup unix n - n - 0 cleanup
Postfix main.cf:
Добавляем новые настройки.
# nano /etc/postfix/main.cf
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtp_use_tls = yes
tls_high_cipherlist = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-EC$
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# SPF
policyd-spf_time_limit = 3600
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_service unix:private/policy-spf
2. DKIM: DomainKeys Identified Mail [link]
Эта технология объединяет несколько существующих методов антифишинга и антиспама с целью повышения качества классификации и идентификации легитимной электронной почты. Вместо традиционного IP-адреса, для определения отправителя сообщения DKIM добавляет в него цифровую подпись, связанную с именем домена организации. Подпись автоматически проверяется на стороне получателя, после чего, для определения репутации отправителя, применяются "белые списки" и "чёрные списки".
Настраиваем TXT записи домена:
- Добавляем новую запись:
DKIM:
Имя: mail._domainkey.unix.center.
Тип: TXT
- p=/etc/opendkim/keys/mail.txt
Значение: v=DKIM1; k=rsa; s=email; p=берем из /etc/opendkim/keys/mail.txt
2.1 ADSP:
Так же у домена можно прописать ADSP запись - это позволит принимающему серверу понять, должно ли ваше письмо быть подписано или нет.
- Добавляем новую запись:
ADSP:
Имя: _adsp._domainkey.unix.center.
Тип: TXT
Значение: dkim=all
Значений dkim= может быть три:
all - Все письма должны быть подписаны
discardable - Не подписанные письма не должны приниматься
unknown - Аналогично отсутствию записи
Проверяем статус OpenDKIM: нас интересует работа через opendkim.sock и opendkim.pid
# systemctl status -l opendkim
Останавливаем сервисы:
# systemctl stop opendkim && systemctl stop postfix
Добавляем пользователя postfix в группу opendkim:
# adduser postfix opendkim
Создаем директорию для ключей:
# mkdir -p /etc/opendkim/keys
Генерируем ключи:
# opendkim-genkey -D /etc/opendkim/keys/ -b 2048 -h rsa-sha256 -r -s mail -d unix.center -v
- mail.private
- mail.txt
Устанавливаем пользователя и группу и права на каталог:
# chown -R opendkim:opendkim /etc/opendkim
# chmod 0755 /etc/opendkim/keys
Проверяем ключи:
# opendkim-testkey -d unix.center -s mail,
- если все ок, то будет пустой вывод
Более детальная проверка:
# cd /etc/opendkim/keys/
# opendkim-testkey -d unix.center -s mail -k mail.private -vvv
- opendkim-testkey: using default configfile /etc/opendkim.conf
- opendkim-testkey: key loaded from mail.private
- opendkim-testkey: checking key 'mail._domainkey.unix.center'
- opendkim-testkey: key not secure
- opendkim-testkey: key OK
Или так, вывод v=DKIM1; k=rsa; s=email; p=;
# host -t TXT mail._domainkey.unix.center
Создаем и настравиваем: [signing.table], [key.table], [trusted.hosts]
- Указываем какие домены каким ключем будем подписывать:
# nano /etc/opendkim/signing.table
*@unix.center mail._domainkey.unix.center
- Вносим информацию о приватном ключе:
# nano /etc/opendkim/key.table
mail._domainkey.unix.center unix.center:mail:/etc/opendkim/keys/mail.private
- Сообщения отправленные с этих хостов, доменов и IP адресов буду приняты как доверенные и подписаны.
# nano /etc/opendkim/trusted.hosts
127.0.0.1
::1
localhost
unix
mail.unix.center
unix.center
Настраиваем Postfix для работы с OpenDKIM:
# nano /etc/postfix/main.cf
- В самый низ добавляем,
# DKIM
milter_default_action = accept
milter_protocol = 6
#smtpd_milters = unix:/var/run/opendkim/opendkim.sock
non_smtpd_milters = unix:/var/run/opendkim/opendkim.sock
Работа opendkim ч/з sock:
# nano /etc/default/opendkim
RUNDIR=/var/run/opendkim
SOCKET=local:$RUNDIR/opendkim.sock
Настраиваем OpenDKIM: приводим настройки к следующим значениям
# nano /etc/opendkim.conf
- Нас интересуют,
Syslog yes
UMask 002
Mode sv
OversignHeaders From
UserID opendkim
KeyTable /etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table
ExternalIgnoreList refile:/etc/opendkim/trusted.hosts
InternalHosts refile:/etc/opendkim/trusted.hosts
Background yes
AutoRestart yes
AutoRestartRate 10/1M
DNSTimeout 5
SignatureAlgorithm rsa-sha256
Стартуем наши сервисы:
# systemctl start opendkim
- проверяем,
# systemctl status -l opendkim
# systemctl start postfix
- проверяем,
# systemctl status postfix.service
3. DMARC: [link]
Задает политику, как проверять приходящую почту в домене и что делать если письма не проходят аутентификацию SPF или DKIM.
Настраиваем TXT запись домена: базовый вариант
- Добавляем новую запись:
Имя: _dmarc.unix.center.
Тип: TXT
Значение: v=DMARC1; p=none
p - policy - политика, может быть:
none - не принимать никаких особых действий, всё на усмотрение почтовика;
quarantine - отпарвить в спам;
reject - не принимать письмо.
Сервисы SPF & DKIM check:
Важно! - первый сервис дает возможность проверять письма x3 в день..
| mail-tester | SMTP.BZ | dkimvalidator | Postfix и OpenDKIM |