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]
- 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
- 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
- Nakładanie łaty quota. Sama łata znajduje się się na stronie http://vda.sourceforge.net/VDA/. Sprawdzamy jaką mamy wersje postfix-a
Znając wersję ściągamy odpowiedniego patcha oraz źródła postfix-a
Kod: Zaznacz cały
postconf -d | grep mail_version
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
- 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
- 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
- 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
- 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
- Teraz tworzymy bazę danych, nazwijmy ją mail
Kod: Zaznacz cały
mysqladmin -u root -p create mail
- Następnie tworzymy tabele za pomocą gotowego skryptu sql.
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]
Kod: Zaznacz cały
wget http://mrrobby.w.interia.pl/forum/how-to/postfix/baza.mail mysql -u root -p < mail.baza
- Tabela DOMAIN składuje wirtualne domeny z których Postfix powinien odbierać pocztę np cos.tam.pl.
- Tablea FORWARDINGS jest tak naprawdę tabelą aliasów np przekazywanie wiadomości przychodzących do info@cos.tam.pl na service@cos.tam.pl
- 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.
- 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.
[center:10230a216b]Konfiguracja Postfix[/center:10230a216b]
- Edytujemy plik /etc/mysql/my.cnf i sprawdzamy czy mamy coś takiego
Jeśli brak takiego wpisu to go dodajemy a następnie restartujemy serwer mysql
Kod: Zaznacz cały
bind-address = 127.0.0.1
Kod: Zaznacz cały
sudo /etc/init.d/mysql restart
- Sprawdzamy czy mysql nasłuchuje na 127.0.0.1
Po tym poleceniu powinniśmy dostać coś takiego.
Kod: Zaznacz cały
netstat -tan |grep 127.0.0.1
Jeśli mysql nasłuchuje to przechodzimy dalej.Kod: Zaznacz cały
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
- 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:
Chyba że wolicie tworzyć każdy z osobna.
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
/etc/postfix/mysql-virtual_domains.cf/etc/postfix/mysql-virtual_forwardings.cfKod: 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_mailboxes.cfKod: 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_email2email.cfKod: 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_transports.cfKod: 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_mailbox_limit_maps.cfKod: Zaznacz cały
user = mail_admin password = 1 dbname = mail query = SELECT transport FROM transport WHERE domain='%s' hosts = 127.0.0.1
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
- 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
- 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
- Musimy skonfigurować Postfixa
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.
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'
mailbox_size_limit - wielkość skrzynki
message_size_limit - wielkość przesyłki
Po więcej opcji zapraszam doKod: Zaznacz cały
sudo postconf
- 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
- Wpierw tworzymy katalogi
Kod: Zaznacz cały
sudo mkdir -p /var/spool/postfix/var/run/saslauthd
- 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"
- Następnie tworzymy plik /etc/pam.d/smtp. Plik powinien zawierać tylko 2 linijki. Można go ściągnąć z
lub stworzyć samemu. Pamiętajmy o haśle!
Kod: Zaznacz cały
wget http://mrrobby.w.interia.pl/forum/how-to/postfix/smtp
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
- Tworzymy /etc/postfix/sasl/smtpd.conf lub ściągamy z:
Plik powinien mieć taką zawartość
Kod: Zaznacz cały
wget http://mrrobby.w.interia.pl/forum/how-to/postfix/smtpd.conf
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'
- Restartujemy Postfix oraz Saslauthd:
Kod: Zaznacz cały
sudo /etc/init.d/postfix restart sudo /etc/init.d/saslauthd restart
- Musimy wskazać Courier-owi by autoryzował nas przez MySQL. Otwieramy plik /etc/courier/authdaemonrc i zmieniamy jeden wpis
Kod: Zaznacz cały
authmodulelist="authmysql"
- Robimy kopie pliku /etc/courier/authmysqlrc
Kod: Zaznacz cały
sudo mv /etc/courier/authmysqlrc /etc/courier/authmysqlrc.backup
- 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
- Jeszcze tylko restart usług
i możemy przejść do testowania.
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
- Wpisujemy polecenie
Jeśli wszystko działa prawidłowo, to powinniśmy dostać podobny komunikat
Kod: Zaznacz cały
telnet localhost pop3
By z tego wyjść wpisz quitKod: Zaznacz cały
telnet localhost pop3 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK Hello there.
- 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.
Gdy zrobisz zmiany w pliku z aliasami, to musisz jeszcze uruchomić
Kod: Zaznacz cały
root: postmaster postmaster: [email]postmaster@cos.tam.pl[/email]
celem przeładowania aliasów.Kod: Zaznacz cały
sudo newaliases
- Przeładowujemy Postfix
Kod: Zaznacz cały
/etc/init.d/postfix restart
- By zobaczyć czy Postfix jest gotowy do pracy z SMTP-AUTH a TLS uruchom
Kod: Zaznacz cały
telnet localhost 25
- Gdy nawiążesz połączenie wydaj następujące polecenie
Odpowiedzią powinno być coś podobnego
Kod: Zaznacz cały
ehlo localhost
Jeśli widzisz coś podobnego to serwer działa prawidłowo. Polecenie quit pozwoli przerwać sesje telnetKod: 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
[center:10230a216b]Zakładanie użytkowników[/center:10230a216b]
- Do zakładania polecam phpmyadmin.
- Jeśli jeszcze tego nie zrobiliśmy, to w tabeli DOMAINS dodajemy naszą domene. W naszym przypadku: cos.tam.pl
- 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! - W katalogu /home/vmail zakładamy katalog z nazwą domeny
Kod: Zaznacz cały
sudo mkdir /home/vmail/cos.tam.pl
- 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
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
PS. POL_ED thx za poprawę kilku literówek