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
- 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