💾 Archived View for sysrq.in › ru › gemlog › opensmtpd.gmi captured on 2021-12-05 at 23:47:19. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2021-12-04)
-=-=-=-=-=-=-
Итак, начала я с вот этой замечательной статьи... Там уже всё хорошо расписано, поэтому здесь повторяться не буду.
Setting up an email server in 2020 with OpenSMTPD and Dovecot
Достаточно тривиальный шаг: всё гуглится или и так понятно.
example.com. 300 IN MX 10 example.com. example.com. 300 IN TXT "v=spf1 +mx -all" example.com._domainkey.example.com. 300 IN TXT "p=длинныйоткрытыйключ" _dmarc.example.com. 300 IN TXT "v=DMARC1; p=reject; aspf=s; adkim=s; fo=1; ruf=mailto:dmarc@example.com" _mta-sts.example.com. 300 IN TXT "v=STSv1; id=0"
Написала в техподдержку Ростелекома что-то вроде этого:
Я пользуюсь услугой статического IP-адреса, и на него зарегистрирован домен example.com. Для корректного функционирования почтового сервера нужен правильно настроенный обратный DNS - пожалуйста, внесите изменения, чтобы в итоге запрос ptr на "XXX.XXX.XXX.XXX.in-addr.arpa" указывал на "example.com"
Оттуда позвонили, и через несколько дней всё сделали.
Итак, чего мне надо от почты:
table aliases db:/etc/mail/aliases.db pki "example.com" cert "/etc/letsencrypt/live/example.com/fullchain.pem" pki "example.com" key "/etc/letsencrypt/live/example.com/privkey.pem" srs key "<secret1>" srs key backup "<secret2>" # Отправляю в junk, ну вдруг кому-то rDNS провайдер не даёт? filter "rdns" phase connect match !rdns junk filter "fcrdns" phase connect match !fcrdns junk # disconnect "550 DNS error" filter "rspamd" proc-exec "filter-rspamd" action "local_mail" maildir junk user cyber alias <aliases> action "outbound" relay srs # Сортировка action "local_mail.service" maildir "/home/cyber/Maildir/.Service" alias <aliases> action "local_mail.bs" maildir "/home/cyber/Maildir/.BS" alias <aliases> action "local_mail.gemini" maildir "%{user.directory}/Maildir/.Gemini" match from any for rcpt-to regex "^((post|web|host)master|operator|abuse|www)@example.com$" action "local_mail.service" match from any for rcpt-to "bs@example.com" action "local_mail.bs" match from any for rcpt-to regex "\+gemini@example.com$" action "local_mail.gemini" # Lolcahost listen on lo match from local for local action "local_mail" # Входящие listen on eth0 port 25 tls pki "example.com" filter { "rdns", "fcrdns", "rspamd" } match from any for domain "example.com" action "local_mail" # Исходящие listen on lo port 465 smtps pki "example.com" auth filter "rspamd" listen on eth0 port 465 smtps pki "example.com" auth filter "rspamd" match from any auth for any action "outbound"
Как можно заметить, конфигурация у OpenSMTPD очень простая. Pona!
Очень непонятная софтина, которая работает с помощью какой-то чёрной магии, и конфиги которой очень не хочется трогать...
Хоть я и делала всё по гайду из первой статьи, в исходящих письмах отсутствовал заголовок DMARC ☹
Решение кривое, но тем не менее работает. Пришлось добавить вот это в local.d/dkim_signing.conf:
sign_inbound = true; allow_hdrfrom_mismatch = true; allow_username_mismatch = true;
А вот это в local.d/settings.conf:
outbound { priority = high; from = "@example.com"; apply { actions { add_header = 1000; } } }
Учтите, что rspamd не подписывает письма, отправленные с помощью sendmail!
Поэтому не забудьте про директиву:
listen on lo port 465 smtps pki "example.com" auth filter "rspamd"
А ещё запишите в /etc/hosts:
127.0.0.1 example.com
И напоследок в .muttrc:
set smtp_url = "smtps://user@example.com:465"
set smtp_pass = "password"
set ssl_starttls = yes
set ssl_force_tls = yes
Если вы хотите отправлять письма с помощью git send-email, придётся выполнить ещё вот это:
git config --global sendemail.smtpserver example.com
git config --global sendemail.smtpserverport 465
git config --global sendemail.smtpencryption ssl
git config --global sendemail.smtpuser user
git config --global sendemail.smtpPass password
Чтобы вся почта ходила по TLS, надо добавить в конфиг nginx для домена mta-sts.example.com вот такую локацию:
location /.well-known/mta-sts.txt { echo "version: STSv1\r"; echo "mode: enforce\r"; echo "mx: example.com\r"; echo "max_age: 864000\r"; }
Можно значительно упростить получение вашего PGP-ключа. Об этом хорошо написано вот в этой статье:
Setting up OpenPGP Web Key Directory (WKD)
Про то, как наказывать за всякое непотребство, которое вы видите в логах, читайте в следующей статье цикла:
Fail2ban: хорни-темница для ботов и сканеров
Или можно посмотреть все посты: