[HOW-TO]Postfix+Courier+Saslautdh+MySQL+Quota+Virtul users

Awatar użytkownika
MrRobby
Moderator
Moderator
Posty: 398
Rejestracja: 21 lip 2006, 20:26
Płeć: Mężczyzna
Wersja Ubuntu: 15.10
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

[HOW-TO]Postfix+Courier+Saslautdh+MySQL+Quota+Virtul users

Post autor: MrRobby » 12 cze 2007, 11:58

Edit
aktualizacja 2007.06.12 11:59
najnowsza wersja zawsze tutaj -> http://www.mandrivalinux.eu/showthread.php?t=151005


Byłem zmuszony postawić swój serwer poczty na Ubuntu Serwer 7.04, także są to "moje" działające wypociny :) Pisze "moje" bo jest to poskładane z kilku how-to, zebrane do kupy i doprowadzone do stanu używalności :)

[center:10230a216b]Instalacja podstawowych pakietów[/center:10230a216b]
  1. Instalujemy potrzebne pakiety: Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

    Kod: Zaznacz cały

    sudo apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin
    
  2. Podczas instalacji system zada nam parę zapytań

    Kod: Zaznacz cały

    Create directories for web-based administration ? <-- No
    General type of configuration? <-- Internet Site
    Mail name? <-- cos.tam.pl
    SSL certificate required <-- Ok
    
[center:10230a216b]QUOTA[/center:10230a216b]
  1. Nakładanie łaty quota. Sama łata znajduje się się na stronie http://vda.sourceforge.net/VDA/. Sprawdzamy jaką mamy wersje postfix-a

    Kod: Zaznacz cały

    postconf -d | grep mail_version
    
    Znając wersję ściągamy odpowiedniego patcha oraz źródła postfix-a

    Kod: Zaznacz cały

    cd /usr/src
    wget http://vda.sourceforge.net/VDA/postfix-2.3.8-vda.patch.gz
    sudo apt-get source postfix
    sudo gunzip postfix-2.3.8-vda.patch.gz
    
  2. Instalujemy pakiety potrzebne do kompilowania

    Kod: Zaznacz cały

    sudo apt-get install build-essential dpkg-dev fakeroot debhelper libdb4.2-dev libgdbm-dev libldap2-dev libpcre3-dev libmysqlclient10-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch libcdb-dev libpq-dev
    
  3. Nakładamy łatę, a następnie budujemy nowe paczki postfix-a.

    Kod: Zaznacz cały

    cd postfix-2.3.8
    sudo patch -p1 < ../postfix-2.3.8-vda.patch
    sudo dpkg-buildpackage 
    
  4. Po skończonej kompilacji instalujemy nowo zbudowane pakiety

    Kod: Zaznacz cały

    cd ..
    sudo dpkg -i postfix_2.3.8-2_i386.deb postfix-mysql_2.3.8-2_i386.deb
    
[center:10230a216b]Przygotowanie MYSQL[/center:10230a216b]
  1. Standardowo MySQL jest instalowany bez hasła na root-a, dlatego musimy je jak najszybciej zmienić

    Kod: Zaznacz cały

    mysqladmin -u root password TWOJE_NOWE_HASLO
    
  2. Teraz tworzymy bazę danych, nazwijmy ją mail

    Kod: Zaznacz cały

    mysqladmin -u root -p create mail
    
  3. Następnie tworzymy tabele za pomocą gotowego skryptu sql.

    Kod: Zaznacz cały

    wget http://mrrobby.w.interia.pl/forum/how-to/postfix/baza.mail
    mysql -u root -p < mail.baza
    
    W skrypcie mamy podane domyślne hasło: mail_admin_password. Gdy je zmienimy to musimy to uwzględnić w następnych krokach.[list:10230a216b]
  4. Tabela DOMAIN składuje wirtualne domeny z których Postfix powinien odbierać pocztę np cos.tam.pl.
  5. Tablea FORWARDINGS jest tak naprawdę tabelą aliasów np przekazywanie wiadomości przychodzących do info@cos.tam.pl na service@cos.tam.pl
  6. Tabela USERS odpowiada za wirtualnych użytkowników: adres użytkownika w przypadku wirtualnych użytkowników jest identyczny jak login. Hasło jest w postaci zaszyfrowanej ( encrypted ), musimy o tym pamiętać dodając użytkowników. Pole quota odpowiada za wielkość skrzynki. Wielkość podawana jest w bajtach, domyślnie 10MB.
  7. Tabela TRANSPORT jest opcjonalna. Zezwala na przekazywanie wiadomości do innego serwera np. domain: cos.tam.pl przekazuj do transport: smtp:[1.2.3.4], gdzie 1.2.3.4 to IP serwera.
