• Uncategorized

Instalacja systemu pocztowego na Ubuntu

Zakładam, że system jest zainstalowany i posiada podstawową konfigurację z uruchomioną usługą SSH. Po zalogowaniu przystępujemy do instalacji pakietu dovecot-postfix, który opisany jest jako w pełni funkcjonalny serwer pocztowy:

drfugazi@charr:~% sudo aptitude install dovecot-postfix
[sudo] password for drfugazi:
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności
Odczyt informacji o stanie... Gotowe
Reading extended state information
Initializing package states... Gotowe
The following NEW packages will be installed:
  dovecot-common{a} dovecot-imapd{a} dovecot-pop3d{a} dovecot-postfix
0 packages upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 7957kB of archives. After unpacking 15,1MB will be used.
Do you want to continue? [Y/n/?] y
...
Konfigurowanie dovecot-common (1:1.2.9-1ubuntu6.1) ...
Creating config file /etc/dovecot/dovecot.conf with new version
Creating config file /etc/dovecot/dovecot-ldap.conf with new version
Creating config file /etc/dovecot/dovecot-sql.conf with new version

Sprawdzamy czy działa serwer Dovecot i czy da się połączyć do serwera IMAP z localhosta:

drfugazi@charr:~% ps axu|grep dovecot
root     13772  0.0  0.0   2320   700 ?        Ss   Nov19   0:00 /usr/sbin/dovecot -c /etc/dovecot/dovecot.conf
root     13775  0.0  0.2  10208  2536 ?        S    Nov19   0:00 dovecot-auth
...
drfugazi@charr:~% telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
a LOGOUT
* BYE Logging out
a OK Logout completed.
Connection closed by foreign host.

Jeśli da się połączyć z localhosta to spróbujmy z zewnątrz:

drfugazi@neptun:~% telnet example.com 143
Trying 212.106.X.X...
telnet: Unable to connect to remote host: Connection timed out

Sprawdźmy czy Dovecot słucha na zewnętrznym interfejsie:

drfugazi@charr:~% netstat -an|grep 143
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN

Słucha na wszystkich interfejsach, dodajmy więc regułę, która wpuszcza na port 143 do iptables:

sudo iptables -I INPUT -i eth0 -p tcp --syn --dport 143 -d 212.106.X.X -j ACCEPT

Ponawiamy próbę połączenia z zewnątrz:

drfugazi@neptun:~% telnet example.com 143
Trying 212.106.X.X...
Connected to example.com.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS LOGINDISABLED] Dovecot ready.
a LOGOUT
* BYE Logging out
a OK Logout completed.
Connection closed by foreign host.

Wygląda na to, że działa. Można zabrać się za serwer SMTP, tutaj użyję Postfixa. Najpierw sprawdzam jak wygląda master.cf:

drfugazi@charr:~% cd /etc/postfix
drfugazi@charr:/etc/postfix% sudo vi master.cf
[sudo] password for drfugazi:

Szczególnie interesuje nas część dotycząca submission oraz smtps, jeśli jest wykomentowana, to należy włączyć oba te bloki. Sprawdźmy przy okazji czy odpowiednie wpisy znajdują się w /etc/services:

drfugazi@charr:/etc/postfix% grep submis /etc/services
submission      587/tcp                         # Submission [RFC4409]
submission      587/udp
drfugazi@charr:/etc/postfix% grep smtps /etc/services
ssmtp           465/tcp         smtps           # SMTP over SSL

Wygląda dobrze, sprawdźmy co słychać w main.cf, tutaj na końcu pakiet dovecot-postfix dodał m.in takie linie:

mailbox_command = /usr/lib/dovecot/deliver -c /etc/dovecot/conf.d/01-dovecot-postfix.conf -n -m "${EXTENSION}"
home_mailbox = Maildir/
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth
smtpd_sasl_authenticated_header = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sender_restrictions = reject_unknown_sender_domain
smtp_use_tls = yes
smtpd_tls_received_header = yes
smtpd_tls_mandatory_protocols = SSLv3, TLSv1
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_auth_only = yes
tls_random_source = dev:/dev/urandom

