V předchozích článcích jsme diskutovali o tom, jak nastavit vlastní poštovní server na CentOS 8/RHEL 8 od nuly. V části 1 a části 2 této série výukových programů jsme se naučili, jak nastavit Server Postfix SMTP a server IMAP Dovecot , ale zatím můžeme mít e-mailové adresy pouze pro uživatele s místním unixovým účtem. Tento tutoriál vám ukáže, jak vytvořit virtuální poštovní schránky na poštovním serveru CentOS 8/RHEL 8 pomocí PostfixAdmin , což je webové rozhraní s otevřeným zdrojovým kódem pro konfiguraci a správu e-mailového serveru založeného na Postfixu pro mnoho domén a uživatelů.
S virtuálními poštovními schránkami , nemusíme pro každou e-mailovou adresu vytvářet místní unixový účet. Pokud se chystáte nastavit poštovní server pro společnost nebo organizaci, je vždy lepší mít snadný způsob vytváření virtuálních poštovních schránek ve webovém rozhraní, které také umožňuje uživatelům měnit svá hesla. Zde přichází na řadu PostfixAdmin.
Funkce PostfixAdmin
- správa poštovních schránek, virtuálních domén a aliasů
- zprávy o dovolené/nepřítomnosti (Osobně si myslím, že tuto funkci je lepší provést v Roundcube Webmail.)
- aliasové domény (přesměrování jedné domény do druhé s ověřením příjemce)
- uživatelé mohou spravovat svou vlastní poštovní schránku (změnit alias, heslo a zprávu o dovolené)
- podpora kvót pro jednotlivé poštovní schránky a celková kvóta domény
- Integrace fetchmail:Můžete načítat e-maily ze své původní e-mailové adresy na novou e-mailovou adresu.
- klient příkazového řádku postfixadmin-cli pro ty, kteří nechtějí klikat ve webovém rozhraní 😉
Poznámka :Jakmile dokončíte část 3, již nebudete moci používat místní unixové účty jako e-mailové adresy. E-mailové adresy musíte vytvořit z webového rozhraní PostfixAdmin.
Předpoklady
Předpokládám, že jste sledovali část 1 a část 2 této série tutoriálů. Pokud jste sledovali výukové programy pro poštovní servery na jiných webových stránkách, doporučuji vyčistit své konfigurace a začít znovu s mou sérií výukových programů, abyste nebyli zmateni různými procesy nastavení.
Jakmile jsou výše uvedené požadavky splněny, pojďme nainstalovat a nakonfigurovat PostfixAdmin.
Krok 1:Instalace databázového serveru MariaDB na CentOS 8/RHEL 8
PostfixAdmin je napsán v PHP a vyžaduje databázi (MySQL/MariaDB, PostgreSQL nebo SQLite). Tento článek bude používat MariaDB, což je náhrada za MySQL. Je vyvinut bývalými členy týmu MySQL, kteří se obávají, že by Oracle mohl změnit MySQL na uzavřený produkt. Chcete-li nainstalovat MariaDB na CentOS 8/RHEL 8, zadejte následující příkaz.
sudo dnf install mariadb-server mariadb -y
Po instalaci jej musíme spustit.
sudo systemctl start mariadb
Povolit automatické spouštění při spouštění systému.
sudo systemctl povolit mariadb
Zkontrolujte stav:
systemctl status mariadb
výstup:
● mariadb.service – databázový server MariaDB 10.3 Načteno:načteno (/usr/lib/systemd/system/mariadb.service; povoleno; přednastaveno dodavatelem:zakázáno) Aktivní:aktivní (běží) od So 2019-10-12 09:02:53 UTC; Před 33 s Dokumenty:man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Hlavní PID:18608 (mysqld) Stav:„Teď se berou vaše požadavky SQL...“ Úkoly:30 (limit :5092) Paměť:77,0M CGroup:/system.slice/mariadb.service └─18608 /usr/libexec/mysqld --basedir=/usr
„Povoleno ” označuje, že je povoleno automatické spouštění při spouštění a vidíme, že server MariaDB běží. Nyní musíme spustit bezpečnostní skript.
sudo mysql_secure_installation
Až budete požádáni o zadání rootovského hesla MariaDB, stiskněte klávesu Enter, protože heslo root ještě není nastaveno. Poté zadejte y
pro nastavení hesla uživatele root pro server MariaDB.
Dále můžete stisknout Enter pro zodpovězení všech zbývajících otázek, což odstraní anonymního uživatele, zakáže vzdálené přihlášení root a odstraní testovací databázi. Tento krok je základním požadavkem pro zabezpečení databáze MariaDB. (Všimněte si, že písmeno Y
je velká, což znamená, že se jedná o výchozí odpověď.)
Krok 2:Stáhněte si PostfixAdmin na CentOS 8/RHEL 8 Server
Přihlaste se ke svému poštovnímu serveru a poté stáhněte instalační soubor PostfixAdmin na váš server. Přejděte na stránku PostfixAdmin Gitbub a stáhněte si nejnovější verzi. Můžete použít wget
nástroj ke stažení z příkazového řádku. Odkaz ke stažení je vždy k dispozici v níže uvedeném formátu. Pokud vyjde nová verze, jednoduše nahraďte 3.3.8 novým číslem verze.
instalace sudo dnf wgetwget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.8.tar.gz
Po stažení archiv rozbalte.
Pokud používáte Apache, rozbalte jej do /var/www/
adresář a přejmenujte jej na postfixadmin
.
sudo dnf nainstalovat tarsudo tar xvf postfixadmin-3.3.8.tar.gz -C /var/www/sudo mv /var/www/postfixadmin-postfixadmin-3.3.8 /var/www/postfixadmin
Pokud používáte Nginx, rozbalte jej do /usr/share/nginx/
adresář a přejmenujte jej na postfixadmin
.
instalace sudo dnf tarsudo tar xvf postfixadmin-3.3.8.tar.gz -C /usr/share/nginx/sudo mv /usr/share/nginx/postfixadmin-postfixadmin-3.3.8 /usr/share/nginx/ postfixadmin
Krok 3:Nastavení oprávnění
PostfixAdmin vyžaduje templates_c
a webový server potřebuje přístup pro čtení a zápis do tohoto adresáře. Musíme také změnit kontext SELinuxu, aby bylo možné do něj zapisovat. Spusťte tedy následující příkazy.
Apache
sudo mkdir /var/www/postfixadmin/templates_csudo setfacl -R -m u:apache:rwx /var/www/postfixadmin/templates_c/sudo chcon -t httpd_sys_rw_content_t /var/www/postfixadmin/templates_c/ -R
Nginx
sudo mkdir /usr/share/nginx/postfixadmin/templates_csudo setfacl -R -m u:nginx:rwx /usr/share/nginx/postfixadmin/templates_c/sudo chcon -t httpd_sys_rw_content_t/usr/postemad/usr/postemad / -R
Ve výchozím nastavení SELinux zakazuje Apache/Nginx odesílat síťové požadavky na jiné servery, ale později si Apache/Nginx musí vyžádat stav certifikátu TLS ze serveru Let's Encrypt CA pro sešívání OCSP, takže musíme SELinuxu říci, aby povolil Apache/Nginx s následujícím příkaz.
sudo setsebool -P httpd_can_network_connect 1
Pokud používáte Nginx, musíte také spustit následující příkaz, abyste uživateli nginx poskytli oprávnění ke čtení a zápisu do 3 adresářů.
sudo setfacl -R -m u:nginx:rwx /var/lib/php/opcache/ /var/lib/php/session/ /var/lib/php/wsdlcache/
Restartujte Apache/Nginx.
sudo systemctl restart httpdsudo systemctl restart nginx
Počínaje verzí Dovecot 2.3.11 potřebuje uživatel webového serveru oprávnění ke čtení certifikátu Let’s Encrypt TLS, aby mohl provést hašování hesla. Spuštěním následujících dvou příkazů udělte oprávnění.
Apache
sudo setfacl -R -m u:apache:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/
Nginx
sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/
Krok 4:Vytvořte databázi a uživatele pro PostfixAdmin
Přihlaste se do prostředí MySQL/MariaDB jako root pomocí následujícího příkazu. Budete muset zadat heslo root MySQL/MariaDB.
mysql -u root -p
Jakmile jste přihlášeni, vytvořte databázi pro PostfixAdmin pomocí následujícího příkazu. Pojmenoval jsem to postfixadmin
, ale můžete použít jakýkoli název, který chcete. (Nevynechávejte středník.)
vytvořit databázi postfixadmin;
Poté zadejte níže uvedený příkaz a vytvořte uživatele databáze pro PostfixAdmin. Tento příkaz také uděluje uživateli všechna oprávnění databáze postfixadmin. Nahraďte postfixadmin_password
s vaším preferovaným heslem. Pamatujte, že heslo by nemělo obsahovat #
znak, nebo se možná nebudete moci přihlásit později.
udělte všechna oprávnění na postfixadmin.* uživateli 'postfixadmin'@'localhost' identifikovanému pomocí 'postfixadmin_password';
Vypláchněte tabulku oprávnění, aby se změny projevily, a poté opusťte prostředí MariaDB.
vyprázdnit oprávnění;exit;
Krok 5:Konfigurace PostfixAdmin
Výchozí konfigurační soubor PostfixAdmin je config.inc.php
. Musíme vytvořit config.local.php
soubor a přidejte vlastní konfigurace.
Apache
sudo nano /var/www/postfixadmin/config.local.php
Nginx
sudo nano /usr/share/nginx/postfixadmin/config.local.php
Přidejte do souboru následující řádky, aby se PostfixAdmin mohl připojit k databázi MySQL/MariaDB. Nahraďte postfixadmin_password
se skutečným heslem PostfixAdmin vytvořeným v kroku 4.
Uložte a zavřete soubor. Všimněte si, že budeme používat schéma hesla BLF-CRYPT.
Krok 6:Vytvoření virtuálního hostitele Apache nebo konfiguračního souboru Nginx pro PostfixAdmin
Apache
Pokud používáte webový server Apache, vytvořte virtuálního hostitele pro PostfixAdmin.
sudo nano /etc/httpd/conf.d/postfixadmin.confDo souboru vložte následující text. Nahraďte
postfixadmin.example.com
se svým skutečným názvem domény a nezapomeňte pro něj nastavit záznam DNS A.ServerName postfixadmin.example.com DocumentRoot /var/www/postfixadmin/public/ ErrorLog /var/log/httpd/postfixadmin_error.log CustomLog /var/log/httpd/postfixadmin_access.log kombinovaný Možnosti FollowSymLinks AllowOverride All Možnosti FollowSymLinks MultiViews AllowOverride All Objednávka povolit, zakázat povolit ze všech Uložte a zavřete soubor. Znovu načtěte Apache, aby se změny projevily.
sudo systemctl reload httpdNyní byste měli být schopni vidět webového průvodce instalací PostfixAdmin na
http://postfixadmin.example.com/setup.php
.Nginx
Pokud používáte webový server Nginx, vytvořte virtuálního hostitele pro PostfixAdmin.
sudo nano /etc/nginx/conf.d/postfixadmin.confDo souboru vložte následující text. Nahraďte
postfixadmin.example.com
se svým skutečným názvem domény a nezapomeňte pro něj nastavit záznam DNS A.server { poslouchat 80; poslouchej [::]:80; název_serveru postfixadmin.example.com; root /usr/share/nginx/postfixadmin/public/; index index.php index.html; access_log /var/log/nginx/postfixadmin_access.log; error_log /var/log/nginx/postfixadmin_error.log; umístění / { try_files $uri $uri/ /index.php; } umístění ~ ^/(.+\.php)$ { try_files $uri =404; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; zahrnout /etc/nginx/fastcgi_params; }}Uložte a zavřete soubor. Poté otestujte konfiguraci Nginx.
sudo nginx -tPokud je test úspěšný, znovu načtěte Nginx, aby se změny projevily.
sudo systemctl reload nginxNyní byste měli být schopni vidět webového průvodce instalací PostfixAdmin na
http://postfixadmin.example.com/setup.php
.Krok 7:Nainstalujte požadované a doporučené moduly PHP
PostfixAdmin vyžaduje
php-imap
modul pro vytváření podsložek v poštovních schránkách, alephp-imap
není součástí výchozího repozitáře CentOS 8/RHEL 8, takže k instalaci tohoto modulu PHP musíme použít úložiště Remi.Nainstalujte Remi Repo.
instalace sudo dnf -y https://rpms.remirepo.net/enterprise/remi-release-8.rpmPoté resetujte streamy modulů PHP.
reset modulu sudo dnf phpPovolte
php:remi-7.4
stream modulu.modul sudo dnf povolí php:remi-7.4 -yPoté můžete spustit následující příkaz a nainstalovat PHP moduly požadované nebo doporučené PostfixAdminem.
instalace sudo dnf -y php-fpm php-imap php-mbstring php-mysqlnd php-gd php-opcache php-json php-curl php-zip php-xml php-bz2 php-intl php-gmpMusíme spustit následující příkaz, abychom řekli SELinuxu, aby povolil Apache ke spuštění kódu PHP prostřednictvím PHP-FPM.
sudo setsebool -P httpd_execmem 1Pokud používáte Nginx , upravte konfigurační soubor PHP-FPM:
nano /etc/php-fpm.d/www.confVe výchozím nastavení běží PHP-FPM jako
apache
uživatel. Protože používáte webový server Nginx, musíme jej změnit. Najděte následující dva řádky.user =apachegroup =apacheZměňte je na
user =nginxgroup =nginxUložte a zavřete soubor. Poté spusťte PHP-FPM.
sudo systemctl start php-fpmPovolit automatické spouštění při spouštění systému.
sudo systemctl povolit php-fpmRestartujte Apache nebo Nginx.
sudo systemctl restart httpdsudo systemctl restart nginxKrok 8:Povolení HTTPS
Pro šifrování HTTP provozu můžeme povolit HTTPS instalací bezplatného certifikátu TLS vydaného od Let’s Encrypt.
Pokud používáte Apache, spusťte tento příkaz pro získání a instalaci certifikátu TLS.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [e-mail chráněný] -d postfixadmin.example.comPokud používáte Nginx, spusťte následující příkaz k získání a instalaci certifikátu TLS.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [e-mail chráněný] -d postfixadmin.example.comKde:
--apache
:Použijte plugin Apache.--nginx
:Použijte plugin nginx.--agree-tos
:Souhlas se smluvními podmínkami.--redirect
:Vynutit HTTPS přesměrováním 301.--hsts
:Ke každé odpovědi HTTP přidejte záhlaví Strict-Transport-Security. Vynucení prohlížeče, aby pro doménu vždy používal TLS. Chrání před odstraněním SSL/TLS.--staple-ocsp
: Povoluje sešívání OCSP. Platná odpověď OCSP je přišita k certifikátu, který server nabízí během TLS.--email
:E-mail používaný pro registraci a kontakt pro obnovení.-d
za příznakem následuje seznam názvů domén oddělených čárkou. Můžete přidat až 100 názvů domén.
Certifikát by nyní měl být získán a automaticky nainstalován, což je indikováno níže uvedenými zprávami.
Krok 9:Vytvořte vlastní zásady SELinux pro webový server
Během instalace potřebuje PostfixAdmin přečíst konfigurační soubory Dovecot, aby vytvořil heslo. Ve výchozím nastavení SELinux neumožňuje webovému serveru číst konfigurační soubory Dovecot. Potřebujeme vytvořit vlastní SELinux politiku, která tuto akci umožní.
Nainstalujte požadované balíčky.
sudo dnf install binutils rpm-build setools-console policycoreutils-python3 policycoreutils-devel
Vygenerujte vlastní zásady pro httpd. (Pokud používáte Nginx, nahraďte httpd
pomocí nginx
.)
generování sudo sepolicy --init /usr/sbin/httpd
Upravte soubor pro vynucení typu.
sudo nano httpd.te
Přidejte následující řádek na konec tohoto souboru, aby Apache/Nginx mohl číst konfigurační soubory Dovecot.
dovecot_read_config(httpd_t)
Uložte a zavřete soubor. Poté nainstalujte nové zásady SELinux.
sudo ./httpd.sh
Nyní by měl být Apache/Nginx schopen číst konfigurační soubory Dovecot.
Pokud nevíte, co přidat do httpd.te
Pokud dojde k odmítnutí SELinuxu, spusťte následující příkaz.
sudo ausearch -m AVC -ts poslední | audit2allow -R
audit2allow
navrhne změny.
Krok 10:Povolte statistiky v Dovecot
PostfixAdmin potřebuje číst statistiky Dovecot. Upravte konfigurační soubor Dovecot.
sudo nano /etc/dovecot/conf.d/10-master.conf
Přidejte následující řádky na konec tohoto souboru. Pokud používáte Nginx, změňte apache
na nginx
.
service stats { unix_listener stats-reader { user =apache group =apache mode =0660}unix_listener stats-writer { user =apache group =apache mode =0660 }}
Uložte a zavřete soubor. Poté přidejte webový server do dovecot
skupina.
Apache
sudo gpasswd -a apache dovecot
NGinx
sudo gpasswd -a nginx dovecot
Restartujte Dovecot.
sudo systemctl restart dovecot
Krok 11:Dokončete instalaci ve webovém prohlížeči
Přejděte na postfixadmin.example.com/setup.php
ke spuštění webového průvodce nastavením. Nejprve musíte vytvořit heslo pro nastavení pro PostfixAdmin.
Po vytvoření hash hesla zobrazí PostfixAdmin řádek jako níže.
$CONF['setup_password'] ='db1b019982a6ba878bdc6bd923bef03e:4e29fdd341b570364064a5ad69652f3d8bee0bb4';
Musíte otevřít config.local.php
soubor.
Apache
sudo nano /var/www/postfixadmin/config.local.php
Nginx
sudo nano /usr/share/nginx/postfixadmin/config.local.php
Přidejte zobrazení řádků na stránce nastavení PostfixAdmin na konec souboru, jak je uvedeno níže.
Po uložení souboru musíte obnovit stránku nastavení PostfixAdmin a znovu zadat heslo pro nastavení a poté vytvořit účet správce. Pro účet správce prosím nepoužívejte e-mailovou adresu Gmail, Yahoo Mail nebo Microsoft, jinak se možná nebudete moci přihlásit později. Použijte e-mailovou adresu na vlastní doméně. E-mailovou adresu můžete vytvořit později v PostfixAdmin.
Po vytvoření účtu superadmin se můžete přihlásit do PostfixAdmin na postfixadmin.example.com/login.php
.
Pokud se při pokusu o vytvoření účtu superadmin zobrazí následující chyba,
Nelze zašifrovat heslo pomocí dovecotpw, podrobnosti naleznete v protokolu chyb
Je to proto, že uživatel webového serveru nemá oprávnění číst certifikát Let's Encrypt TLS. Chcete-li to opravit, spusťte následující dva příkazy k udělení oprávnění.
Apache
sudo setfacl -R -m u:apache:rx /etc/letsencrypt/live/sudo setfacl -R -m u:apache:rx /etc/letsencrypt/archive/
Nginx
sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/live/sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/archive/
Pokud se zobrazí následující chyba,
Neplatný dotaz:Zadaný klíč byl příliš dlouhý; maximální délka klíče je 1000 bajtů
Poté se musíte přihlásit k databázovému serveru MySQL/MariaDB jako root z příkazového řádku,
mysql -u root -p
a změňte výchozí řazení z utf8mb4_general_ci
na utf8_general_ci
.
MariaDB [(none)]> alter databáze postfixadmin collate ='utf8_general_ci';
Ukončete konzolu MySQL/MariaDB a znovu načtěte stránku setup.php.
Krok 12:Konfigurace Postfixu pro použití databáze MySQL/MariaDB
Ve výchozím nastavení Postfix doručuje e-maily pouze uživatelům s místním unixovým účtem. Aby bylo možné doručovat e-maily virtuálním uživatelům, jejichž informace jsou uloženy v databázi, musíme Postfix nakonfigurovat tak, aby používal domény virtuálních poštovních schránek.
Nejprve musíme přidat podporu MySQL map pro Postfix instalací postfix-mysql
balíček.
instalace sudo dnf postfix-mysql
Poté upravte hlavní konfigurační soubor Postfixu.
sudo nano /etc/postfix/main.cf
Přidejte následující řádky na konec tohoto souboru. (V textovém editoru Nano můžete stisknout Ctrl+W
a poté Ctrl+V
pro skok na konec souboru.)
virtual_mailbox_domains =proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cfvirtual_mailbox_maps =proxy:mysql:/etc/postfix/sql/mysql_virtual_virtual_mailbox_maps/scvirtual_maps_maps.clsali/asql_virtual_mailbox_maps.clsali.assali proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/aldocat_mainsqali.Kde:
virtual_mailbox_domains
ukazuje na soubor, který Postfixu řekne, jak vyhledat informace o doméně z databáze.virtual_mailbox_maps
ukazuje na soubory, které Postfixu řeknou, jak vyhledat e-mailové adresy v databázi.virtual_alias_maps
ukazuje na soubory, které Postfixu řeknou, jak vyhledávat aliasy v databázi.
Chceme používat dovecot k doručování příchozích e-mailů do úložiště zpráv virtuálních uživatelů, proto také přidejte následující řádek na konec tohoto souboru.
virtuální_transport =lmtp:unix:private/dovecot-lmtp
Uložte a zavřete soubor. Dále musíme vytvořit .cf
soubory jeden po druhém. Vytvořte adresář sql.
sudo mkdir /etc/postfix/sql/
Vytvořte mysql_virtual_domains_maps.cf soubor.
sudo nano /etc/postfix/sql/mysql_virtual_domains_maps.cf
Přidejte následující obsah. Nahraďte postfixadmin_password
s heslem postfixadmin, které jste nastavili v kroku 4.
user =postfixadminpassword =postfixadmin_passwordhosts =localhostdbname =postfixadminquery =VYBRAT doménu Z domény WHERE domain='%s' AND active ='1'#query =VYBRAT doménu FROM domény WHERE domain='%s'#volitelný dotaz, který se má použít, když předávání pro zálohování MX#query =VYBRAT doménu Z domény WHERE domain='%s' AND backupmx ='0' AND active ='1'#expansion_limit =100
Vytvořte soubor mysql_virtual_mailbox_maps.cf soubor.
sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
Přidejte následující obsah.
user =postfixadminpassword =postfixadmin_passwordhosts =localhostdbname =postfixadminquery =SELECT maildir FROM mailbox WHERE username='%s' AND active ='1'#expansion_limit =100
Vytvořte mysql_virtual_alias_domain_mailbox_maps.cf soubor.
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
Přidejte následující obsah.
user =postfixadminpassword =postfixadmin_passwordhosts =localhostdbname =postfixadminquery =SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain ='%d' a mailbox.username =CONCAT('%u', '@', alias_domain) .active =1 AND alias_domain.active='1'
Vytvořte soubor mysql_virtual_alias_maps.cf soubor.
sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf
Přidejte následující obsah.
user =postfixadminpassword =postfixadmin_passwordhosts =localhostdbname =postfixadminquery =SELECT goto FROM alias WHERE address='%s' AND active ='1'#expansion_limit =100
Vytvořte mysql_virtual_alias_domain_maps.cf
soubor.
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
Přidejte následující obsah.
user =postfixadminpassword =postfixadmin_passwordhosts =localhostdbname =postfixadminquery =SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain ='%d' a alias.address =CONCAT('%u', '@sget_main. alias_alias .active =1 AND alias_domain.active='1'
Vytvořte mysql_virtual_alias_domain_catchall_maps
soubor.
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
Přidejte následující obsah.
# zpracovává univerzální nastavení cílové-domainuser =postfixadminpassword =postfixadmin_passwordhosts =localhostdbname =postfixadminquery =SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain ='%d' a alias.address =CONCAT._domain target_domain) AND alias.active =1 AND alias_domain.active='1'
Protože databázová hesla jsou uložena v prostém textu, měla by být čitelná pouze pro uživatele Postfix a root, což se provádí provedením následujících dvou příkazů.
sudo chmod 0640 /etc/postfix/sql/*sudo setfacl -R -m u:postfix:rx /etc/postfix/sql/
Dále musíme změnit hodnotu mydestination
parametr v Postfixu. Zobrazení aktuální hodnoty:
postconf mydestination
Ukázkový výstup:
mydestination =linuxbabe.com, $myhostname, localhost.$mydomain, localhost
mydestination
obsahuje seznam názvů domén, které budou přijímat e-maily doručované na místní unixové účty. V části 1 jsme přidali název vrcholové domény (jako linuxbabe.com) do mydestination
. Vzhledem k tomu, že budeme používat virtuální poštovní schránku, musíme odstranit název vrcholové domény ze seznamu zadáním následujícího příkazu.
sudo postconf -e "mydestination =\$myhostname, localhost.\$mydomain, localhost"
Nyní znovu otevřete hlavní konfigurační soubor Postfixu.
sudo nano /etc/postfix/main.cf
Přidejte následující řádky na konec tohoto souboru.
virtual_mailbox_base =/var/vmailvirtual_minimum_uid =2000virtual_uid_maps =static:2000virtual_gid_maps =static:2000
První řádek definuje základní umístění souborů pošty. Zbývající 3 řádky definují, které ID uživatele a ID skupiny bude Postfix používat při doručování příchozích e-mailů do poštovní schránky. Používáme ID uživatele 2000 a ID skupiny 2000.
Uložte a zavřete soubor. Restartujte Postfix, aby se změny projevily.
sudo systemctl restart postfix
Dále musíme vytvořit uživatele s názvem vmail
s ID 2000 a skupinou s ID 2000.
sudo adduser vmail --system --uid 2000 --user-group --no-create-home
Vytvořte základní umístění pošty.
sudo mkdir /var/vmail/
Vytvořte vmail
jako vlastník.
sudo chown vmail:vmail /var/vmail/ -R
Potřebujeme také změnit kontext SELinuxu, aby do něj bylo možné zapisovat.
sudo chcon -t mail_spool_t /var/vmail/ -R
Krok 13:Nakonfigurujte Dovecot pro použití databáze MySQL/MariaDB
Potřebujeme také nakonfigurovat server Dovecot IMAP tak, aby se dotazoval na informace o uživatelích z databáze. Nejprve spusťte následující příkaz pro přidání podpory MySQL pro Dovecot.
instalace sudo dnf dovecot-mysql
Poté upravte 10-mail.conf soubor.
sudo nano /etc/dovecot/conf.d/10-mail.conf
V části 2 jsme použili následující mail_location
. E-mailové zprávy jsou uloženy pod Maildir
adresář v domovském adresáři každého uživatele.
umístění_mailu =maildir:~/Maildir
Protože nyní používáme doménu virtuální poštovní schránky, musíme povolit mail_home
pro virtuální uživatele přidáním následujícího řádku do souboru, protože virtuální uživatelé nemají ve výchozím nastavení domovské adresáře.
mail_home =/var/vmail/%d/%n
Uložte a zavřete soubor. Poté upravte soubor 10-auth.conf soubor.
sudo nano /etc/dovecot/conf.d/10-auth.conf
V části 2 jsme použili následující hodnotu pro auth_username_format
.
auth_username_format =%n
%n
Pokud by byla daná, doména by odpadla. Protože v části 2 jsme pro uživatelské jméno každé e-mailové adresy používali místní unixový účet, musíme použít %n
zahodit doménu, aby se uživatelé mohli přihlásit pomocí celé e-mailové adresy.
Nyní používáme domény virtuálních poštovních schránek, což znamená, že uživatelské jméno každé e-mailové adresy obsahuje doménovou část, takže musíme změnit auth_username_format
jak následuje. %u
nezruší doménu. To umožňuje uživatelům přihlásit se pomocí celé e-mailové adresy.
auth_username_format =%u
Odkomentujte následující řádek na konci souboru, aby Dovecot mohl vyhledávat informace o uživatelích z databáze.
!include auth-sql.conf.ext
Nyní pravděpodobně nechcete, aby místní uživatelé Unixu posílali e-maily bez registrace e-mailových adres v PostfixAdmin, poté zakomentujte následující řádek přidáním znaku # na začátek, takže Dovecot nebude dotazovat místní /etc/passwd
nebo /etc/shadow
soubor.
#!include auth-system.conf.ext
K odladění problémů s přihlášením může být užitečné přidat do tohoto souboru následující dva řádky. Chyby přihlášení by byly zaznamenány do /var/log/maillog
soubor. (Jakmile se uživatelé bez problémů přihlásí, můžete zakomentovat následující dva řádky.)
auth_debug =yesauth_debug_passwords =yes
Uložte a zavřete soubor.
Vytvořte dovecot-sql.conf.ext
soubor.
sudo nano /etc/dovecot/dovecot-sql.conf.ext
Zde je obsah, který byste měli mít. Nahraďte postfixadmin_password
s heslem postfixadmin, které jste nastavili v kroku 4.
driver =mysqlconnect =host=localhost dbname=postfixadmin user=postfixadmin password=postfixadmin_passworddefault_pass_scheme =BLF-CRYPTpassword_query =VYBERTE uživatelské jméno JAKO uživatele, heslo Z poštovní schránky WHERE uživatelské jméno ='%u' AND active='1'SELECT mail_queirry, =2000 AS uid, 2000 AS gid FROM mailbox WHERE username ='%u' AND active='1'iterate_query =SELECT username AS user FROM mailbox
Uložte a zavřete soubor. A restartujte Dovecot.
sudo systemctl restart dovecot
Když se uživatel pokusí přihlásit, Dovecot vygeneruje hash BLF-CRYPT z hesla zadaného uživatelem a poté jej porovná s heslem uloženým v databázi.
Krok 14:Přidejte doménu a poštovní schránky v PostfixAdmin
Přihlaste se do webového rozhraní PostfixAdmin jako správce. Klikněte na Domain List
a vyberte New Domain
přidat doménu. Můžete si vybrat, kolik aliasů a poštovních schránek je povoleno pro tuto doménu.
Poté klikněte na Virtual List
a vyberte Add Mailbox
pro přidání nové e-mailové adresy pro vaši doménu.
Nyní spusťte svého desktopového e-mailového klienta, jako je Mozilla Thunderbird, a přidejte poštovní účet. Pokud Thunderbird našel konfiguraci vašeho poštovního serveru jako níže, jednoduše klikněte na Hotovo a budete moci číst a odesílat e-maily.
Pokud Thunderbird nenašel konfiguraci vašeho poštovního serveru, klikněte na Ruční konfigurace tlačítko pro zadání údajů o vašem poštovním serveru.
- V části server příchozí pošty vyberte protokol IMAP, zadejte
mail.your-domain.com
jako název serveru zvolte port 143 a STARTTLS. Zvoltenormal password
jako metoda ověřování. - V odchozí části vyberte protokol SMTP, zadejte
mail.your-domain.com
jako název serveru zvolte port 587 a STARTTLS. Zvoltenormal password
jako metoda ověřování.
Nápověda :Můžete také použít port 993 se šifrováním SSL/TLS pro IMAP a port 465 se šifrováním SSL/TLS pro SMTP. Neměli byste ne použijte port 25 jako port SMTP v poštovních klientech pro odesílání odchozích e-mailů.
Nyní byste měli být schopni se připojit ke svému vlastnímu e-mailovému serveru a také odesílat a přijímat e-maily pomocí vašeho e-mailového klienta pro počítače!
Tipy pro odstraňování problémů
Obecně byste měli vždy zkontrolovat protokol pošty (/var/log/maillog
) na vašem poštovním serveru, když dojde k chybě. Následuje seznam konkrétních chyb a tipů pro odstraňování problémů.
Nelze se přihlásit z poštovních klientů
Pokud se nemůžete přihlásit k poštovnímu serveru ze stolního poštovního klienta, prohledejte svůj poštovní server a zjistěte, zda jsou porty otevřené. Všimněte si, že byste měli spustit následující příkaz z jiného počítače nebo serveru se systémem Linux. Pokud jej spustíte na svém poštovním serveru, budou porty vždy vypadat jako otevřené.
sudo nmap mail.vase-domena.com
A zkontrolujte, zda Dovecot běží.
systemctl status dovecot
Můžete také zkontrolovat protokol pošty (/var/log/maillog
), což vám může napovědět. Pokud se Dovecot nespustí, chyba nemusí být zaznamenána do /var/log/maillog
soubor, můžete spustit následující příkaz a zjistit, co je špatně.
sudo journalctl -eu dovecot
Pokud v protokolu pošty uvidíte následující chybu, je pravděpodobné, že jste v .cf
nenastavili správné heslo soubory pod /etc/postfix/sql/
adresář.
postfix/trivial-rewrite[28494]:varování:virtual_alias_domains:proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf:problém s vyhledáváním v tabulcepostfix/trivial-rewrite[28494]:warning:virtual_alias_domainPokud v protokolu pošty vidíte následující chybu, je to proto, že jste zapomněli přidat
mail_location = maildir:~/Maildir
v/etc/dovecot/conf.d/10-mail.conf
soubor.open(/var/mail/[email protected]) se nezdařilo:Oprávnění odepřeno (euid=2000(vmail) egid=2000(vmail) chybí +w perm:/var/mail, nejsme ve skupině 8( mail), adresář vlastněný 0:8 mode=0775Cloudflare DNS
As I said in part 1, if you use Cloudflare DNS service, you should not enable the CDN (proxy) feature when creating DNS A record and AAAA record for the hostname of your mail server. Cloudflare doesn’t support SMTP or IMAP proxy.
Relay Access Denied
If you see the “relay access denied ” error when trying to send emails from a mail client, it’s most likely that you use port 25 as the SMTP port in your mail client. As I said a while ago, you should use port 587 or 465 as the SMTP port in mail clients (Mozilla Thunberbird, Microsoft Outlook, etc) to submit outgoing emails. Port 25 should be used for SMTP server to SMTP server communications.
iOS Mail App
If you use the iOS Mail app to log into your mail server and encounter the following error.
You can try to fix it by enforcing SSL encryption, for both SMTP and IMAP.
Fun fact :It seems the iOS Mail app has difficulty in supporting STARTTLS on IMAP port 143, but it supports STARTTLS on the submission port 587.
Temporary Lookup Failure
If your mail server was working fine for some time, but suddenly you find the following error in the mail log,
Aug 25 20:25:24 mx postfix/trivial-rewrite[3313]:warning:virtual_alias_domains:proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf:table lookup problemAug 25 20:25:24 mx postfix/trivial-rewrite[3313]:warning:virtual_alias_domains lookup failureAug 25 20:25:24 mx postfix/submission/smtpd[3464]:NOQUEUE:reject:451 4.3.0 <[email protected]>:Temporary lookup failure; proto=ESMTPAug 25 20:25:24 mx postfix/submission/smtpd[3464]:Temporary lookup failureIt’s likely that your MariaDB/MySQL database stopped somehow. You can use the following command to check when your database server stopped.
sudo journalctl -eu mariadbnebo
sudo journalctl -eu mysqlA common cause for this situation is that your server is out-of-memory. Check if your server has enough memory.
htopnebo
free -mChange User Password in PostfixAdmin
Users can log into PostfixAdmin at
https://postfixadmin.example.com/users/login.php
, then change their passwords.Automatically Clean the Junk Folder and Trash Folder
To delete emails in Junk folder for all users, you can run
sudo doveadm expunge -u *@example.com mailbox Junk allTo delete emails in Trash folder for all users, run
sudo doveadm expunge -u *@example.com mailbox Trash allI think it’s better to clean emails that have been in the Junk or Trash folder for more than 2 weeks, instead of cleaning all emails.
sudo doveadm expunge -u *@example.com mailbox Junk savedbefore 2wThen add a cron job to automate the job.
sudo crontab -eAdd the following line to clean Junk and Trash folder every day
@daily doveadm expunge -u *@example.com mailbox Junk savedbefore 2w;doveadm expunge -u *@example.com mailbox Trash savedbefore 2wRestricting Access to Sendmail
By default, any local user can use the
sendmail
binary to submit outgoing emails. Now that your mail server is using virtual mailboxes, you might want to restrict access to thesendmail
binary to trusted local users only, so a malicious user can’t use it to send a large volume of emails to damage your mail server’s reputation. Upravte hlavní konfigurační soubor Postfixu.sudo nano /etc/postfix/main.cfAdd the following line to the end of this file, so only the root and www-data user can submit emails via sendmail. You can also add other usernames.
authorized_submit_users =root,www-dataUložte a zavřete soubor. Poté restartujte Postfix.
sudo systemctl restart postfixDalší krok
I hope this tutorial helped you install and use PostfixAdmin on CentOS 8/RHEL 8 to create virtual mailboxes. In part 4, I will show you how to set up SPF and DKIM with Postfix to improve email deliverability and in a future tutorial, I’m going to show you how to host multiple domains with PostfixAdmin.
If you want to access emails from a web browser, then I recommend Roundcube, which is a very popular and featured-rich open-source webmail client. As always, if you found this post useful, subscribe to our free newsletter to get more tips and tricks. Opatruj se 🙂
Část 4:Nastavení SPF a DKIM pomocí Postfixu na poštovním serveru CentOS 8/RHEL 8 CentOS 9 Stream – Příliš brzy na plnohodnotnou zábavu na plošeCent OS