Dane w tabelach możemy dodawać za pomocą konsoli mysql lub np phpmyadmin. Osobiście preferuję tą 2 metodę. Za pomocą tegoż programu dodałem domenę cos.tam.pl oraz użytkownika test@cos.tam.pl z hasłem test. Jeśli wartość w polu quota ustawimy na 0 to skrzynka nie jest ograniczona za pomocą quota.[/list:o:10230a216b]
[center:10230a216b]Konfiguracja Postfix[/center:10230a216b]
  1. Edytujemy plik /etc/mysql/my.cnf i sprawdzamy czy mamy coś takiego

    Kod: Zaznacz cały

    bind-address = 127.0.0.1
    
    Jeśli brak takiego wpisu to go dodajemy a następnie restartujemy serwer mysql

    Kod: Zaznacz cały

    sudo /etc/init.d/mysql restart
    
  2. Sprawdzamy czy mysql nasłuchuje na 127.0.0.1

    Kod: Zaznacz cały

    netstat -tan |grep 127.0.0.1
    
    Po tym poleceniu powinniśmy dostać coś takiego.

    Kod: Zaznacz cały

    tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
    
    Jeśli mysql nasłuchuje to przechodzimy dalej.
  3. W tym momencie musimy utworzyć pliki do obsługi bazy. Jest ich 6. Jeśli zmieniłeś hasło do bazy to bądź w tym momencie konsekwentny:) Wszystkie pliki możecie ściągnąć z:

    Kod: Zaznacz cały

    wget http://mrrobby.w.interia.pl/forum/how-to/postfix/mysql-virtual_domains.cf
    wget http://mrrobby.w.interia.pl/forum/how-to/postfix/mysql-virtual_forwardings.cf
    wget http://mrrobby.w.interia.pl/forum/how-to/postfix/mysql-virtual_mailboxes.cf
    wget http://mrrobby.w.interia.pl/forum/how-to/postfix/mysql-virtual_email2email.cf
    wget http://mrrobby.w.interia.pl/forum/how-to/postfix/mysql-virtual_transports.cf
    wget http://mrrobby.w.interia.pl/forum/how-to/postfix/mysql-virtual_mailbox_limit_maps.cf
    
    Chyba że wolicie tworzyć każdy z osobna.
    /etc/postfix/mysql-virtual_domains.cf

    Kod: Zaznacz cały

    user = mail_admin
    password = mail_admin_password
    dbname = mail
    query = SELECT domain AS virtual FROM domains WHERE domain='%s'
    hosts = 127.0.0.1
    
    /etc/postfix/mysql-virtual_forwardings.cf

    Kod: Zaznacz cały

    user = mail_admin
    password = mail_admin_password
    dbname = mail
    query = SELECT destination FROM forwardings WHERE source='%s'
    hosts = 127.0.0.1
    
    /etc/postfix/mysql-virtual_mailboxes.cf

    Kod: Zaznacz cały

    user = mail_admin
    password = mail_admin_password
    dbname = mail
    query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',1),'/',
    SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
    hosts = 127.0.0.1
    
    /etc/postfix/mysql-virtual_email2email.cf

    Kod: Zaznacz cały

    user = mail_admin
    password = mail_admin_password
    dbname = mail
    query = SELECT email FROM users WHERE email='%s'
    hosts = 127.0.0.1
    
    /etc/postfix/mysql-virtual_transports.cf

    Kod: Zaznacz cały

    user = mail_admin
    password = 1
    dbname = mail
    query = SELECT transport FROM transport WHERE domain='%s'
    hosts = 127.0.0.1
    
    /etc/postfix/mysql-virtual_mailbox_limit_maps.cf

    Kod: Zaznacz cały

    user = mail_admin
    password = mail_admin_password
    dbname = mail
    query = SELECT quota FROM users WHERE email='%s'
    hosts = 127.0.0.1
    
  4. Gdy stworzymy pliki, to nadajemy im odpowiednie uprawnienia

    Kod: Zaznacz cały

    sudo chmod o= /etc/postfix/mysql-virtual_*.cf
    sudo chgrp postfix /etc/postfix/mysql-virtual_*.cf
    
  5. Następnie zakładamy użytkownika oraz katalog dla wiadomości

    Kod: Zaznacz cały

    sudo groupadd -g 5000 vmail
    sudo useradd -g vmail -u 5000 vmail -d /home/vmail -m
    
  6. Musimy skonfigurować Postfixa

    Kod: Zaznacz cały

    sudo postconf -e 'myhostname = cos.tam.pl'
    sudo postconf -e 'mydestination = localhost, localhost.localdomain'
    sudo postconf -e 'mynetworks = 127.0.0.0/8'
    sudo postconf -e 'virtual_alias_domains ='
    sudo postconf -e ' virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
    sudo postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
    sudo postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
    sudo postconf -e 'virtual_mailbox_base = /home/vmail'
    sudo postconf -e 'virtual_uid_maps = static:5000'
    sudo postconf -e 'virtual_gid_maps = static:5000'
    sudo postconf -e 'smtpd_sasl_auth_enable = yes'
    sudo postconf -e 'broken_sasl_auth_clients = yes'
    sudo postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
    sudo postconf -e 'smtpd_use_tls = yes'
    sudo postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'
    sudo postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'
    sudo postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'
    sudo postconf -e 'virtual_create_maildirsize = yes'
    sudo postconf -e 'virtual_mailbox_extended = yes'
    sudo postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf'
    sudo postconf -e 'virtual_mailbox_limit_override = yes'
    sudo postconf -e 'virtual_maildir_limit_message = "The user you are trying to reach is over quota."'
    sudo postconf -e 'virtual_overquota_bounce = yes'
    sudo postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'
    
    Domyślnie Postfix ma ustawioną pojemność skrzynki na 50MB z kolei wielkość wiadomości na 10MB. Zawsze możemy to bez problemu zmienić. Dane pokazywane są w bajtach. Gdy damy wartość 0 to wartość jest nieograniczona.
    mailbox_size_limit - wielkość skrzynki
    message_size_limit - wielkość przesyłki
    Po więcej opcji zapraszam do

    Kod: Zaznacz cały

    sudo postconf
    
  7. Po tym wszystkim musimy jeszcze stworzyć certyfikat SSL który jest potrzebny przy obsłudzeTLS:

    Kod: Zaznacz cały

    cd /etc/postfix
    sudo openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509
    
