В предната статия създадохме и настроихме пощенски сървър в много груб вариант. Това което създадохме куца от към защита, възможности и стабилност. За да не се излагаме с тази дърварска инсталация ще се наложи да се задълбочим в конфигурационните файлове на PostFix и Dovecot. Да разгледаме конфигурацията на PostFix
sudo 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 smtpd_tls_security_level=may smtp_tls_CApath=/etc/ssl/certs smtp_tls_security_level=may smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Ползваме сертификати получени по време на инсталацията на Ubuntu. По-добрата практика е да ползваме тези които създадохме с Let's Encrypt's но за сега ще е така. Под горните редове добавяме и:
sudo 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 smtpd_tls_security_level=may smtp_tls_CApath=/etc/ssl/certs smtp_tls_security_level=may smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_security_level=may smtpd_tls_loglevel = 1 smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache #Enable TLS Encryption when Postfix sends outgoing emails smtp_tls_security_level = may smtp_tls_loglevel = 1 smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache #Enforce TLSv1.3 or TLSv1.2 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
Сега ще променим master.cs за да активираме TLS криптирането и демона за изпращане. Демонът за изпращане използва порт 587 и също така startssl се използва за комуникация между клиент и демон за изпращане.
sudo nano /etc/postfix/master.cf # Choose one: enable submission for loopback clients only, or for any client. #127.0.0.1:submission inet n - y - - smtpd #submission inet n - y - - smtpd submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_tls_wrappermode=no -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth ### Ако ползвате Outlook # Choose one: enable smtps for loopback clients only, or for any client. #127.0.0.1:smtps inet n - y - - smtpd #smtps inet n - y - - smtpd smtps inet n - y - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth
Порт 465 се нуждае от Ms Outlook. Рестартираме PostFix.
sudo systemctl restart postfix
И да проверим кои портове са активни.
sudo ss -lnpt | grep master LISTEN 0 100 0.0.0.0:465 0.0.0.0:* users:(("master",pid=9672,fd=22)) LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=9672,fd=13)) LISTEN 0 100 0.0.0.0:587 0.0.0.0:* users:(("master",pid=9672,fd=18)) LISTEN 0 100 [::]:465 [::]:* users:(("master",pid=9672,fd=23)) LISTEN 0 100 [::]:25 [::]:* users:(("master",pid=9672,fd=14)) LISTEN 0 100 [::]:587 [::]:* users:(("master",pid=9672,fd=19))
Активни портове 465, 25 и 587. PostFix има файл с псевдоними и той е: /etc/aliasses
sudo nano /etc/aliases # See man 5 aliases for format postmaster: root root: cccp
Да обновим базата с псевдоними.
sudo newaliases
Сега пощата от postmaster@my.tlan.net ще пристига на root@my.tlan.net, а тази от root@my.tlan.net ще пристига на cccp@my.tlan.net. На практика пощата от postmaster@my.tlan.net ще пристига на cccp@my.tlan.net Да проверим лимитите на пощата.
postconf | grep mailbox_size_limit mailbox_size_limit = 0
Безлимитна. Да сменим лимита на 45MB = 50331648 байта
sudo postconf -e message_size_limit=50331648
Деактивираме IPv6.
sudo postconf -e "inet_protocols = ipv4" sudo systemctl restart postfix
Dovecot работи с поротокол IMAP и POP3 да проверим.
sudo nano /etc/dovecot/dovecot.conf # Enable installed protocols protocols = imap pop3 !include_try /usr/share/dovecot/protocols.d/*.protocol
По подразбиране Postfix и Dovecot използват mbox като имейл магазин. Искаме да използваме maildir, защото е по-нов, модерен, мащабируем и по-добър по отношение на целостта на данните от mbox. Да проверим къде е директорията за спулиране на писмата.
postconf mail_spool_directory mail_spool_directory = /var/mail
Нека да преминем към maildir.
sudo nano /etc/dovecot/conf.d/10-mail.conf # mail_location = mbox:~/mail:INBOX=/var/mail/%u mail_location = maildir:~/Maildir ### За стари версии на Ubuntu до 20.04 mail_privileged_group = mail
Така мейлите ще се съхраняват в Maildir в домашната папка на потребителя. За стари версии на Ubuntu до 20.04 използваме и опцията mail_privileged_group = mail. В по-новите опцията съществува по подразбиране.
sudo nano /etc/dovecot/conf.d/10-auth.conf #disable_plaintext_auth = yes disable_plaintext_auth = yes ### Ако потребителя влиза с пълния мейл адрес #auth_username_format = %Lu auth_username_format = %n Изисква име и парола при влизане auth_mechanisms = plain login
sudo nano /etc/dovecot/conf.d/10-ssl.conf # ssl = yes ssl = required ssl_cert = </etc/dovecot/private/dovecot.pem ssl_key = </etc/dovecot/private/dovecot.key #ssl_prefer_server_ciphers = no ssl_prefer_server_ciphers = yes
sudo nano /etc/dovecot/conf.d/10-master.conf # Postfix smtp-auth #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix }
sudo nano /etc/dovecot/conf.d/15-mailboxes.conf # These mailboxes are widely used and could perhaps be created automatically: mailbox Drafts { auto = create special_use = \Drafts } mailbox Junk { special_use = \Junk } mailbox Trash { auto = create special_use = \Trash } # For \Sent mailboxes there are two widely used names. We'll mark both of # them as \Sent. User typically deletes one of them if duplicates are created. mailbox Sent { special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent }
Забравих да спомена, че винаги след редактиране на конфигурационен файл рестартирайте услугата Dovecot. Така постоянно ще следите дали правилно работите. Ако имате някаква синтактична грешка, услугата няма да може да се стартира. При проверка на статуса, ако всичко е наред продължавайте напред.
sudo service dovecot restart sudo service dovecot status
Да проверим на кои портове слуша Dovecot
sudo ss -lnpt | grep dovecot LISTEN 0 100 0.0.0.0:110 0.0.0.0:* users:(("dovecot",pid=13411,fd=21)) LISTEN 0 100 0.0.0.0:143 0.0.0.0:* users:(("dovecot",pid=13411,fd=38)) LISTEN 0 100 0.0.0.0:993 0.0.0.0:* users:(("dovecot",pid=13411,fd=40)) LISTEN 0 100 0.0.0.0:995 0.0.0.0:* users:(("dovecot",pid=13411,fd=23)) LISTEN 0 100 [::]:110 [::]:* users:(("dovecot",pid=13411,fd=22)) LISTEN 0 100 [::]:143 [::]:* users:(("dovecot",pid=13411,fd=39)) LISTEN 0 100 [::]:993 [::]:* users:(("dovecot",pid=13411,fd=41)) LISTEN 0 100 [::]:995 [::]:* users:(("dovecot",pid=13411,fd=24)) LISTEN 0 100 0.0.0.0:110 0.0.0.0:* users:(("dovecot",pid=13411,fd=21)) LISTEN 0 100 0.0.0.0:13411 0.0.0.0:* users:(("dovecot",pid=13411,fd=38)) LISTEN 0 100 0.0.0.0:993 0.0.0.0:* users:(("dovecot",pid=13411,fd=40)) LISTEN 0 100 0.0.0.0:995 0.0.0.0:* users:(("dovecot",pid=13411,fd=23)) LISTEN 0 100 [::]:110 [::]:* users:(("dovecot",pid=13411,fd=22)) LISTEN 0 100 [::]:143 [::]:* users:(("dovecot",pid=13411,fd=39)) LISTEN 0 100 [::]:993 [::]:* users:(("dovecot",pid=13411,fd=41)) LISTEN 0 100 [::]:995 [::]:* users:(("dovecot",pid=13411,fd=24))
Портове 110 (pop3), 143 (imap), 993 и 995 sudo service postfix restart sudo service dovecot restart
sudo apt install dovecot-lmtpd -y sudo nano /etc/dovecot/dovecot.conf # Enable installed protocols #protocols = imap pop3 protocols = imap lmtp !include_try /usr/share/dovecot/protocols.d/*.protocol sudo nano /etc/dovecot/conf.d/10-master.conf #service lmtp { # unix_listener lmtp { # #mode = 0666 # } # Create inet listener only if you can't use the above UNIX socket #inet_listener lmtp { # Avoid making LMTP visible for the entire internet #address = #port = #} #} service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } } sudo nano /etc/postfix/main.cf mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = ipv4 message_size_limit = 50331648 mailbox_transport = lmtp:unix:private/dovecot-lmtp smtputf8_enable = no sudo systemctl restart dovecot sudo systemctl restart postfix