===== Mail server ===== Jak nainstalovat základní mail server za použití postgresql (drží data o doménách a uživatelích), postfix (smtp, přijímání/odesílání emailů) a dovecot (zajišťuje připojení přes pop3/imap pro uživatele). apt-get install postfix postfix-pgsql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-pgsql Co je potřeba mít všechno připravené dopředu: * nainstalovanou Postgresql * nastaven hostname na serveru * vlastnit doménu se správně nastavenými DNS záznamy * nastaven reverzní DNS záznam ==== Nastavení Postgresql ==== - Je potřeba nastavit uživatele do souboru /etc/postgresql/vers.ion/main/pg_ident.confmailmap dovecot mailuser mailmap postfix mailuser mailmap root mailuser - Je potřeba vytvořit nového uživatele v databázisu postgresCREATE USER mailuser; REVOKE CREATE ON SCHEMA public FROM PUBLIC; REVOKE USAGE ON SCHEMA public FROM PUBLIC; GRANT CREATE ON SCHEMA public TO postgres; GRANT USAGE ON SCHEMA public TO postgres; CREATE DATABASE mailserver WITH OWNER mailuser; ještě je potřeba nastavit uživateli mailuser heslo\password mailuserpřihásíme se pod nového uživatele a vytvoříme databázipsql -U mailuser -d mailserverCREATE SEQUENCE seq_mail_domain_id START 1; CREATE SEQUENCE seq_mail_user_id START 1; CREATE SEQUENCE seq_mail_alias_id START 1; CREATE TABLE virtual_domains ( domain_id INT2 NOT NULL DEFAULT nextval('seq_mail_domain_id'), domain_name varchar(50) NOT NULL, PRIMARY KEY (domain_id) ); CREATE TABLE virtual_users ( user_id INT2 NOT NULL DEFAULT nextval('seq_mail_user_id'), domain_id INT2 NOT NULL, password varchar(106) NOT NULL, email varchar(100) NOT NULL, PRIMARY KEY (user_id), FOREIGN KEY (domain_id) REFERENCES virtual_domains(domain_id) ON DELETE CASCADE ); CREATE TABLE virtual_aliases ( alias_id INT2 NOT NULL DEFAULT nextval('seq_mail_alias_id'), domain_id INT2 NOT NULL, source varchar(100) NOT NULL, destination varchar(100) NOT NULL, PRIMARY KEY (alias_id), FOREIGN KEY (domain_id) REFERENCES virtual_domains(domain_id) ON DELETE CASCADE ); - nyní je potřeba naplnit databázi nějakými základními daty, nejprve si ukážeme, jak tvořit hesla pro emaily# doveadm pw -s sha512 -r 100 Enter new password: ... Retype new password: ... {SHA512}.............................................................== a vložíme do databáze základní dataINSERT INTO virtual_domains (domain_name) VALUES ('example.com'), ('hostname.example.com'), ('hostname'), ('localhost.example.com'); INSERT INTO virtual_users ( domain_id, password , email) VALUES ( '1', '{SHA512}.............................................................==', 'info@example.com'); ==== Nastavení Postfix ==== - vytvoříme zálohu všech konfiguračních souborů, kde budeme něco editovatcp /etc/postfix/main.cf /etc/postfix/main.cf.orig cp /etc/postfix/master.cf /etc/postfix/master.cf.orig - zeditujeme /etc/postfix/main.cf, aby se dostal do tohoto stavu {{:it:linux:postfix_main.txt|main.cf}} * nastavíme všechyn smtpd_* vlastnosti podle ukázky smtpd_tls_cert_file=/etc/dovecot/dovecot.pem smtpd_tls_key_file=/etc/dovecot/private/dovecot.pem smtpd_use_tls=yes smtpd_tls_auth_only = yes #Enabling SMTP for authenticated users, and handing off authentication to Dovecot smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination * všechny výskyty example.com přepíšeme na naší doménu * na řádku 44 přepíšeme hostname na server hostname - vytvoříme konfigurační soubory pro připojení na databázi, vyplníme uživatelské jméno a heslo zadané dříve user = mailuser password = mailuserpass hosts = 127.0.0.1 dbname = mailserver query = SELECT 1 FROM virtual_domains WHERE domain_name='%s' user = mailuser password = mailuserpass hosts = 127.0.0.1 dbname = mailserver query = SELECT 1 FROM virtual_users WHERE email='%s' user = mailuser password = mailuserpass hosts = 127.0.0.1 dbname = mailserver query = SELECT destination FROM virtual_aliases WHERE source='%s' user = mailuser password = mailuserpass hosts = 127.0.0.1 dbname = mailserver query = SELECT email FROM virtual_users WHERE email='%s' - restartujeme postfixservice postfix restart - nyní můžeme otestovat to, jestli postfix na nové konektory reaguje správněpostmap -q example.com pgsql:/etc/postfix/pgsql-virtual-mailbox-domains.cf postmap -q email@example.com pgsql:/etc/postfix/pgsql-virtual-mailbox-maps.cf postmap -q alias@example.com pgsql:/etc/postfix/pgsql-virtual-alias-maps.cf - nyní je potřeba upravit ještě /etc/postfix/master.cf, aby se dostal do tohoto stavu {{:it:linux:postfix_master.txt|master.cf}} * je potřeba odkomentovat řádek začínající submission a všechny -o navazující * je potřeba odkomentovat řádek začínající smtps a všechny -o navazující - restartujeme postfixservice postfix restart ==== Nastavení Dovecot ==== - vytvoříme zálohu všech konfiguračních souborů, kde budeme něco editovat cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig - zeditujeme hlavní konfigurační soubor /etc/dovecot/dovecot.conf do tohoto stavu {{:it:linux:dovecot_dovecot.txt|dovecot.conf}} - zeditujeme soubor /etc/dovecot/conf.d/10-mail.conf, který se stará o ukládání/získávání emailů z file systému, aby vypadal takto {{:it:linux:dovecot_10-mail.conf.txt|10-mail.conf}}mail_location = maildir:/var/mail/vhosts/%d/%n ... mail_privileged_group = mail - ověříme, aby nám seděli práva na /var/maills -ld /var/mail drwxrwsr-x 2 root mail 4096 Mar 6 15:08 /var/mail - vytvoříme si adresáře na ukládání emailu a přidělíme je nově vytvořenému uživateli vmailmkdir -p /var/mail/vhosts/example.com groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/mail chown -R vmail:vmail /var/mail - zeditujeme soubor /etc/dovecot/conf.d/10-auth.conf, který se stará authentikaci uživatelů, aby následující parametry měli tyto hodnotydisable_plaintext_auth = yes auth_mechanisms = plain login #!include auth-system.conf.ext # zakomentovat tento řádek !include auth-sql.conf.ext # odkomentovat tento řádek - zeditujeme souboru /etc/dovecot/conf.d/auth.sql.conf.extpassdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n } - zeditujeme /etc/dovecot/dovecot-sql.conf.ext, kde se drží informace o připojení na databázi, těmito hodnotamidriver = pgsql connect = host=localhost dbname=mailserver user=mailuser password=heslo default_pass_scheme = SHA512 password_query = SELECT email as user, password FROM virtual_users WHERE email='%u'; - změníme vlastníka a práva kolem dovecot aplikacechown -R vmail:dovecot /etc/dovecot chmod -R o-rwx /etc/dovecot - zeditujeme /etc/dovecot/conf.d/10-master.conf, kde se nastavují jaké protokoly a kde se používajíservice imap-login { inet_listener imap { port = 0 } inet_listener imaps { port = 993 ssl = yes } ... service pop3-login { inet_listener pop3 { port = 0 } inet_listener pop3s { port = 995 ssl = yes } ... } ... } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = 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 = #} } service auth { # auth_socket_path points to this userdb socket by default. It's typically # used by dovecot-lda, doveadm, possibly imap process, etc. Its default # permissions make it readable only by root, but you may need to relax these # permissions. Users that have access to this socket are able to get a list # of all usernames and get results of everyone's userdb lookups. unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = vmail #group = } # Postfix smtp-auth #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} # Auth process is run as this user. user = dovecot } service auth-worker { # Auth worker process is run as root by default, so that it can access # /etc/shadow. If this isn't necessary, the user should be changed to # $default_internal_user. user = vmail } - zeditujeme /etc/dovecot/conf.d/10-ssl.conf, kde se reší certifikáty, těmito vlastnostmissl_cert = - restartujeme dovecotservice dovecot restart ==== Nastavení DKIM ==== Nainstalujeme dkim apt-get install opendkim opendkim-tools následně přidáme postfix usera do skupiny opendkimadduser postfix opendkim https://www.linode.com/docs/email/postfix/configure-spf-and-dkim-in-postfix-on-debian-8 ==== Nastavení SPF ==== Nastavení SPF sestává za dvou kroků. Pokud chci, aby se ověřoval můj SPF jinde, je potřeba do DNS záznamů přídat speciální záznamexample.com 1800 TXT v=spf1 a ip4:ip_serveru -alltoto nastavení ovlivní to, že pokud bude špatně nastaven, tak ostatní servery budou označovat moje emaily jako spam. Druhý krok je kontrola SPF na vlastním serveru, aby se případně špatné emaily rovnou zahazovali. Nainstalujeme tedy doplněk na kontroluapt-get install postfix-policyd-spf-pythondo souboru /etc/postfix/master.cf doplníme na konec souborupolicyd-spf unix - n n - 0 spawn user=policyd-spf argv=/usr/bin/policyd-spfpřidáme do /etc/postfix/main.cf řádekpolicyd-spf_time_limit = 3600a doplníme do vlastnosti **smtpd_recipient_restrictions** na konec check_policy_service unix:private/policyd-spfsmtpd_recipient_restrictions = ... reject_unauth_destination, check_policy_service unix:private/policyd-spf, ...Restartujeme postfixservice postfix restart