V tomto článku se dozvíte, jak nastavit Ubuntu server jako mailový server. Postfix (SMTP) bude kontrolovat uživatele v MySQL databázi, pro poštovní schránky bude využit Dovecot (POP3 i IMAP).
Předtím, než budete pokračovat, si připravte SSL certifikát – návod. Ten je nutný pro zabezpečené odesílání e-mailu, jak popisuji tady.
SSL certifikát musí obsahovat stejné doménové jméno, jako bude Postfix používat – toto jméno lze nastavit v konfiguraci. Nemusí proto být stejné jako to vypsané příkazem hostname -f.
Předpokládám, že máte nainstalovaný a funkční MySQL server.
Ostatní balíčky nainstalujte pomocí příkazu:
apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql dovecot-managesieved opendmarc spamassassin clamav clamav-daemon amavisd-new sqlgrey arj bzip2 cabextract cpio file gzip nomarch pax rar unrar unzip zip pyzor razor libdbi-perl libdbd-mysql-perl dovecot-sieve amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl libdbd-mysql-perl postgrey opendkim opendkim-tools postfix-policyd-spf-python postfix-pcre
Při instalaci budete vyzváni, abyste nakonfigurovali Postfix pomocí průvodce. V tomto průvodci zvolte druhou možnost shora (internetový server). Není to však důležité, protože konfiguraci upravíme později ručně.
Je potřeba vytvořit a nastavit uživatele. Použijte příkazy:
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/mail adduser clamav amavis adduser amavis clamav
Vytvořte databázi a uživatele, který bude využit pouze pro postfix. V tomto návodu se databáze jmenuje mailserver. Nahraďte 3* heslem.
CREATE USER 'mailserver'@'localhost' IDENTIFIED BY '***'; GRANT USAGE ON *.* TO 'mailserver'@'localhost' IDENTIFIED BY '***' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; CREATE DATABASE IF NOT EXISTS `mailserver`; GRANT ALL PRIVILEGES ON `mailserver`.* TO 'mailserver'@'localhost';
Použijte následující SQL příkazy, pomocí kterých vytvoříte tabulky:
CREATE TABLE IF NOT EXISTS `virtual_aliases` ( `id` int(11) NOT NULL AUTO_INCREMENT, `domain_id` int(11) NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), KEY `domain_id` (`domain_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `virtual_domains` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `virtual_users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `domain_id` int(11) NOT NULL, `password` varchar(500) NOT NULL, `email` varchar(100) NOT NULL, `active` tinyint(1) NOT NULL DEFAULT '1', PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), KEY `domain_id` (`domain_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `virtual_aliases` ADD CONSTRAINT `virtual_aliases_ibfk_1` FOREIGN KEY (`domain_id`) REFERENCES `virtual_domains` (`id`) ON DELETE CASCADE; ALTER TABLE `virtual_users` ADD CONSTRAINT `virtual_users_ibfk_1` FOREIGN KEY (`domain_id`) REFERENCES `virtual_domains` (`id`) ON DELETE CASCADE;
Stáhněte si následující soubory a obsah z nich vložte do odpovídajícího souboru na serveru.
main.cf – uložte do /etc/postfix/main.cf
V main.cf přepište parametr myhostname na vaše plné doménové jméno, mynetworks kromě lokálního počítače obsahují IP adresy, ze kterých server přijímá e-maily bez ověření (přihlášení uživatele). relayhost je nyní zakázaná a povolit je třeba jen v případě, že váš poskytoval zakazuje odchozí SMTP port 25/tcp – to je častá praxe kvůli boji proti spamu.
Upravte cesty k certifikátům a k privátnímu klíči – parametry ssl_cert, ssl_key a ssl_ca. Tyto parametry jsou proměnnými, jsou použité na více místech, měnit je však musíte jen na tomto jednom místě. Jako ssl_ca certifikát použijte tento (odkaz).
master.cf – uložte do /etc/postfix/master.cf
V tomto souboru nejsou třeba žádné úpravy.
Vytvořte /etc/postfix/header_checks – obsah souboru můžete použít například odtud.
Vytvořte /etc/postfix/rbl_override – v tomto souboru se určuje, kdo má k Postfixu přístup – více na http://www.postfix.org/access.5.html . Po úpravě musíte použít příkaz postmap /etc/postfix/rbl_override .
V adresáři postfixu /etc/postfix vytvořte následující 4 soubory a vložte do nich odpovídající obsah (bez prvního == řádku). Nahraďte všude user, password a dbname vašimi údaji.
==> mysql-sasl-password-maps.cf <== user = mailserver password = heslo hosts = 127.0.0.1 dbname = mailserver query = SELECT password FROM virtual_users WHERE email='%u' LIMIT 1
==> mysql-virtual-alias-maps.cf <== user = mailserver password = heslo hosts = 127.0.0.1 dbname = mailserver query = SELECT destination FROM virtual_aliases WHERE source='%s'
==> mysql-virtual-mailbox-domains.cf <== user = mailserver password = heslo hosts = 127.0.0.1 dbname = mailserver query = SELECT 1 FROM virtual_domains WHERE name='%s'
==> mysql-virtual-mailbox-maps.cf <== user = mailserver password = heslo hosts = 127.0.0.1 dbname = mailserver query = SELECT 1 FROM virtual_users WHERE email='%s'
Do souboru /etc/dovecot/dovecot.conf přidejte parametr protocols a případně odkomentujte (změňte) login_greeting:
protocols = imap pop3 lmtp login_greeting = Dovecot ready.
Upravte soubor /etc/dovecot/dovecot-sql.conf.ext – vložte obsah (nahraďte údaje pro připojení do MySQL):
driver = mysql connect = host=127.0.0.1 dbname=mailserver user=mailserver password=heslo default_pass_scheme = SHA512-CRYPT password_query = SELECT email as user, password, 5000 as userdb_uid, 5000 as userdb_gid FROM virtual_users WHERE email='%u' and active = '1'
Nyní musíte upravit některé soubory z adresáře /etc/dovecot/conf.d.
Ponechte jejich obsah, odkomentujte a upravte jen uvedené parametry:
10-auth.conf
disable_plaintext_auth = no auth_mechanisms = plain login !include auth-sql.conf.ext (zakomentovat ostatní !include kolem)
10-logging.conf
log_path = /var/vmail/dovecot-deliver.log
10-mail.conf
mail_location = maildir:/var/vmail/%d/%n mail_privileged_group = vmail mail_uid = 5000 mail_gid = 5000 first_valid_gid = 5000 last_valid_gid = 5000 first_valid_uid = 5000 last_valid_uid = 5000
10-master.conf
service imap-login { inet_listener imap { port = 143 } inet_listener imaps { port = 993 ssl = yes } } service pop3-login { inet_listener pop3 { port = 110 } inet_listener pop3s { port = 995 ssl = yes } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } } service auth { unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = vmail group = vmail } } service auth-worker { user = vmail } service dict { } }
10-ssl.conf
ssl = yes ssl_cert = </etc/postfix/ssl/certifikat.crt ssl_key = </etc/postfix/ssl/privatni.key ssl_ca = </etc/postfix/ssl/startssl-ca-bundle.pem ssl_verify_client_cert = no auth_ssl_require_client_cert = no ssl_parameters_regenerate = 0
15-lda.conf – obsah sekce protocol lda:
postmaster_address = postmaster@domena.cz mail_plugins = sieve auth_socket_path = /var/run/dovecot/auth-userdb log_path = /var/vmail/dovecot-deliver.log
20-pop3.conf – přidejte do sekce pop3:
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
auth-sql.conf.ext
userdb { driver = static args = uid=5000 gid=5000 home=/var/mail/vhosts/%d/%n allow_all_users=yes }
/etc/default/spamassassin
ENABLED=1 CRON=1
Není třeba nic upravovat.
Amavis je software předávající e-maily mezi Postfixem a jednotlivými content-filtery, tedy SpamAssassinem a ClamAV. Pro povolení antispamu i antiviru odkomentujte obě @bypass věty v souboru /etc/amavis/conf.d/15-content_filter_mode .
Upravte soubor /etc/amavis/conf.d/50-user a vložte mezi use strict; a 1 následující kód (nezapomeňte nastavit správné údaje pro připojení do MySQL):
$max_servers = 3; $sa_tag_level_deflt = undef; $sa_spam_subject_tag='***SPAM***'; $sa_tag2_level_deflt = 7; $final_spam_destiny=D_PASS; @lookup_sql_dsn = ( ['DBI:mysql:database=mailserver;host=127.0.0.1;port=3306', 'mailserver', 'heslo']); $sql_select_policy = 'SELECT name from virtual_domains WHERE CONCAT("@",name) IN (%k)'; $log_level = 2;
Pro smazání e-mailu, pokud je označen za spam, změňte v souboru /etc/amavis/conf.d/20-debian_defaults parametr na hodnotu:
$final_spam_destiny = D_DISCARD;
chown -R vmail:dovecot /etc/dovecot chmod -R o-rwx /etc/dovecot chown -R root:mail /var/mail mkdir -p /var/vmail chown -R vmail:vmail /var/vmail mkdir -p /etc/postfix/tlscache chown -R root:root /etc/postfix chmod 700 /etc/postfix -R chown vmail:vmail /var/vmail/dovecot-deliver.log chmod 700 /var/vmail/dovecot-deliver.log usermod -a -G amavis clamav
AllowSupplementaryGroups false -> true
in /etc/clamav/clamd.conf
INSERT INTO `virtual_domains` (`name`) VALUES ('domena.cz'); INSERT INTO `virtual_users` (`domain_id`, `password` , `email`) VALUES ('1', ENCRYPT('heslo', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))) , 'uzivatel@domena.cz');
V tabulce virtual_aliases můžete nastavit, co se stane s e-mailem po příchodu na váš server – kam zamíří. Můžete ho jak uložit do lokální schránky uživatele, tak ho (i zároveň) přeposlat na jinou adresu (i externí).
-- Vše do domény @domena.cz se přesměruje na adresu david@domena.cz INSERT INTO `virtual_aliases` (`domain_id`, `source`, `destination`) VALUES ('1', '@domena.cz', 'david@domena.cz'); -- Vše směrované na david@domena.cz se přepošle na david@gmail.com INSERT INTO `virtual_aliases` (`domain_id`, `source`, `destination`) VALUES ('1', 'david@domena.cz', 'david@gmail.com'); -- Zároveň se vše směrované na david@domena.cz uloží do lokální schránky uživatele (david@domena.cz) INSERT INTO `virtual_aliases` (`domain_id`, `source`, `destination`) VALUES ('1', 'david@domena.cz', 'david@domena.cz');
-A INPUT -p tcp --dport 25 -j ACCEPT -A INPUT -p tcp --dport 110 -j ACCEPT -A INPUT -p tcp --dport 143 -j ACCEPT -A INPUT -p tcp --dport 465 -j ACCEPT -A INPUT -p tcp --dport 585 -j ACCEPT -A INPUT -p tcp --dport 993 -j ACCEPT -A INPUT -p tcp --dport 995 -j ACCEPT -A INPUT -p tcp --dport 587 -j ACCEPT
sudo service postfix restart sudo service dovecot restart sudo service sqlgrey restart sudo service opendmarc restart sudo service spamassassin restart sudo service clamav-daemon restart sudo service amavis restart update-rc.d postfix enable update-rc.d dovecot enable update-rc.d sqlgrey enable update-rc.d opendmarc enable update-rc.d spamassassin enable update-rc.d clamav-daemon enable update-rc.d amavis enable
V tuto chvíli máte nastavený mailserver, který kontroluje příchozí e-mail na spam proti veřejným databázím, směruje e-maily podle zadaných pravidel, která jsou uložená v MySQL databázi.