Тази статия е продължение на Елементарен MAIL сървър До тук имаме: ● инсталиран и опростен сървър за електронна поща ● инсталиран и настроен PostFix ● инсталиран и настроен Dovecot ● инсталиран и настроен Roundcube ● PostFix приема и изпраща писма ● Dovecot отговаря за пощенските кутии ● ползваме локални потребители от О.С. Ще се постарая леко да усложня задачата. ● ще ползваме сертификати на Let's Encrypt, горещо препоръчвам да не се ползват самоподписани ● ще накараме PostFix и Dovecot да работят със SSL/TLS ● ще поправим псевдонимите ● ще променим удостоверяването в Dovecot ● ще накараме PostFix да дефинира Dovecot да удостоверява чрез LMTP ● ще дефинираме софтуерен филтър на съобщенията ● ще тестваме системата наново с Roundcube ● ще настроим пощенската кутия на един потребител
Ще се постарая елементарно да обясня какво се случва до сега. ● PostFix праща/приема поща и я записва чрез собствени MTA (Mail Trasfer Agent) и MSA (Mail Submission Agent) - порт 25. ● PostFix съхранява писмата чрез собствен MDA (Message delivery agent) агент използвайки MBOX стандарта във файл. ● PostFix не изисква удостоверяване. ● Dovecot чете писмата от файа записан от PostFix. ● Dovecot позволява на потребителите да четат и боравят с пощата след като се удостоверят (log in) използвайки протоколите POP3 (порт 110) и IMAP (порт 143). ● PostFix и Dovecot помежду си не комуникират.
Когато инсталирахме и настройвахме Apache създадохме такива и те се намират в:
ls -l /etc/letsencrypt/live/my.tlan.net/ total 4 lrwxrwxrwx 1 root root 35 Apr 21 06:21 cert.pem -> ../../archive/my.tlan.net/cert1.pem lrwxrwxrwx 1 root root 36 Apr 21 06:21 chain.pem -> ../../archive/my.tlan.net/chain1.pem lrwxrwxrwx 1 root root 40 Apr 21 06:21 fullchain.pem -> ../../archive/my.tlan.net/fullchain1.pem lrwxrwxrwx 1 root root 38 Apr 21 06:21 privkey.pem -> ../../archive/my.tlan.net/privkey1.pem -rw-r--r-- 1 root root 692 Apr 21 06:21 README
cert.pem - първия сертификат, ползва се когато сме помолени за CA пакет или CA сертификат chain.pem - препоръчана "верига от междинни сертификати" fullchain.pem - той се получава от cert.pem + chain.pem privkey.pem - частен сертификат за домейна
Ако до сега не сте запазили конфигурационните файлове на PostFix изпълнете следното:
cp /etc/postfix/main.cf /etc/postfix/main.cf.original1 cp /etc/postfix/master.cf /etc/postfix/master.cf.original1
За начало да проверим в момента на кои портове работи PostFix. За целта ще ползваме
ss -lnpt | grep master LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=1273,fd=13)) LISTEN 0 100 [::]:25 [::]:* users:(("master",pid=1273,fd=14))
На жаргонен език "слуша" на TCP 25 порт. Това е некриптиран чист SMTP. Да видим текущата настройка на PostFix
postconf -n alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases append_dot_mydomain = no biff = no compatibility_level = 3.6 inet_interfaces = all inet_protocols = all mailbox_size_limit = 0 mydestination = $myhostname, my.tlan.net, localhost.my.tlan.net, , localhost myhostname = ns1.my.tlan.net mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 myorigin = /etc/mailname readme_directory = no recipient_delimiter = + relayhost = smtp_tls_CApath = /etc/ssl/certs smtp_tls_security_level = may smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination 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
mydestination - казва за кои домейни пощата ще се доставя локално вместо да се препраща на други хостове. По подразбиране Postfix приема поща само за локални машини. Ако хоста се явява пощенски сървър за целия домейн то главния домейн (my.tlan.net) трябва да се добавен. Тук не става дума за виртуални домейни. Там случая е друг, ще го опишем по-късно. smtpd_relay_restrictions - ограничение по DMTPD mailbox_size_limit = 0 - поща без лимит И ако настроим Roundcube да работи с SMTP на порт 25 и с IMAP на порт 143, сървъра ще работи нормално.
nano /etc/roundcube/config/config.inc.php $config['default_host'] = 'localhost'; $config['smtp_port'] = 25; $config['smtp_user'] = ''; $config['smtp_pass'] = ''; nano /etc/roundcube/config/defaults.inc.php $config['default_host'] = 'localhost'; $config['default_port'] = 143; $config['imap_auth_type'] = null; ### И така нататък.......
За начало да кажем на другите сървъри с които ще комуникираме, че поддържаме TLS/SSL криптация.
nano /etc/postfix/main.cf smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no readme_directory = no compatibility_level = 3.6 # TLS parameters ###TLS сертификати и ключове # smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem # smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_cert_file=/etc/letsencrypt/live/my.tlan.net/fullchain.pem smtpd_tls_key_file=/etc/letsencrypt/live/my.tlan.net/privkey.pem ### По подразбиране TLS е неактивно ### Анонсира STARTTLS на отдалечени SMTP клиенти, но не изисква използването на TLS криптиране ### (опцията may – предлага но не задължава) smtpd_tls_security_level=may ### Файл със списък на доверени сертификати smtp_tls_CApath=/etc/ssl/certs ### TLS тип DANE (опцията may – предлага но не задължава) smtp_tls_security_level=may ### Кеширане на множество TLS сесии smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_un> ### Пълното име на нашия сървър myhostname = ns1.my.tlan.net alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases ### Име на домейна което ще се ползва в качеството си на изпращач по подразбиране за локалните потребители. myorigin = /etc/mailname ### Списък от домейни за които сървъра е дестинация. Това обикновено включва пълното име (FQDN) и локалния хост. mydestination = $myhostname, ns1.my.tlan.net, my.tlan.net, localhost.my.tlan.net, , localhost relayhost = ### Мрежите които обслужва сървъра. Ако имате локални потребители от мрежата добавете и нея. Примерно ползвате локален мейл клиент а не WEB. 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 = all service postfix restart service postfix status ss -lnpt | grep master
Дефинираме местоположението на сертификатите на Let's Encrypt за PostFix. Сертификатите са ни нужни за сигурност при удостоверяване на PostFix. Важен момент!!! Докато не дефинираме MTA (Mail Trasfer Agent) и MSA (Mail Submission Agent) в master.cf правилата няма да работят. Чрез командата ss -lnpt | grep master ще видим, че е активен все още порт 25 и никой друг. PostFix може сам да се удостоверява, но не толкова елегантно и гъвкаво както го прави Dovecot. Затова на по-късен етап ще кажем PostFix да се удостоверява чрез Dovecot. Поради тази причина за сега ще оставим редакцията на файла /etc/postfix/master.cf.
PostFix има един файл с псевдоними. Той се намира в /etc/aliases
nano /etc/aliases # See man 5 aliases for format postmaster: root
Вътре има един запис. Всички писма идващи към postmaster@my.tlan.net да се препратят на root@my.tlan.net. Това е много лоша практика. Все пак никой не прави на root електронна поща и примерно служебните съобщения така ще се загубят. Да редактираме файла:
nano /etc/aliases # See man 5 aliases for format postmaster: root root: cccp
Възстановяваме базата с псевдоними.
newaliases
Така писмата за postmaster@my.tlan.net ще се препращат през root@my.tlan.net на cccp@my.tlan.net.
Ограничението на размера на прикачения файл трябва да бъде по подразбиране 10МВ. Да проверим:
postconf | grep message_size_limit message_size_limit = 10240000
При ограничение 0МВ имаме неограничен лимит за размера на прикачения файл. Да променим размера на лимита на 45МВ.
postconf -e message_size_limit=50331648 service postfix restart service postfix status postconf | grep message_size_limit message_size_limit = 50331648
Това е пример. Вие сами можете да си избирате колко да е лимита. Ако поставите 0 ще имате пощи без лимит.
Dovecot е MDA (агент за доставка на поща). Доставя писмо от/до пощенската кутия. В предната статия го инсталирахме с поддръжка на POP3 и IMAP. Всички настройки на Dovecot се виждат чрез командата:
dovecot -n # 2.3.19.1 (9b53102964): /etc/dovecot/dovecot.conf # Pigeonhole version 0.5.19 (4eae2f79) # OS: Linux 6.1.0-20-amd64 x86_64 Debian 12.5 # Hostname: ns1.my.tlan.net mail_location = mbox:~/mail:INBOX=/var/mail/%u mail_privileged_group = mail namespace inbox { inbox = yes location = mailbox Drafts { special_use = \Drafts } mailbox Junk { special_use = \Junk } mailbox Sent { special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Trash { special_use = \Trash } prefix = } passdb { driver = pam } protocols = " imap pop3" ssl_cert = </etc/dovecot/private/dovecot.pem ssl_client_ca_dir = /etc/ssl/certs ssl_dh = # hidden, use -P to show it ssl_key = # hidden, use -P to show it userdb { driver = passwd }
● mail_location = mbox:~/mail:INBOX=/var/mail/%u - ползваме MBOX формат за разположение на пощата. ● protocols = " imap pop3" - протоколите POP3 и IMAP са активни. ● userdb {driver = passwd} - авторизацията на Dovecot става от файл.
Проверяваме първо дали са активни от предната статия.
service dovecot restart cat /var/log/mail.log | grep "starting" 2024-05-02T16:36:24.457108-04:00 ns1 dovecot: master: Dovecot v2.3.19.1 (9b53102964) starting up for imap, pop3 (core dumps disabled)
Имаме стартирана услугата с поддръжка на IMAP и POP3. Ако нямахме активни IMAP и POP3:
nano /etc/dovecot/dovecot.conf # Enable installed protocols protocols = imap pop3 !include_try /usr/share/dovecot/protocols.d/*.protocol
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_cert = </etc/letsencrypt/live/my.tlan.net/fullchain.pem ssl_key = </etc/letsencrypt/live/my.tlan.net/privkey.pem service dovecot restart service dovecot status
По подразбиране disable_plaintext_auth = yes. Това гарантира, че ще се приемат само връзки с TLS/SSL криптация. Ако по някаква причина е изключено трябва да се активира.
nano /etc/dovecot/conf.d/10-auth.conf #disable_plaintext_auth = yes disable_plaintext_auth = yes auth_mechanisms = plain login ### Най-накрая гледаме за: !include auth-system.conf.ext #!include auth-sql.conf.ext
auth_mechanisms = plain login - налага се да включим механизъм на удостоверяване login заради клиентите на Outlook XP или Vista. Login предава паролите на потребителя некриптирано, но disable_plaintext_auth = yes ни гарантира, че ще се приемат само TLS/SSL връзки. Това ни осигурява сигурността на паролите. !include auth-system.conf.ext - в този файл се указва по какъв начин ще се четат името и паролата на потребителя за удостоверяване.
nano /etc/dovecot/conf.d/auth-system.conf.ext userdb { driver = passwd } passdb { driver = pam }
Потребителя ще се взема от driver = passwd (/etc/passwd), а паролата от driver = pam (/etc/shadow). Внимание !!! Тук все още работим без виртуални потребители, домейни и т.н. Ползваме потребители и пароли от самата операционна система.
По-горе казахме, че Dovecot може да удостоверява чрез plain и login. Да се идентифицира SMTP с Postfix е малко остаряло понятие. Това се правеше, чрез SASL (Simple Authentication и Layer Security) библиотека, която е била част от Cyrus пощенски сървър.Така на практика е почти невъзможно да се проверяват грешки. В сегашно време Postfix иска от Dovecot за проверка на потребителското име и парола. Това можем да го направим по няколко начина. Или от конзолата да напишем няколко команди които да запишат конфигурация в /etc/postfix/main.cf, или на ръка да редактираме main.cf, или да редактираме файла /etc/postfix/master.cf. За мене по-ясния начин е третия. Когато почнем да си играем с виртуализация на домейни и кутии ще пробваме някой от другите варианти за разнообразие. Активираме TLS криптиране и демон за подаване. Демонът за подаване използва порт 587 (SMTP Start TLS). startssl се използва за комуникация между клиент и демон за подаване.
nano /etc/postfix/master.cf # Настройка на Submission за работа на сървъра на порт 587 (SMTP Start TLS - 587) # 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 ### Нивото на защита на SMTP TLS за Postfix. -o smtpd_tls_security_level=encrypt ### Не задължаваме използването на TLS. -o smtpd_tls_wrappermode=no ### Активираме SASL удостоверяване на PostFix. -o smtpd_sasl_auth_enable=yes ### Dovecot удостоверява PostFix. -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth ### Ограничения за достъп за предаване на пощата (могат само SASL удостоверените да предават). -o smtpd_relay_restrictions=permit_sasl_authenticated,reject ### Незадължителни ограничения които се налагат на PostFix, след ограничението smtpd_relay_restrictions. -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject # -o syslog_name=postfix/submission # -o smtpd_tls_security_level=encrypt
Ако искате да задължите клиента който изпраща писмото да работи с TLS то трябваше в /etc/postfix/main.cf да се укаже параметъра: smtpd_tls_security_level = encrypt. Това е много лоша практика и се препоръчва да не се използва, а да се дефинира това задължение чрез редакция в /etc/postfix/master.cf
nano /etc/postfix/master.cf smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
Ако случайно ползвате Microsoft Outlook, той се нуждае от порт 465 (SMTP SSL). Освен това трябва да добавим:
nano /etc/postfix/master.cf # Поддръжка на SSL/TLS на порт 465 (SMTP SSL - 465) # -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING smtps inet n - y - - smtpd -o syslog_name=postfix/smtps ### Задължаваме използването на TLS. -o smtpd_tls_wrappermode=yes ### Активираме SASL удостоверяване на PostFix. -o smtpd_sasl_auth_enable=yes ### Ограничения за достъп за предаване на пощата (могат само SASL удостоверените да предават). -o smtpd_relay_restrictions=permit_sasl_authenticated,reject ### Незадължителни ограничения които се налагат на PostFix, след ограничението smtpd_relay_restrictions. -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject ### Dovecot удостоверява PostFix. -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth # Choose one: enable submissions for loopback clients only, or for any client. #127.0.0.1:submissions inet n - y - - smtpd service postfix restart service postfix status
-o smtpd_sasl_type=dovecot, -o smtpd_sasl_path=private/auth, -o smtpd_sasl_auth_enable=yes - това позволява SMTP удостоверяване и задължава Postfix да ползва Dovecot, използвайки сокета /var/spool/postfix/private/auth. Трябва да си спомняте, че Postfix работеше в sandboxd chroot директория. Така дефинирахме Dovecot да сложи socket в директорията, за да може от там Postfix да комуникира. Забележете има още една разлика. В първия случай за SMTP Start TLS на порт 587 не задължаваме ползването на TLS, а при SMTP SSL на порт 465 задължаваме. Това беше важно уточнение. На по-късен етап ще стане ясно, защо е така. Да проверим кои портове са активни. За целта ни е нужна командата netstat. За целта трябва да инсталираме пакета net-tools.
apt install net-tools -y ss -lnpt | grep master netstat -ntulp | grep master LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=5212,fd=13)) LISTEN 0 100 0.0.0.0:465 0.0.0.0:* users:(("master",pid=5212,fd=22)) LISTEN 0 100 0.0.0.0:587 0.0.0.0:* users:(("master",pid=5212,fd=18)) LISTEN 0 100 [::]:25 [::]:* users:(("master",pid=5212,fd=14)) LISTEN 0 100 [::]:465 [::]:* users:(("master",pid=5212,fd=23)) LISTEN 0 100 [::]:587 [::]:* users:(("master",pid=5212,fd=19))
Имаме активни портове 25, 465 и 587. По подразбиране имахме активен само порт 25 (SMTP).
nano /etc/dovecot/conf.d/10-master.conf # Postfix smtp-auth #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } service dovecot restart
И какво от всичко това? На пръв поглед нищо не се промени в работата на сървъра. На практика обаче повишихме сигурността на сървъра на доста по-високо ниво. По-подробно можете да се запознаете на: https://tlan.net/menu/linux/debian/debian9/09Mail/04postfixdovecotMail/postfixdovecotMail.php
И да направим тест от който ще стане ясно каква защита направихме.
telnet localhost smtp Trying ::1... Connection failed: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 ns1.my.tlan.net ESMTP Postfix (Debian/GNU) ehlo my.tlan.net 250-ns1.my.tlan.net 250-PIPELINING 250-SIZE 50331648 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250 CHUNKING quit 221 2.0.0 Bye Connection closed by foreign host.
Липсва 250-AUTH PLAN LOGIN Тест наново:
telnet localhost smtp Trying ::1... Connection failed: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 ns1.my.tlan.net ESMTP Postfix (Debian/GNU) ehlo my.tlan.net 250-ns1.my.tlan.net 250-PIPELINING 250-SIZE 50331648 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250 CHUNKING starttls 220 2.0.0 Ready to start TLS quit Connection closed by foreign host.
На практика вече SMTP комуникира криптирано и ще трябва да пишем криптирани команди които ние не владеем. За целта използваме нова команда за тест Първо обаче трябва да генерираме парола за пълното име cccp@my.tlan.net която е криптирана.
perl -MMIME::Base64 -e \ 'print encode_base64("cccp\@my.tlan.net\0cccp\@my.tlan.net\0Mockba")'; Y2NjcEBteS50bGFuLm5ldABjY2NwQG15LnRsYW4ubmV0AE1vY2tiYQ==
Сега за непълното име (cccp):
perl -MMIME::Base64 -e 'print encode_base64("cccp\@my.tlan.net\0cccp\@my.tlan.net\0Mockba")'; Y2NjcABjY2NwAE1vY2tiYQ==
И самия тест за SMTP с криптация:
openssl s_client -connect localhost:25 -starttls smtp ### Много символи, генериран ключ ehlo my.tlan.net 250-ns1.my.tlan.net 250-PIPELINING 250-SIZE 50331648 250-VRFY 250-ETRN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250 CHUNKING quit 221 2.0.0 Bye closed
Удостоверение по порт 25 няма. Да пробваме по 587
openssl s_client -connect localhost:587 -starttls smtp ehlo my.tla.net 250-ns1.my.tlan.net 250-PIPELINING 250-SIZE 50331648 250-VRFY 250-ETRN 250-AUTH PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250 CHUNKING quit
Това значи, че когато се обърнем към сървъра по порт 25 (SMTP) не се изисква удостоверение. Казахме обаче независимо, че се обръщаме към SMTP винаги ще трябва да изисква starttls удостоверение. За целта:
postconf smtpd_sasl_type=dovecot postconf smtpd_sasl_path=private/auth postconf smtpd_sasl_auth_enable=yes service postfix restart
И теста:
openssl s_client -connect localhost:25 -starttls smtp ehlo my.tlan.net 250-ns1.my.tlan.net 250-PIPELINING 250-SIZE 50331648 250-VRFY 250-ETRN 250-AUTH PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250 CHUNKING auth plain Y2NjcABjY2NwAE1vY2tiYQ== 235 2.7.0 Authentication successful quit
Забележете, ползваме парола за не пълно име. Това е така защото казахме на Dovecot чрез auth_username_format = %n да ползваме съкратено име за влизане. Доста внимание обърнахме на тестовете. Изясни се, че ползвайки SMTP, SMTP Start TLS или SMTP SSL винаги ще се иска удостоверяване с цел защита. За вътрешно успокоение да проверим на кои портове "слушат" PostFix и Dovecot.
netstat -ntulp | grep master tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 10897/master tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 10897/master tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 10897/master netstat -ntulp | grep dovecot tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 7099/dovecot tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 7099/dovecot tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 7099/dovecot tcp 0 0 0.0.0.0:4190 0.0.0.0:* LISTEN 7099/dovecot tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 7099/dovecot tcp6 0 0 :::993 :::* LISTEN 7099/dovecot tcp6 0 0 :::995 :::* LISTEN 7099/dovecot tcp6 0 0 :::143 :::* LISTEN 7099/dovecot tcp6 0 0 :::4190 :::* LISTEN 7099/dovecot tcp6 0 0 :::110 :::* LISTEN 7099/dovecot
Забележете, Dovecot ползва и TCPv6, освен това имаме още един порт (4190) за Sieve. Ако искате Dovecot да работи само с IPv4 то:
nano /etc/dovecot/dovecot.conf #listen = *, :: listen = *
Не го препоръчвам.
И без това използваме Dovecot нека да се възползваме от възможностите му. PostFix доставя писмата посредствено, а Dovecot позволява много повече неща. Затова PostFix ще даде права на Dovecot да съхрани получените писма. Връзката между PostFix и Dovecot се осъществява или чрез LDA (local delivery agent) или чрез LMTP. Втория е по-добър с по-добра производителност. За да го ползваме първо трябва да го инсталираме:
apt install dovecot-lmtpd -y nano /etc/dovecot/dovecot.conf # Enable installed protocols ### По принцип с инсталацията на dovecot-lmtpd протокола се инициализира. Долния ред не е задължително да го поправяте. protocols = imap pop3 lmtp !include_try /usr/share/dovecot/protocols.d/*.protocol nano /etc/dovecot/conf.d/10-master.conf # service lmtp { # unix_listener lmtp { #mode = 0666 # } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix }
Да добавим поддръжката в PostFix.
postconf -e mailbox_transport=lmtp:unix:private/dovecot-lmtp postconf -e smtputf8_enable=no
mailbox_transport = lmtp:unix:private/dovecot-lmtp - Postfix да доставя чрез lmtp на Dovecot smtputf8_enable = no - деактивира smtputf8 в Postfix Рестартираме PostFix и Dovecot.
service postfix restart service dovecot restart
nano /etc/dovecot/conf.d/10-mail.conf # mail_location = mbox:~/mail:INBOX=/var/mail/%u mail_location = mbox:~/mail service dovecot restart
Оригинално във файла пътя където да се разполагат пощенските кутии е mail_location = mbox:~/mail:INBOX=/var/mail/%u (/var/mail/фаил име на потребителя). Този начин дава много бъгове, даже на сайта на Dovecot го споменават, затова го променяме. Новото местоположение ще е mail_location = mbox:~/mail (/home/име на потребителя/mail/име на файла). Едно леко уточнение, като казах име на файла трябва да знаете, че един път се създава файл за получени мейлове и отделен файл за изпратени мейлове.
Sieve ви позволява да създавате папки и да филтрирате входящи съобщения в създадени папки.
apt install dovecot-sieve dovecot-managesieved service dovecot restart service dovecot status
За да функционира правилно, ще ви е необходим и Dovecot LMTP, ние вече го направихме в частта на ръководството на Dovecot, така че ако все още не сте го направили, не забравяйте да го проверите.
### Орново след исталацията на dovecot-sieve dovecot-managesieved протокола sieve е активен и не се налага да го описвате както е показано по-долу. В статуса на Dovecot се вижда, че е активен. nano /etc/dovecot/dovecot.conf protocols = imap lmtp sieve nano /etc/dovecot/conf.d/15-lda.conf protocol lda { # Space separated list of plugins to load (default is global mail_plugins). #mail_plugins = $mail_plugins mail_plugins = $mail_plugins sieve } nano /etc/dovecot/conf.d/20-lmtp.conf protocol lmtp { # Space separated list of plugins to load (default is global mail_plugins). #mail_plugins = $mail_plugins mail_plugins = $mail_plugins quota sieve } service dovecot restart service dovecot status
Внимание, може да се получи следния проблем. Ако копирате лилавия текст и го слагате направо във файла, може да покаже грешка. По-добре размаркирайте реда който трябва да поправите и допишете sieve на ръка. Да активираме плъгините, ако преди това не сте ги активирали по време на инсталацията и конфигурацията на Dovecot.
nano /etc/roundcube/config/config.inc.php // ---------------------------------- // PLUGINS // ---------------------------------- // List of active plugins (in plugins/ directory) $config['plugins'] = ['managesieve', 'password',]; service apache2 restart
Ако имате инсталиран PostfixAdmin и използвате виртуални потребители, които нямат домашни директории (под които sieve saves съхранява скриптове) също ще трябва да редактирате
nano /etc/dovecot/conf.d/10-mail.conf # mail_location = mbox:~/mail:INBOX=/var/mail/%u mail_location = maildir:~/Maildir mail_home = /var/vmail/%d/%n systemctl restart dovecot systemctl restart postfixser
Влизаме в пощенската кутия на cccp. Ако ще се пробвате да получите/изпратите писмо, ще можете само да пращате, защото там удостоверяване не се изисква, а за четенето трябва. За сега само ще настроим филтрите на Roundcube.
Увеличете лимита на прикачените файлове. По подразбиране той е 2МВ в Roundcube.
Ограничението идва още от PHP.
cd nano /etc/php/8.2/apache2/php.ini ; upload_max_filesize = 2M upload_max_filesize = 45M ; post_max_size = 8M post_max_size = 45M systemctl restart apache2
Вдигнахме лимита на 45МВ.
По подразбиране Postfix и Dovecot използват mbox формат като разположение на пощенските кутии. Предимства на MBOX: ● Форматът MBOX за съхранение на файлове се поддържа универсално. ● Включва новата поща в пощенската кутия много по-бързо. ● Търсенето на определена част от текста е; по-лесно. ● Когато се използва с мрежовите файлови системи, показва проблем със заключване. Предимства на Maildir: ● Maildir е по-бърз и стабилен от MBOX. ● Позволява лесно маркиране на поддиректории. ● Процесът на филтриране е лесен, тъй като съхранява новите съобщения, прочетените съобщения и временните съобщения отделно. ● Тези файлове могат да бъдат; предавани по мрежата с някакъв проблем със съвместимостта. ● За потребителите на Maildir сървърите на courier и dovecot са съвместими. ● Това е най-безопасният формат с по-малко случаи на манипулиране на резултатите. ● В директорията Maildir един файл е; генерирани за всяка входяща поща. Ключови разлики: Maildir v/s MBOX ● Форматът Maildir е много предпочитан от MBOX. ● Maildir е по-структуриран от MBOX. ● MBOX е по-бърз за прехвърляне от Maildir. ● Търсенето в пощата е по-лесно в MBOX.
Ако Dovecot не удостоверяваше и не се грижеше за пощенските кутии, то трябва да се изпълни долната команда.
postconf -e "home_mailbox = Maildir/"
Тази команда добавя реда home_mailbox = Maildir/ в /etc/postfix/main.cf Ако не изпълняваме горната команда просто с редакция на файла ще получим същия ефект.
nano /etc/postfix/main.cf myhostname = ns1.my.tlan.net alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases home_mailbox = Maildir/ myorigin = /etc/mailname mydestination = $myhostname, my.tlan.net, ns1.my.tlan.net, localhost.my.tlan.net, localhost relayhost = service postfix restart
Ако нямахме инсталиран Dovecot, писмата щяха да се разположат в /име на потребителя/Maildir/new/ново получено писмо. За пример: - писмо получено за cccp@my.tlan.net - писмото се намира в: /home/cccp/Maildir/new/самото писмо Тук е момента да споменем, че ползвайки формата Maildir, автоматично ще се създадат три папки в Maildir папката. Трите папки са: cur, new и tmp. Ползвайки горния пример ще се получи: - /home/cccp/Maildir/new/ - тук се помещават новите писма - /home/cccp/Maildir/cur/ - тук се помещават прочетените писма - /home/cccp/Maildir/tmp/ - временно съхранява съобщенията, които са в процес на доставка, може да съхранява и други видове временни файлове И сега какъв е проблема, ако ползваме Maildir, а нямаме Dovecot. Пак няма как да преглеждаме разбираемо писмата. По стари спомени имаше един клиент за MTA агент наречен SqWebMail но беше много бъгав и неудобен. Поради тази причина се налага ползване на приложения управляващи пощенските кутии. В случая ползваме Dovecot. И веднага възниква въпроса. Нали казахме PostFix да предостави тази услуга на Dovecot. Но това ще го спомена след като настроим Dovecot.
В примера с mbox показах как се инсталира и ползва Dovecot. Сега преминаваме към Maildir. Настроихме Postfix да ползва този формат, сега трябва да настроим и Dovecot да го ползва. На практика трябва да конфигурираме 10-mail.conf
nano /etc/dovecot/conf.d/10-mail.conf
# There are a few special variables you can use, eg.:
#
# %u - username
# %n - user part in user@domain, same as %u if there's no domain
# %d - domain part in user@domain, empty if there's no domain
# %h - home directory
#
# See doc/wiki/Variables.txt for full list. Some examples:
#
# mail_location = maildir:~/Maildir
# mail_location = mbox:~/mail:INBOX=/var/mail/%u
# mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
#
#
Това ще сложи писмата в: /home/потребител/Maildir И да се върнем на Maildir в PostFix. Нарочно показах метода къде се поставя Maildir в PsotFix, защото може да не искате да повторите това което аз правя. Може да имате друга идея, да работят отделно PostFix и Dovecot. Като се върнем обаче на нашия случай наистина дефинирането на Maildir в PostFix е излишно. Защото за тази цел указахме да се грижи Dovecot. Забранете home_mailbox = Maildir/ в /etc/postfix/main.cf.
Maildir разполага писмата в три папки cur, new, tmp. За да се създадат автоматично тези папки то:
nano /etc/dovecot/conf.d/15-mailboxes.conf namespace inbox { # These mailboxes are widely used and could perhaps be created auto> 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 b> # them as \Sent. User typically deletes one of them if duplicates a> mailbox Sent { auto = create special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } service dovecot restart service dovecot status
Можем да пробваме през Roundcube за тест. Първо да го конфигурираме напълно.
Това е така защото защитихме Roundcube след инсталацията и конфигурацията му. Да разрешим наново да можем да конфигурираме.
nano /etc/roundcube/config/config.inc.php <?php $config['enable_installer'] = true; /* Local configuration for Roundcube Webmail */
Наново преконфигурираме и тестваме.
Обърнете внимание!!!, при теста ползваме потребител tachko@my.tlan.net. Ако преди това не сте създали такъв потребител ползвайте за теста root@my.tlan.net.
Теста мина, по същия начин трябва да премине и теста за SMTP при ssl://my.tlan.net на порт 465. Да преминем на теста за IMAP.
Удостоверенията работят. SMTP по порт 587 (TLS), а IMAP по порт 993 (SSL). И за накрая. Пробвайте да пратите писмо от външна поща примерно до cccp@my.tlan.net. Няма да получите нищо. Ако влезете да видите лога /var/log/mail.log ще установите грешка.
2024-05-10T06:44:24.588525-04:00 ns1 postfix/lmtp[17471]: 8BD51140D4F: to=<cccp@my.tlan.net>, relay=ns1.my.tlan.net[private/dovecot-lmtp], delay=0.02, delays=0.01/0/0/0, dsn=5.1.1, status=bounced (host ns1.my.tlan.net[private/dovecot-lmtp] said: 550 5.1.1 <cccp@my.tlan.net> User doesn't exist: cccp@my.tlan.net (in reply to RCPT TO command))
Ние обаче сме сигурни, че имаме такъв потребител. Създаден е още с инсталирането на операционната система. Отговора е много прост. Пощенския сървър борави с пълното име в случая cccp@my.tlan.net, а в ОС работим с краткото име cccp. Да оправим това несъответствие, като накараме Dovecot да удостоверява с непълното име.
nano /etc/dovecot/conf.d/10-auth.conf #auth_username_format = %Lu auth_username_format = %n
И сега ако пратите писмо от външна поща то cccp@my.tlan.net ще получи това което му е пратено. Внимание !!! Когато ползваме виртуални домейни, потребители и т.н. тази опция трябва да се изключи, защото там се работи с пълното име. Теста който направихме беше със SMTP Start TLS на порт 587 и IMAP SSL на порт 993. Можете да пробвате със SMTP SSL на порт 465 и IMAP SSL. Избора е изцяло Ваш. Готово, имаме настроен пощенски сървър. От към сигурност нещата не изглеждат добре но това вече е за следващата тема. Използвана литература: https://www.informaticar.net/setup-email-server-on-ubuntu-20-04/ https://www.informaticar.net/setup-dns-records-for-you-email-server/ https://www.informaticar.net/block-email-spam-with-postfix-smtp-server-ubuntu-20-04/