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

Nastavení Dovecot

  • it/linux/mail_server.1454748298.txt.gz
  • Poslední úprava: 2016/02/06 09:44
  • autor: kourim