Toto je starší verze dokumentu!
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.conf
mailmap dovecot mailuser mailmap postfix mailuser mailmap root mailuser
- Je potřeba vytvořit nového uživatele v databázi
su postgres
CREATE 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 mailuser
přihásíme se pod nového uživatele a vytvoříme databázipsql -U mailuser -d mailserver
CREATE 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 editovat
cp /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 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 postfix
service 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 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 postfix
service 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 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 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/mail
ls -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 vmail
mkdir -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 hodnoty
disable_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.ext
passdb { 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 hodnotami
driver = 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 aplikace
chown -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 }<sxh> - zeditujeme /etc/dovecot/conf.d/10-ssl.conf, kde se reší certifikáty<sxh bash>, těmito vlastnostmi<sxh bash>ssl_cert = </etc/dovecot/dovecot.pem ssl_key = </etc/dovecot/private/dovecot.pem ssl = required - restartujeme dovecot
service dovecot restart