[center:10230a216b]Konfiguracja Saslauthd[/center:10230a216b]
  1. Wpierw tworzymy katalogi

    Kod: Zaznacz cały

    sudo mkdir -p /var/spool/postfix/var/run/saslauthd
    
  2. Następnie edytujemy /etc/default/saslauthd i dopisujemy

    Kod: Zaznacz cały

    START=yes
    PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"
    #ubuntu 6.06
    #PARAMS="-m /var/spool/postfix/var/run/saslauthd -r"
    #ubuntu 7.04
    OPTIONS="-m /var/spool/postfix/var/run/saslauthd -r"
    
  3. Następnie tworzymy plik /etc/pam.d/smtp. Plik powinien zawierać tylko 2 linijki. Można go ściągnąć z

    Kod: Zaznacz cały

    wget http://mrrobby.w.interia.pl/forum/how-to/postfix/smtp
    
    lub stworzyć samemu. Pamiętajmy o haśle!

    Kod: Zaznacz cały

    auth    required   pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
    account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
    
  4. Tworzymy /etc/postfix/sasl/smtpd.conf lub ściągamy z:

    Kod: Zaznacz cały

    wget http://mrrobby.w.interia.pl/forum/how-to/postfix/smtpd.conf
    
    Plik powinien mieć taką zawartość

    Kod: Zaznacz cały

    pwcheck_method: saslauthd
    mech_list: plain login
    allow_plaintext: true
    auxprop_plugin: mysql
    sql_hostnames: 127.0.0.1
    sql_user: mail_admin
    sql_passwd: mail_admin_password
    sql_database: mail
    sql_select: select password from users where email = '%u'
    
  5. Restartujemy Postfix oraz Saslauthd:

    Kod: Zaznacz cały

    sudo /etc/init.d/postfix restart
    sudo /etc/init.d/saslauthd restart
    
