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:
mailmap dovecot mailuser mailmap postfix mailuser mailmap root mailuser
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 mailuserpřihásíme se pod nového uživatele a vytvoříme databázi
psql -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
);
# 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');
cp /etc/postfix/main.cf /etc/postfix/main.cf.orig cp /etc/postfix/master.cf /etc/postfix/master.cf.orig
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_destinationuser = 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'
service postfix restart
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
service postfix restart
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
mail_location = maildir:/var/mail/vhosts/%d/%n ... mail_privileged_group = mail
ls -ld /var/mail drwxrwsr-x 2 root mail 4096 Mar 6 15:08 /var/mail
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
disable_plaintext_auth = yes auth_mechanisms = plain login #!include auth-system.conf.ext # zakomentovat tento řádek !include auth-sql.conf.ext # odkomentovat tento řádek
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}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';
chown -R vmail:dovecot /etc/dovecot chmod -R o-rwx /etc/dovecot
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
}ssl_cert = </etc/dovecot/dovecot.pem ssl_key = </etc/dovecot/private/dovecot.pem ssl = required
service dovecot restart
Nainstalujeme dkim
apt-get install opendkim opendkim-toolsnásledně přidáme postfix usera do skupiny opendkim
adduser postfix opendkim
https://www.linode.com/docs/email/postfix/configure-spf-and-dkim-in-postfix-on-debian-8
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áznam
example.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 kontrolu
apt-get install postfix-policyd-spf-pythondo souboru /etc/postfix/master.cf doplníme na konec souboru
policyd-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-spf
smtpd_recipient_restrictions =
...
reject_unauth_destination,
check_policy_service unix:private/policyd-spf,
...Restartujeme postfixservice postfix restart