diff --git a/module2/04_postfix_dovecot/tasks.md b/module2/04_postfix_dovecot/tasks.md index b7e26f2..699c586 100644 --- a/module2/04_postfix_dovecot/tasks.md +++ b/module2/04_postfix_dovecot/tasks.md @@ -28,14 +28,15 @@ Преимущество протокола IMAP перед POP, которые используются агентами доступа для получения почты от сервера, заключается в возможности доставки сообщений по одному и улучшенной обработке больших файлов, прикреплённых к письму. -В заданиях используйте домен studX.start.myoffice.ru (193.32.63.170+X), порты 25, 587, 993. +В заданиях используйте домен studX.myoffice.ru (193.32.63.170+X), порты 25, 587, 993. -``` +``` ________ | | | клиент | (Thunderbird на ноутбуке, |________| подключается по IMAPS протоколу на порт 993) | + | DNS A stud15.myoffice.ru -> 193.32.63.185 роутер public IP 193.32.63.185:[25,587,993] -> private IP 10.160.179.25:[25,587,993] | | ens18 в vlan499 с доступом в интернет с IP 10.160.179.25/24 @@ -48,12 +49,30 @@ # 1. Установите и настройте MTA (Message Transfer Agent) агент Postfix. Страница документации основного конфигурационного файла `man postconf.5`. Онлайн документация доступна по ссылке http://postfix.cs.utah.edu/postfix-manuals.html. +Используйте параметры в конфигурации `/etc/postfix/main.cf` для будущей интеграции с dovecot: +``` +home_mailbox = mail/ +smtpd_sasl_type = dovecot +smtpd_sasl_path = private/auth +smtpd_sasl_auth_enable = yes +smtpd_sasl_security_options = noanonymous +smtpd_sasl_local_domain = $myhostname +smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject +``` + +и раскомментируйте строки в конфигурации `/etc/postfix/master.cf`: +``` +submission inet n - y - - smtpd + -o syslog_name=postfix/submission + -o smtpd_tls_security_level=encrypt + -o smtpd_sasl_auth_enable=yes + -o smtpd_relay_restrictions=permit_sasl_authenticated,reject +``` + Проверьте работоспособность, отправив письмо командой `mail` или `sendmail` на свой личный почтовый адрес. После составления письма завершите ввод символом конца файла Ctrl+D или вводом точки. ``` -$ mail -s "This is a test mail from postfix stud15" -$ sendmail stud15.start.myoffice.ru -To: -From: stud15.start.myoffice.ru +$ mail -s "This is a test mail from postfix stud15" +$ sendmail Subject: This is a test mail from postfix stud15 Hello, will this mail be delivered? Best regards, @@ -61,12 +80,175 @@ Postfix MTA ``` # 2. -Заведите почтовые ящики noreply@studX.start.myoffice.ru и logs@studX.start.myoffice.ru. Протестируйте отправку почты с ящика noreply. Протестируйте приём программно-сгенерированной почты на ящик logs, например от демона cron. +Заведите почтовые ящики `noreply@studX.myoffice.ru` и `logs@studX.myoffice.ru`. Протестируйте отправку почты с ящика `noreply`. Протестируйте приём программно-сгенерированной почты на ящик `logs`, например от демона `cron`. # 3. Установите и настройте DA (Delivery Agent) агент Dovecot. -Проверьте работоспособность из клиента Thunderbird или аналога. Укажите в качестве IMAP сервера studX.start.myoffice.ru порт 993, шифрование TLS. +Используйте следующую конфигурацию: +``` +disable_plaintext_auth = yes +mail_privileged_group = mail +mail_location = maildir:~/mail +#set mailbox location to Maildir style + +userdb { + driver = passwd +} + +passdb { + args = %s + driver = pam +} + +protocols = "imap" + +namespace inbox { + inbox = yes + + mailbox Trash { + auto = subscribe + special_use = \Trash + } + mailbox Sent { + auto = subscribe + special_use = \Sent + } + mailbox Drafts { + auto = subscribe + special_use = \Drafts + } + mailbox Spam { + auto = subscribe + special_use = \Junk + } + mailbox Archive { + auto = subscribe + special_use = \Archive + } +} +#create and autosubscribe to some default folders + +service auth { + unix_listener /var/spool/postfix/private/auth { + mode = 0660 + user = postfix + group = postfix + } +} + +``` + + +Проверьте работоспособность из клиента Thunderbird или аналога. Подключите в клиенте почтовые ящики, созданные ранее. Укажите в качестве IMAP сервера studX.myoffice.ru порт 993, шифрование TLS. Подтвердите, что вы доверяете самоподписанному сертификату. + +# 4. +Вместо самоподписанных сертификатов используйте сертификаты letsencrypt, полученные на почтовом сервере с помощью утилиты `certbot`. Следуйте инструкциям на официальном сайте (https://certbot.eff.org/instructions?ws=other&os=debianbuster) для установки пакета и получении сертификата. +``` +# sudo apt update +# sudo apt install snapd +# sudo snap install core; sudo snap refresh core +# sudo snap install --classic certbot +``` +Временно остановите веб-сервер на 80 порту, если он работает. Certbot запустит свой сервер-агент, чтобы проверить, что вы владете доменом studX.myoffice.ru https://letsencrypt.org/ru/how-it-works/. Сертификаты будут помещены в папку `/etc/letsencrypt/live/` При запросе сертификатов учитывайте лимит обращений https://letsencrypt.org/ru/docs/rate-limits/, достижение которых приведёт к блокировке на неделю. +``` +# certbot --standalone +Account registered. +Please enter the domain name(s) you would like on your certificate (comma and/or +space separated) (Enter 'c' to cancel): stud15.myoffice.ru +Requesting a certificate for stud15.myoffice.ru + +Successfully received certificate. +Certificate is saved at: /etc/letsencrypt/live/stud15.myoffice.ru/fullchain.pem +Key is saved at: /etc/letsencrypt/live/stud15.myoffice.ru/privkey.pem +This certificate expires on 2023-01-20. +These files will be updated when the certificate renews. +Certbot has set up a scheduled task to automatically renew this certificate in the background. +``` +Проверьте, что расписание обновления сертификата включено командой `systemctl list-timers`. Добавьте также расписание для перезагрузки postfix, так как после обновления сертификатов postfix автоматически их не подхватывает. Например в cron: +``` +0 0 * * 1 systemctl reload postfix +``` + +Измените путь к ключу `privkey.pem` и сертификату `fullchain.pem` в кофигурации postfix `/etc/postfix/main.cf` (параметры `smtp_tls_cert_file` и `smtpd_tls_key_file`) и dovecot `/etc/dovecot/conf.d/10-ssl.conf` (параметры `ssl_cert`, `ssl_key`). Перезагрузите postfix и dovecot. + +Проверьте сертификаты командой +``` +openssl s_client -connect stud15.myoffice.ru:993 -showcerts | openssl x509 -text +``` + +Переподключите клиент одного из пользователей, и проверьте, что вы можете принимать и отправлять почту. + +# 5. * +Спам сильно повлиял на систему электронной почты. Появилось множество проверок для такого почтового трафика, которые могут помешать письму дойти до адресата. TLS увеличит вероятность доставки письма если только письмо передаётся на сервер, принимающий исключительно TLS трафик. Увеличить вероятность доставки также позволяет правильная настройка: +- SPF, +- DKIM (DomainKeys Identified Mail), +- DMARC (Domain-based Message Authentication, Reporting and Conformance), +- MAT-STS записей, +- включение поддержки DANE. + +## 5.1 +Настройте SPF сами или обратитесь к владельцу домена для внесения txt DNS записи следующего вида: +``` +Имя: stud15.myoffice.ru. +Значение: v=spf1 ip4:193.32.63.185 a mx ~all +``` + +## 5.2 +Настройте SPF сами или обратитесь к владельцу домена для внесения txt DNS записи следующего вида: +``` +Имя: _dmarc.stud15.myoffice.ru. +Значение: v=DMARC1; p=none; aspf=r; sp=none +``` + +## 5.3 +Настройте DKIM, установив пакеты `opendkim` и `opendkim-tools`: +``` +$ sudo apt install opendkim opendkim-tools -y +$ sudo systemctl enable opendkim +$ sudo systemctl start opendkim +``` +Для настройки следуйте инструкциям `man opendkim` или онлайн инструкциям http://www.opendkim.org/opendkim-README. Сгенерировать ключи и запись для DNS вы можете утилитой `opendkim-genkey` в директории `/etc/dkimkeys/stud15.myoffice.ru`. После генерации файлов поменяйте владельца на пользователя и группу `opendkim`. +``` +# mkdir /etc/opendkim/stud15.myoffice.ru +# opendkim-genkey --domain stud15.myoffice.ru --selector mail +# chown opendkim:opendkim mail.private +# cat mail.txt +mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; " + "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3wiGFJNaPzXwUg7zgNxLgNO247s0Flmz3t3d56Rzyfgtwwlao/7S37o1vxBLLZj+J49sh8kHNDCljmxYAG0vjkK9cWHzDH6Yst146UkLI2ltGTv+kBf1oOE4LOdUvR/N/fzWeIU5FV8wdzenxPNryWXsJiO7X11j48BtBA7NsajSdTU64aG/cF3i03OrlyE4BYxz64yUefSpNM" + "6JaGZbCg9E9ONpKhb8Rf5E1StHyC19B24/YVakxURVr5KHlxgoR7NBLCjWU4k631LpTRbgueY/zQJlKg+bmZO43cC/KdTHggECxhFKzE5AugJZtd64CeFByGMTdIF6x0+tGS6w4QIDAQAB" ) ; ----- DKIM key mail for stud15.myoffice.ru +``` +Также вы можете воспользоваться онлайн сервисами для генерации ключей, например https://www.dynu.com/NetworkTools/DKIMWizard. Внесите полученную txt DNS запись сами или обратитесь к владельцу домена для внесения записи в DNS. + +Отредактируйте `/etc/opendkim.conf`, чтобы изменить или добавить следующие параметры: +``` +Domain stud15.myoffice.ru +Selector mail +KeyFile /etc/dkimkeys/stud15.myoffice.ru/mail.private +Socket inet:8891@localhost +``` + +Измените в `/etc/default/opendkim` следующий параметр (порт прослушивания сервиса opendkim): +``` +SOCKET=inet:8891@localhost +``` + +Сконфигурируйте взаимодействие DKIM с postfix, добавив следующие параметры в конфигурационный файл `/etc/postfix/main.cf`: +``` +postconf -e 'milter_default_action=accept' +postconf -e 'milter_protocol=2' +postconf -e 'smtpd_milters=inet:127.0.0.1:8891' +postconf -e 'non_smtpd_milters=inet:127.0.0.1:8891' +``` + +Перезапустите `opendkim` и `postfix`: +``` +systemctl restart opendkim +systemctl restart postfix +``` + +## 5.4 +Проверьте ваш почтовый домен с помощью валидатора https://esmtp.email/tools/mta-sts/. # Релевантные источники - https://en.wikipedia.org/wiki/Email @@ -77,4 +259,7 @@ Postfix MTA - https://ru.wikipedia.org/wiki/POP3 - https://ru.wikipedia.org/wiki/Postfix - https://ru.wikipedia.org/wiki/Dovecot -- Evi Nemeth, Garth Snyder, Trent R. Hein, Ben Whaley, Dan Macking. Unix Handbook. 18 Chapter. \ No newline at end of file +- https://ru.wikipedia.org/wiki/DomainKeys_Identified_Mail +- https://ru.wikipedia.org/wiki/DMARC +- Evi Nemeth, Garth Snyder, Trent R. Hein, Ben Whaley, Dan Macking. Unix Handbook. 18 Chapter. +- https://gist.github.com/howyay/57982e6ba9eedd3a5662c518f1b985c7 \ No newline at end of file