[center:10230a216b]Konfiguracja Courier[/center:10230a216b]
  1. Musimy wskazać Courier-owi by autoryzował nas przez MySQL. Otwieramy plik /etc/courier/authdaemonrc i zmieniamy jeden wpis

    Kod: Zaznacz cały

    authmodulelist="authmysql"
    
  2. Robimy kopie pliku /etc/courier/authmysqlrc

    Kod: Zaznacz cały

    sudo mv /etc/courier/authmysqlrc /etc/courier/authmysqlrc.backup
    
  3. Tworzymy nowy plik /etc/courier/authmysqlrc

    Kod: Zaznacz cały

    MYSQL_SERVER localhost
    MYSQL_USERNAME mail_admin
    MYSQL_PASSWORD mail_admin_password
    MYSQL_PORT 0
    MYSQL_DATABASE mail
    MYSQL_USER_TABLE users
    MYSQL_CRYPT_PWFIELD password
    MYSQL_UID_FIELD 5000
    MYSQL_GID_FIELD 5000
    MYSQL_LOGIN_FIELD email
    MYSQL_HOME_FIELD "/home/vmail"
    MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
    MYSQL_QUOTA_FIELD quota
    
  4. Jeszcze tylko restart usług

    Kod: Zaznacz cały

    sudo /etc/init.d/courier-authdaemon restart
    sudo /etc/init.d/courier-imap restart
    sudo /etc/init.d/courier-imap-ssl restart
    sudo /etc/init.d/courier-pop restart
    sudo /etc/init.d/courier-pop-ssl restart
    
    i możemy przejść do testowania.
  5. Wpisujemy polecenie

    Kod: Zaznacz cały

    telnet localhost pop3
    
    Jeśli wszystko działa prawidłowo, to powinniśmy dostać podobny komunikat

    Kod: Zaznacz cały

    telnet localhost pop3
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    +OK Hello there.
    
    By z tego wyjść wpisz quit
  6. Następnie modyfikujemy /etc/aliases, gdzie możemy ustawić adres postmastera. Możemy również ustawić by @ do root-a były wysyłane na skrzynkę postmastera. Gdy jesteś administratorem serwera to napewno ci sie przyda.

    Kod: Zaznacz cały

    root:   postmaster
    postmaster: [email]postmaster@cos.tam.pl[/email]
    
    Gdy zrobisz zmiany w pliku z aliasami, to musisz jeszcze uruchomić

    Kod: Zaznacz cały

    sudo newaliases
    
    celem przeładowania aliasów.
  7. Przeładowujemy Postfix

    Kod: Zaznacz cały

    /etc/init.d/postfix restart
    
[center:10230a216b]Test Postfix[/center:10230a216b]
  1. By zobaczyć czy Postfix jest gotowy do pracy z SMTP-AUTH a TLS uruchom

    Kod: Zaznacz cały

    telnet localhost 25
    
  2. Gdy nawiążesz połączenie wydaj następujące polecenie

    Kod: Zaznacz cały

    ehlo localhost
    
    Odpowiedzią powinno być coś podobnego

    Kod: Zaznacz cały

    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 cos.tam.pl ESMTP Postfix (Ubuntu)
    ehlo localhost
    250-cos.tam.pl
    250-PIPELINING
    250-SIZE 51200000
    250-VRFY
    250-ETRN
    250-STARTTLS
    250-AUTH LOGIN PLAIN
    250-AUTH=LOGIN PLAIN
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250 DSN
    
    Jeśli widzisz coś podobnego to serwer działa prawidłowo. Polecenie quit pozwoli przerwać sesje telnet
Od tej pory powinieneś mieć pracujący przez TLS serwer smtp, pop3 jak i imap z którego to korzystam na co dzień.

[center:10230a216b]Zakładanie użytkowników[/center:10230a216b]
  1. Do zakładania polecam phpmyadmin.
  2. Jeśli jeszcze tego nie zrobiliśmy, to w tabeli DOMAINS dodajemy naszą domene. W naszym przypadku: cos.tam.pl
  3. W tabeli USERS dodajemyużytkownika:
    email: test@cos.tam.pl
    password: tes
    Musisz pamiętać by przy dodawaniu hasła w polu funkcja zaznaczyć ENCRYPT!
  4. W katalogu /home/vmail zakładamy katalog z nazwą domeny

    Kod: Zaznacz cały

    sudo mkdir /home/vmail/cos.tam.pl
    
  5. Następnie zakładamy katalog użytkownikowi i ustawiamy prawa dla konta vmail

    Kod: Zaznacz cały

    cd /home/vmail/cos.tam.pl
    sudo maildirmake test
    sudo chown -R vmail:vmail /home/vmail/cos.tam.pl
    
[center:10230a216b]Zakończenie[/center:10230a216b]
Nie pozostaje ci nic innego jak skonfigurować jakiegoś klienta pocztowego i testować czy wszystko działa. Podczas testów proponuje mieć otwarte w tle logi z serwera by widzieć wszystko co się dzieje na bieżąco.

Kod: Zaznacz cały

tail -f /var/log/mail.log
Mail.log prawdę ci powie:)

PS. POL_ED thx za poprawę kilku literówek
Pozdrawiam MrRobby

BTC: 1AVuTQRLNC2Ut2cd2pekWXZhhc1rzBbXNr
LTC: Lei3u3qCTaHrBnabG6VugeUeTVn8TsLTXe
ODPOWIEDZ

Wróć do „Software-Sieć”