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

  • it/linux/mail_server.1454753525.txt.gz
  • Poslední úprava: 2016/02/06 11:12
  • autor: kourim