Kiedyś trzeba było to konfigurować samemu wg dokumentacji, tu mamy już gotowe, na razie to zostawimy i zrobimy restart postfixa, aby uwzględnił zmiany w master.cf i uruchomił obsługę submission i smtps. Uwaga, nie wystarczy tu postfix reload, musimy go zrestartować całkiem:

drfugazi@charr:/etc/postfix% sudo service postfix stop
 * Stopping Postfix Mail Transport Agent postfix                                                                 [ OK ]
drfugazi@charr:/etc/postfix% sudo service postfix start
 * Starting Postfix Mail Transport Agent postfix                                                                 [ OK ]

Sprawdźmy czy nasz postfix słucha na odpowiednich portach: submission (587) i smtps (465):

drfugazi@charr:/etc/postfix% netstat -an|egrep "(:587|:465)"
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:465             0.0.0.0:*               LISTEN

Porty są otwarte, spróbujmy się połączyć z localhosta i zagadać z Postfixem:

drfugazi@charr:/etc/postfix% telnet localhost 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 charr ESMTP Postfix (Ubuntu)
ehlo localhost
250-charr
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
starttls
220 2.0.0 Ready to start TLS
^]
telnet> quit
Connection closed.

Na port 465 nie będziemy się łączyć, bo tam trzeba od razu gadać SSLem. Spróbujmy połączenia z zewnątrz, oczywiście filtry muszą przepuszczać połączenia:

drfugazi@charr:/etc/postfix% sudo iptables -L -n|egrep "(:465|:587)"
drfugazi@charr:/etc/postfix% sudo iptables -I INPUT -i eth0 -p tcp --syn --dport 587 -d 212.106.X.X -j ACCEPT
drfugazi@charr:/etc/postfix% sudo iptables -I INPUT -i eth0 -p tcp --syn --dport 465 -d 212.106.X.X -j ACCEPT
drfugazi@charr:/etc/postfix% sudo iptables -L -n|egrep "(:465|:587)"
ACCEPT     tcp  --  0.0.0.0/0            212.106.X.X     tcp dpt:465 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            212.106.X.X     tcp dpt:587 flags:0x17/0x02

drfugazi@charlie:~% telnet example.com 587
Trying 212.106.X.X...
Connected to example.com.
Escape character is '^]'.
220 charr ESMTP Postfix (Ubuntu)
ehlo test
250-charr
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
starttls
220 2.0.0 Ready to start TLS
^]
telnet> quit
Connection closed.

Teraz proponuję skonfigurować jakiś program pocztowy i sprawdzić czy można się zalogować do poczty z użytkownika, którego mamy w systemie. Oczywiście finalnie mamy mieć wirtualne domeny i wirtualnych użytkowników w LDAP, ale proponuję zacząć od użytkownika systemowego i dopiero jak zadziała to posuwać się dalej. Jeśli do tej pory coś poszło nie tak, to trzeba sprawdzić w logach komunikat błędu i podjąć odpowiednie działania. W razie czego proszę pytać w komentarzach, spróbuję jakoś pomóc.

Mój Thunderbird automagicznie skonfigurował się do obsługi IMAP z TLS na porcie 143 oraz SMTP z TLS na porcie 587, to bardzo dobra konfiguracja. Jeśli klient tego nie potrafi obsłużyć, to można użyć portu 993 do IMAP z SSL lub 955 do POP3 z SSL i 465 do SMTP z SSL albo… zmienić klienta poczty 😉

Spróbujmy wysłać maila, najlepiej na jakieś swoje zewnętrzne konto, a następnie odpisać na tegoż maila, sprawdzimy w ten sposób przesyłanie w obie strony. Jeśli coś pójdzie nie tak, to znów trzeba spojrzeć w logi i ewentualnie naprawić.

Jeśli działa wysyłanie, uwierzytelnianie przy wysyłaniu oraz odbiór poczty, to możemy przejść do ambitniejszych zadań, jak np. instalacja OpenLDAPa:

Całkiem dobry opis instalacji i wstępnej konfiguracji LDAPa pod Ubuntu można znaleźć na HowtoForge. Ja z tego skorzystałem, zapis sesji znajduje się tutaj: instalacja-i-konfiguracja-openldap.

You may also like...

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.