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
  • Инсталиране и конфигуриране на Dovecot

    Инсталиране на Dovecot и приставките му

    Пакети за инсталиране:

    dovecot-core - защитен пощенски сървър поддържащ mbox, maildir, dbox и mdbox mailboxes dovecot-imapd –Приставка на Dovecot за поддръжка на IMAP протокол dovecot-pop3d –Приставка на Dovecot за поддръжка на POP3 протокол dovecot-mysql –Приставка на Dovecot за поддръжка на MySQL dovecot-lmtpd –Приставка на Dovecot за поддръжка на LMTP протокол (връзка Postfix-Dovecot) dovecot-managesieved –Приставка на Dovecot за поддръжка на Sieve (филтриращи правила които Dovecot автоматично изпълнява)


    # apt-get install dovecot-mysql dovecot-pop3d dovecot-imapd dovecot-managesieved dovecot-lmtpd

    Самата инсталация протича бързо без въпроси. функцията на Dovecot e: - Получава поща от Postfix и я записва на диск - Изпълнява потребителски правила за филтриране (движи пощи между папките) - Позволява на потребителя след като се удостовери (log in) да си провери пощата използвайки POP3 или IMAP


    Файлове за конфигуриране

    /etc/dovecot/dovecot.conf /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/auth-sql.conf.ext /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/15-mailboxes.conf /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/conf.d/20-lmtp.conf


    След инсгталацията, се генерираха много конфигурационни скриптове най-вече в директория /etc/dovecot/conf.d. Добра практика е да им се направи копие.

    # cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.original # cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.original # cp /etc/dovecot/conf.d/auth-sql.conf.ext /etc/dovecot/conf.d/auth-sql.conf.ext.original # cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.original # cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.original # cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.original # cp /etc/dovecot/conf.d/15-mailboxes.conf /etc/dovecot/conf.d/15-mailboxes.conf.original # cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.original # cp /etc/dovecot/conf.d/20-lmtp.conf /etc/dovecot/conf.d/20-lmtp.conf.origianal


    В предната статия създадохме потребител vmail (UID 5000) , член на групата vmail (GID 5000). Този потребител беше собственик на папката /home/vmail. Същия този потребител се ползва от Dovecot за да записва електронната поща в директория /home/vmail. Може и да се провери за всеки случай за наличието на потребителя

    # id vmail uid=5000(vmail) gid=5000(vmail) groups=5000(vmail)


    И да започнем с конфигурацията на файловете, един по един

    /etc/dovecot/dovecot.conf - описва основните действия на Dovecot.

    # vi /etc/dovecot/dovecot.conf !include_try /usr/share/dovecot/protocols.d/*.protocol

    Зарежда файлове дефиниращи протоколите

    !include conf.d/*.conf

    Този ред задължително трябва да съществува. Той зарежда всички конфигурационни файлове от директория /etc/dovecot/conf.d.

    !include_try local.conf

    Този ред дефинира зареждане на конфигурационни файлове, които сме създали лично (не идват от инсталации).


    /etc/dovecot/conf.d/10-auth.conf

    # vi /etc/dovecot/conf.d/10-auth.conf ### Търсим реда: auth_mechanisms = plain ### Трябва да изглежда: auth_mechanisms = plain login


    Ако потребителите все още ползват Outlook Express под Windows XP или Microsoft Mail на Windows Vista, то тогава механизма на удостоверение трябва да е LOGIN. Така позволявате двата механизма на удостоверение. Принципно LOGIN позволява предаване на паролите на потребителя явно (некриптирано). Това не може да е притеснително защото Dovecot по подразбиране е с disable_plaintext_auth = yes което гарантира, че се приемат само връзки с TLS криптация.


    Търсим пасажа:

    !include auth-system.conf.ext #!include auth-sql.conf.ext #!include auth-ldap.conf.ext

    Трябва да изглежда:

    #!include auth-system.conf.ext !include auth-sql.conf.ext #!include auth-ldap.conf.ext

    Именно защото ползваме MySQL за удостоверяване.


    /etc/dovecot/conf.d/auth-sql.conf.ext. В горния файл който редактирахме, указахме да се използва именно този файл чрез (!include auth-sql.conf.ext)

    # vi /etc/dovecot/conf.d/auth-sql.conf.ext ### Търсим секцията userdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } ### Трием горното и слагаме това: userdb { driver = static args = uid=vmail gid=vmail home=/home/vmail/%d/%n }

    Така на практика твърдо се указва къде да бъде записана пощата. Тука важните моменти са домашната папка , че е в /home/vmail, %d – дефинира домейна a %n – дефинира потребителя от пощенския адрес (user@domain). Променливите на Dovecot могат да се проверят на http://wiki2.dovecot.org/Variables Този файл има още една секция която няма да се редактира

    passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext }

    Тука се казва паролата за удостоверяване да се вземе от SQL, а заявката към SQL-а да се опише във файл /etc/dovecot/dovecot-sql.conf.ext


    /etc/dovecot/conf.d/10-mail.conf

    # vi /etc/dovecot/conf.d/10-mail.conf mail_location = mbox:~/mail:INBOX=/var/mail/%u ### променяме на: mail_location = maildir:/home/vmail/%d/%n/Maildir

    Идеята е пощата примерно за tachko@home.tachko.com да се складира в /home/vmail/home.tachko.com/tachko/Maildir Още нещо. Ако до сега е имало пощенски сървър със същата топология на складиране на писмата и има записана стара поща по папките то може да се редактира следната секция:

    namespace inbox { #separator =

    Трябва да изглежда:

    namespace inbox { separator = .

    По подразбиране разделителя е / и примерно директорията е била /home/vmail/tachko.com/tachko/Maildir/INBOX/staff/marketin/simon след като се активира разделителя, директорията ще придобие вида /home/vmail/tachko.com/tachko/Maildir/.INBOX.staff.marketin.simon. В случая няма стара поща затова това остава в оригинален вид.


    /etc/dovecot/conf.d/10-master.conf. Този файл се занимава с услуги които позволяват комуникация с други процеси. Примерно активира/деактивира POP3, IMAP. Не трябва да има притеснение за не криптираните TCP портове 110 (POP3) и 143 (IMAP). Те трябва да са достъпни. Ако потребител се върже към тези портове то ще трябва да използва StartTLS команда за да премине в криптиран режим преди да изпрати паролата си. Повечето от настройките в този файл са много старателно обмислени и не е много хубаво да се променят прекомерно. Въпреки това се налага в секцията „service auth“ (услуга за упълномощаване), защото трябва Postfix да позволи на Dovecot да е като услуга за аутотентикаия.

    # vi /etc/dovecot/conf.d/10-master.conf ### Търсим пасажа: service auth { ### ……………………………. писано ……………………………. ### # Postfix smtp-auth #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} Трябва да изглежда: service auth { ### ……………………………. писано ……………………………. ### # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { #размаркирва се mode = 0660 #размаркирва се user = postfix group = postfix } #размаркирва се

    Странен път. /var/spool/postfix/private/auth произлиза от това, че Postfix стартира в chroot обкръжение в /var/spool/postfix, и не може да достъпи нищо извън тази директория. Така се позволява комуникация на Pоstfix с Dovecot използвайки сокет файл. Има доста странни наименования (сокет файл) и ако всичко се обяснява няма да стигне времето за описване. В общи линии Postfix така използва механизма на аутотентикация от Dovecot. /etc/dovecot/conf.d/10-ssl.conf. Важно условие, трябва да има генерирани сертификатите (по време на инсталацията) или ръчно да сме генерирали.

    # vi /etc/dovecot/conf.d/10-ssl.conf ### Търсим реда: ssl = no ### Трябва да изглежда: ssl = yes

    Вместо yes можеше да се ползва required, но Dovecot забранява изпращането на пароли в текстов вид върху не криптирани връзки.

    ### Търсим още: #ssl_cert = </etc/dovecot/dovecot.pem #ssl_key = </etc/dovecot/private/dovecot.pem ### Трябва да изглежда: ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key

    Внимание!!! Пътя до името на сертификата и ключа трябва да са еднакви с описаното в /etc/postfix/main.cf /etc/dovecot/conf.d/15-mailboxes.conf

    # vi /etc/dovecot/conf.d/15-mailboxes.conf # NOTE: Assumes "namespace inbox" has been defined in 10-mail.conf. namespace inbox { # These mailboxes are widely used and could perhaps be created automatically: mailbox Drafts { special_use = \Drafts } mailbox Junk { special_use = \Junk } mailbox Trash { 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" { pecial_use = \Sent } # If you have a virtual "All messages" mailbox: #mailbox virtual/All { # special_use = \All # comment = All my messages #} # If you have a virtual "Flagged" mailbox: #mailbox virtual/Flagged { # special_use = \Flagged # comment = All my flagged messages #} } ### Там където се дефинира секцията „namespace inbox“ някъде вътре преди да се затвори секцията се поставя указания текст. # NOTE: Assumes "namespace inbox" has been defined in 10-mail.conf. namespace inbox { # These mailboxes are widely used and could perhaps be created automatically: mailbox Drafts { special_use = \Drafts } mailbox Junk { special_use = \Junk } mailbox Trash { 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 } # If you have a virtual "All messages" mailbox: #mailbox virtual/All { # special_use = \All # comment = All my messages #} # If you have a virtual "Flagged" mailbox: #mailbox virtual/Flagged { # special_use = \Flagged # comment = All my flagged messages #} mailbox INBOX.Junk { auto = subscribe special_use = \Junk } mailbox INBOX.Trash { auto = subscribe special_use = \Trash }
    }

    Това гарантира, че Junk (спам) и Trash (кошче) се намират в рамките на папка InBox (входящата поща) когато се използва протокола IMAP


    /etc/dovecot/dovecot-sql.conf.ext. Този файл е дефиниран от /etc/dovecot/conf.d/auth-sql.conf.ext В него се описва начина на достъп на Dovecot до MySQL, и къде се намира информацията за потребители/акаунти. Целия файл на практика е само от коментари, затова най отгоре се добавя следното:

    # vi /etc/dovecot/dovecot-sql.conf.ext driver = mysql connect = host=127.0.0.1 dbname=pfdb user=pfuser password=pfpass default_pass_scheme = SHA256-CRYPT password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';

    driver – вида на базата данни

    connect – къде се намира базата данни и как да се свърже с нея

    default_pass_scheme – форма в която се съхраняват паролите. В случая SHA256 hashes

    password_query – изявление на SQL, че се връщат на потребителя (=пощенския адрес) и паролата (SHA256 hash) от базата данни където %u е логин името.


    И накрая в завършек трябва да сме сигурни, че само root има права върху SQL конфигурационния файл.

    # chown root:root /etc/dovecot/dovecot-sql.conf.ext # chmod go= /etc/dovecot/dovecot-sql.conf.ext # ls -l /etc/dovecot/dovecot-sql.conf.ext -rw------- 1 root root 5813 Apr 14 20:05 /etc/dovecot/dovecot-sql.conf.ext


    Следва рестарт на Dovecot, но преди това изчистваме логовете. Може и без да се чистят но стават дълги и мъчно се проследяват.

    # > /var/log/mail.log # > /var/log/mail.err


    Рестарт на Dovecot

    # /etc/init.d/dovecot restart # /etc/init.d/dovecot status

    Без видими забележки. За всеки случай проверка на лога

    # vi /var/log/mail.log --- Много информация докато достигнем до най-долния ред: --- Apr 14 20:11:30 home dovecot: master: Dovecot v2.2.27 starting up for imap, lmtp, sieve, pop3 (core dumps disabled)

    Стартирали са imap, lmtp, sieve, pop3 и то без забележки. Супер до тука всичко работи като хората.


    Конфигуриране на Postfix да изпраща поща до Dovecot

    Преди се уверихме , че Postfix знае кое писмо може да се получи. Сега обаче излиза въпроса какво да го прави. На практика и Postfix може да съхрани това писмо използвайки вградения си (MDA) агент наречен „виртуален“. Въпреки това в сравнение с възможностите които разполага Dovecot като квоти, филтрации и т.н. , Postfix изглежда посредствен. И без това се ползва Dovecot за услугите IMAP, POP3, (също проверява имена и пароли) така че защо да не се ползва и за тази цел. Връзката между Postfix и Dovecot се осъществява по два начина 1. Dovecot-lda (local delivery agent) процес. Може да се обработва едно писмо в даден момент. И започва нов процес за ново писмо. Това е дългия път по подразбиране. 2. Втория начин е използването на LMTP протокол. Може да се обработва множество получатели в едно и също време. Има по добра производителност от LDA.. Именно този метод ще се ползва.


    /etc/dovecot/conf.d/10-master.conf. По горе дефинирахме Postfix да позволи на Dovecot да е като услуга за удостоверяване.

    # vi /etc/dovecot/conf.d/10-master.conf ### Търсим пасажа: service auth { ### ……………………………. писано ……………………………. ### # Postfix smtp-auth #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} Трябва да изглежда: service auth { ### ……………………………. писано ……………………………. ### # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { #размаркирва се mode = 0660 #размаркирва се user = postfix group = postfix } #размаркирва се

    За да се случи горното решение, а и за други цели трябва да се укаже как да се изгради връзката Postfix-Dovecot. Сега ще укажем къде Dovecot да слуша за LMTP връзка с Postfix

    # vi /etc/dovecot/conf.d/10-master.conf service lmtp { unix_listener lmtp { # 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 lmtp { #mode = 0666 #} unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } # 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 = #} }

    Това прави Dovecot на lmtp daemon и създаде unix socket в /var/spool/postfix/private/dovecot-lmtp. По същата идеология както се дефинира Postfix да позволи на Dovecot да е като услуга за оповестяване Рестартираме Dovecot

    # /etc/init.d/dovecot restart # /etc/init.d/dovecot status

    Отново без забележки.


    Конфигуриране на Postfix да изпраща писма до Dovecot използвайки LMTP

    Сега да укажем на Postfix да изпраща писмата до Dovecot използвайки LMTP протокола

    # postconf virtual_transport=lmtp:unix:private/dovecot-lmtp

    Така отново се създаде нов ред във файла /etc/postfix/main.cf. С променливата virtual_transport в Postfix се дефинира услуга за предаване на поща в локалната система. Dovecot създаде сокет файл и е готов да слуша за входящи LMTP връзки. По просто казано накарахме Postfix да използва LMTP протокол за връзка с Dovecot. За повече информация http://wiki2.dovecot.org/LDA/Postfix.

    Активиране на правила от страна на сървъра (Sieve)

    Sieve, това е скрипт филтриращ пощата. Филтрацията се изпълнява от LMTP агента в момента на получаване на писмото от Postfix (MTA). Скрипта позволява да се поставя пощата в различни папки ориентирани по съдържание - тема на писмото, получател на писмото, подател и т.н. Може да изтрие писмото, да го препрати в друга папка или да уведоми подателя. Клиентите на практика нищо не правят, те просто се логват и ползват сортирането на пощата. За да се ползва Sieve са нужни и добавките dovecot-siece и dovecot-manageseieved, които инсталирахме по рано. Една от прекрасните функци на Dovecot са правилата на входящата поща, които се обработват на сървъра. Може да се сортират входящите писма в специални папки. Може да се отхвърлят определени податели. Може даже да се настрои автоматично да отговаря. И всичко това без да има пощенски клиент, всичко става автоматично без намесата на клиента. В стандарта на отворения код това се нарича Sieve. По прост начин казано Sieve (сито) е начин на управление на електронната поща от страна на сървъра. За дадени потребители тези правила могат да се дефинират на сървъра и Dovecot ще се грижи те да се изпълнят автоматично. Тъй като се ползва LMTP то трябва да се укажете на услугата lmtp, че иска да ползва Sieve плъгин за Dovecot. Това се постига като се редактира файла /etc/dovecot/conf.d/20-lmtp.conf


    /etc/dovecot/conf.d/20-lmtp.conf. За да го има файла /etc/dovecot/conf.d/20-lmtp.conf трябва да е инсталирана и добавката dovecot-lmtpd. Плъгина dovecot-lmtpd активира услугата lmtp

    # vi /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 } ### Трябва да изглежда така protocol lmtp { # Space separated list of plugins to load (default is global mail_plugins). #mail_plugins = $mail_plugins mail_plugins = $mail_plugins sieve }

    Така дефинирахме услугата LMTP да ползва добавката Sieve (Сито) на Dovecot. Рестарт на Dovecot

    # /etc/init.d/dovecot restart # /etc/init.d/dovecot status

    Отново без забележки Следва връзка между Postfix и Dovecot за удостоверения