Linux
  • << DEBIAN >>

  •   Сървър на отделни хостове
  •     DNS Сървър
  •     SQL Сървър
  •     WEB Сървър
  •     Пощенски Сървър
  •   PXE Server
  •   PXE UEFI Server - TFTP
  •   Debian 9
  •     Инсталиране на Debian 9
  •     Първоначални настройки (мрежа, VIM, Кирилизация)
  •     Инсталиране и настройка на SSH
  •     Инсталиране и настройка на DNS
  •     Инсталиране и настройка на NTP
  •     Инсталиране и настройка на Apache
  •     Инсталиране и настройка на MySQL (MariaDB)
  •     Инсталиране и настройка на PHPMyAdmin
  •     Инсталиране и настройка на собствен облак
  •     Инсталиране и настройка на SAMBA
  •     Инсталиране и настройка на FTP сървър
  •     Инсталиране и настройка на OSCAM
  •     Инсталиране и настройка на Mail server
  •       Първоначално конфигуриране на базата данни
  •       Инсталиране и конфигуриране на PostFix
  •       Инсталиране и конфигуриране на Dovecot
  •       PostFix дефинира Dovecot да удостоверява
  •       RoundCube
  •       Тестване доставката на поща
  •       Създаване на TLS криптиран ключ и сертификат
  •       WEB администриране
  •       Антиспам със SpamAssassin
  •       Антиспам с RSpmad
  •   Debian 11
  •     Как зарежда Linux
  •     Разпределение на диска при BIOS и UEFI
  •     Debian 11 на BIOS върху LVM и RAID
  •     Инсталиране на Debian 11 на BIOS и ZFS
  •     Инсталиране на Debian 11 на BIOS и ZFS-1
  •     Инсталиране на Debian 11 на UEFI и ZFS
  •     ZFS Замяна на развален огледален диск
  •     Ремонт на GRUB и INITRAMFS
  •   Debian 12
  •     Първоначални настройки
  •     DNS Сървър
  •     Добавяне на втори диск
  •     Файлов сървър + WEBMIN
  •     SAMBA
  •     Инсталиране и настройка на Apache
  •     Инсталиране и настройка на Nginx
  •     MySQL и PHPMyAdmin
  •     Елементарен MAIL сървър
  •       Подобрение SSL/TLS, Maildir, LMTP
  •       Подобрение ВИРТУАЛИЗАЦИЯ без MySQL
  •       Подобрение ВИРТУАЛИЗАЦИЯ и MySQL
  •       Подобрение Антиспам - SpamAssasin
  •       Подобрение Антиспам - RSpamd
  •       Защита - SPF, DKIM и DMARK
  •       Подобрение Антивирус
  •     Пълноценен MAIL сървър
  •     Пощенски сървър с iRedMail и PHPMyAdmin
  •       DKIM, SPF и DMARK
  •     MAIL сървър за вътрешна мрежа
  •     NextCloud
  •     Сървър за отдалечен достъп - RustDESK
  • << UBUNTU >>
  •   Ubuntu SERVER 22.04
  •     Инсталиране на Ubuntu 22.04 Server
  •     Първоначални настройки на Ubuntu 22.04 Server
  •     DNS в Ubuntu 22.04 Server
  •     MySQL Apache PHPMyAdmin
  •     Пощенски сървър
  •       Пощенски сървър в опростен вариант
  •       PostFix, Dovecot по-подробно
  •   Ubuntu mini
  • << RAID >>
  •     BIOS RAID1+MSDOS
  •     BIOS RAID1+MSDOS+LVM
  •     UEFI RAID1
  • << BTRFS >>
  •     BTRFS - създаване монтиране fstab размер
  •     BTRFS - RAID
  •     BTRFS - subvolume и snapshot
  • << КОНТЕЙНЕРИ >>
  •     Инсталиране на LXC/LXD
  •     Образи (image) в LXC/LXD
  •     Контейнери в LXC/LXD
  •     Команди в LXC/LXD
  • << ОТСТРАНЯВАНЕ НА ГРЕШКИ >>
  •     SWAP
  •     InitRAMFs
  • Надграждане на сървъра за електронна поща

    Тази статия е продължение на Елементарен 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 помежду си не комуникират.

    Сертификати на Let's Encrypt

    Когато инсталирахме и настройвахме 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

    Ако до сега не сте запазили конфигурационните файлове на 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; ### И така нататък.......

    Сертификати в PostFix

    За начало да кажем на другите сървъри с които ще комуникираме, че поддържаме 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

    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 става от файл.

    Активираме протоколи POP3 и IMAP

    Проверяваме първо дали са активни от предната статия.

    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

    SSL/TLS в Dovecot

    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

    Удостоверяване в Dovecot

    По подразбиране 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). Внимание !!! Тук все още работим без виртуални потребители, домейни и т.н. Ползваме потребители и пароли от самата операционна система.

    Postfix използва Dovecot да удостоверява

    По-горе казахме, че 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).

    SASL удостоверяване в Dovecot

    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 = *

    Не го препоръчвам.

    Postfix използва Dovecot за доставяне на писмата до диска на сървъра

    И без това използваме 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

    Разположение на пощенските кутии в Dovecot

    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.

    Pic13

    Pic14

    Pic15

    Pic16

    Pic17

    Увеличете лимита на прикачените файлове. По подразбиране той е 2МВ в Roundcube.

    Pic18

    Ограничението идва още от 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МВ.

    Pic19

    Местоположение на пощенската кутия от MBOX към MAILDIR

    По подразбиране Postfix и Dovecot използват mbox формат като разположение на пощенските кутии. Предимства на MBOX: ● Форматът MBOX за съхранение на файлове се поддържа универсално. ● Включва новата поща в пощенската кутия много по-бързо. ● Търсенето на определена част от текста е; по-лесно. ● Когато се използва с мрежовите файлови системи, показва проблем със заключване. Предимства на Maildir: ● Maildir е по-бърз и стабилен от MBOX. ● Позволява лесно маркиране на поддиректории. ● Процесът на филтриране е лесен, тъй като съхранява новите съобщения, прочетените съобщения и временните съобщения отделно. ● Тези файлове могат да бъдат; предавани по мрежата с някакъв проблем със съвместимостта. ● За потребителите на Maildir сървърите на courier и dovecot са съвместими. ● Това е най-безопасният формат с по-малко случаи на манипулиране на резултатите. ● В директорията Maildir един файл е; генерирани за всяка входяща поща. Ключови разлики: Maildir v/s MBOX ● Форматът Maildir е много предпочитан от MBOX. ● Maildir е по-структуриран от MBOX. ● MBOX е по-бърз за прехвърляне от Maildir. ● Търсенето в пощата е по-лесно в MBOX.

    Конфигуриране на PostFix

    Ако 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.

    Конфигуриране на 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 # # # # mail_location = mbox:~/mail:INBOX=/var/mail/%u # mail_location = mbox:~/mail mail_location = maildir:~/Maildir service dovecot restart service dovecot status

    Това ще сложи писмата в: /home/потребител/Maildir И да се върнем на Maildir в PostFix. Нарочно показах метода къде се поставя Maildir в PsotFix, защото може да не искате да повторите това което аз правя. Може да имате друга идея, да работят отделно PostFix и Dovecot. Като се върнем обаче на нашия случай наистина дефинирането на Maildir в PostFix е излишно. Защото за тази цел указахме да се грижи Dovecot. Забранете home_mailbox = Maildir/ в /etc/postfix/main.cf.

    Автоматично създаване на папки Send и Trash

    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 за тест. Първо да го конфигурираме напълно.

    Pic01

    Това е така защото защитихме Roundcube след инсталацията и конфигурацията му. Да разрешим наново да можем да конфигурираме.

    nano /etc/roundcube/config/config.inc.php <?php $config['enable_installer'] = true; /* Local configuration for Roundcube Webmail */

    Наново преконфигурираме и тестваме.

    Pic00a

    Pic00b

    Pic00bb

    Pic00c

    Pic00d

    Pic00e

    Обърнете внимание!!!, при теста ползваме потребител tachko@my.tlan.net. Ако преди това не сте създали такъв потребител ползвайте за теста root@my.tlan.net.

    Pic00f

    Теста мина, по същия начин трябва да премине и теста за SMTP при ssl://my.tlan.net на порт 465. Да преминем на теста за IMAP.

    Pic00g

    Удостоверенията работят. 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/