Toto je starší verze dokumentu!


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

  1. 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
    
  2. 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á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
    );
    
  3. 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í data
    INSERT 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

  1. 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
  2. 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
  3. 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'
    
  4. restartujeme postfix
    service postfix restart
  5. 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
  6. 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í
  7. restartujeme postfix
    service postfix restart

Nastavení Dovecot

  1. 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
    
  2. zeditujeme hlavní konfigurační soubor /etc/dovecot/dovecot.conf do tohoto stavu dovecot.conf
  3. 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
  4. 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
  5. 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
    
  6. 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
    
  7. 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
    }
  8. 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';
    
  9. změníme vlastníka a práva kolem dovecot aplikace
    chown -R vmail:dovecot /etc/dovecot
    chmod -R o-rwx /etc/dovecot
  10. 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
  11. restartujeme dovecot
    service dovecot restart

Nastavení DKIM

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

example.com	1800	TXT	v=spf1 a ip4:ip_serveru -all
toto 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-python
do souboru /etc/postfix/master.cf doplníme na konec souboru
policyd-spf  unix  -       n       n       -       0       spawn
    user=policyd-spf argv=/usr/bin/policyd-spf
přidáme do /etc/postfix/main.cf řádek
policyd-spf_time_limit = 3600
a 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 postfix
service postfix restart

  • it/linux/mail_server.1454769093.txt.gz
  • Poslední úprava: 2016/02/06 15:31
  • autor: kourim