LPS

Z David Seidl
Skočit na navigaci Skočit na vyhledávání

Linux jako poštovní server

Internet již dávno vyrostl z dětských let a tak se na této světové síti setkáme s mnoha a mnoha aplikacemi, které dnes a denně využíváme. Ke stěžejním funkcím internetu patří stále bezesporu web a elektronická pošta. Oproti prvopočátkům internetu prošla elektronická pošta mnoha úskalí a jen díky tomu ji dne s můžeme stále využívat. V době kdy služba elektronické pošty vznikala, nikdo nemohl tušit do jak gigantických rozměrů Internet nakyne. Přesto je základ této služby již léta stále stejný a stále velmi jednoduchý.


Operační systém Linux

  • Základní vlastnosti systému, historie, bezpečnost
  • Linux jako server
  • Distribuce GNU/Linux

Instalace GNU/Debian na virtuální PC

  • Pro testování bude využit virtualizační software Virtualbox [1]
  • Instalace GNU/Debian je možné provést pomocí instalačních ISO dostupných zde: [2]
    • V první fázi instalace doporučuji nepřipojovat síťovou kartu, aby si instalátor vyžádat zadání pevné IP adresy
    • Po nastavení sítě připojte virt. PC do "mostu"
    • Jako jméno počítače zvolte mail.xxx.cz, kde xxx je vám přiřazená doména odpovídající IP adrese
    • Jako volitelný software prosím volte pouze SSH server, nic jiného
    • Po instalaci je vhodné nainstalovat "Přídavky pro hosta", proto je nutné doinstalovat balík bzip2 apt-get install bzip2
    • V systému je nutné orientovat se v adresářové struktuře a umět editovat textové soubory, vhodné je umět pracovat s nástroji jako cd, mv, cp, cat, chmod, chown, netstat, tail, mc a jiné


DNS, mx záznam

  • Pro zjištění který server spravuje konkrétní emailovou doménu se využívá systém DNS
  • Jeden z nástrojů pro kontrolu dns je program nslookup, který je obsažen v balíku dnsutils apt-get install dnsutils
  • Pro prosté zjištění IP adresy z doménového jména je možné použít program nslookup následovně: nslookup amenit.cz, pro přeložení domény na jméno se využije DNS server nastavený jako výchozí v systému
  • Pokud chcete ověřit DNS záznam na jiném serveru je možné spustit nslookup bez parametru
root@mail:~# nslookup 
> server 8.8.8.8
Default server: 8.8.8.8
Address: 8.8.8.8#53
> amenit.cz
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
Name:	amenit.cz
Address: 149.62.147.101
  • Podobně se dá využít utilita i pro MX záznamy
root@mail:~# nslookup 
> set type=mx
> honza.cz
Server:		10.0.0.200
Address:	10.0.0.200#53

honza.cz	mail exchanger = 10 mail.honza.cz.
  • Záznam v DNS může vypadat následovně
root@DNS:/etc/bind# cat db.honza.cz 
$TTL	3h
@	IN	SOA	dns.david.cz.	spravce.honza.cz. (
			2014010802;
			4h
			2h
			2w
			1h
)
@	IN	NS	dns.david.cz.

honza.cz.	IN	MX	10	mail.honza.cz.
honza.cz.	IN	A		10.0.0.204
mail		IN	A		10.0.0.204
smtp            IN      A               10.0.0.204
imap            IN      A               10.0.0.204
pop3            IN      A               10.0.0.204
  • V souboru /etc/bind/named.conf.local je poté nutno vložit zónový soubor
zone "honza.cz" {
	type master;
	file "/etc/bind/db.honza.cz";
};

Protokol SMTP

apt-get install telnet

telnet smtp.vsb.cz 25
Trying 158.196.149.155...
Connected to smtp.vsb.cz.
Escape character is '^]'.
220 smtp.vsb.cz ESMTP Postfix (Ubuntu)
HELO amenit.cz
250 smtp.vsb.cz
mail from: david.seidl@vsb.cz
250 2.1.0 Ok
rcpt to: david.seidl@vsb.cz
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Tohle je email pro Davida Seidla.

.
250 2.0.0 Ok: queued as 4A7CD1C6FC9
quit
221 2.0.0 Bye
Connection closed by foreign host.


Instalace a konfigurace postfixu

apt-get install postfix

 /etc/postfix/main.cf
 /etc/postfix/master.cf
 #plně kvalifikované jméno systému
 myhostname = mail.honza.cz

 #které domény systém obsluhuje
 mydestination = mail.honza.cz, localhost.honza.cz, honza.cz , localhost

 #domovské sítě
 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128         

 #honza.cz ; pokud má email jen místní část, připojí se tato doména 
 myorigin = /etc/mailname                                          

 #kam se mají předávat emaily, pokud se zakomentuje bude se využívat systém DNS
 relayhost =                                                             
 postconf

Postfix - vyhledávací tabulky

/etc/aliases
newaliases
  • Kanonické mapování
cat /etc/postfix/canonical
sei01@honza.cz david.seidl@honza.cz	
postmap /etc/postfix/canonical
cat /etc/postfix/main.cf | grep canonical_maps
sender_canonical_maps = hash:/etc/postfix/canonical
recipient_canonical_maps = hash:/etc/postfix/canonical
  • Podporované formáty tabulek
postconf -m

Fronty postfixu

 postqueue -p          //výpis zpráv ve fronntě
 postqueue -s vsb.cz   //znovu pošle zprávy pro doménu vsb.cz
 postsuper -d DBA3F1A9 //vymaže zprávu
 postsuper -d ALL      //vymaže vše
 postsuper -h DBA3F1A9 //zadrží zpráv
 postsuper -H DBA3F1A9 //pustí zprávu
 postsuper -r DBA3F1A9 //opakované zařazení zprávu
 postcat -q DBA3F1A9 //vypíše zprávu

Místní doručování (mailbox, maildir)

 cat /etc/postfix/main.cf | grep home_mailbox
 home_mailbox = Maildir/

V některých případech je možné zadat parametr mail_spool_directory = /var/spool/mail pro mailbox nebo mail_spool_directory = /var/spool/mail/ pro maildir, je ale nutné vytvořit pro uživatele složky s jejich jmény

Server IMAP a POP3 dovecot

instalace apt-get install dovecot-imapd dovecot-pop3d

Změna formátu z mailbox na maildir

cat /etc/dovecot/conf.d/10-mail.conf | grep mail_location
#mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_location = maildir:~/Maildir/

Povolení zabezpečené komunikace SMTP

V /etc/postfix/master.cf povolit:

smtps     inet  n       -       -       -       -       smtpd
 -o syslog_name=postfix/smtps
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
 -o milter_macro_daemon_name=ORIGINATING
  • Otestování pomocí openssl
openssl s_client -crlf -connect 10.0.0.204:465

Ověřování uživatelů SSL a TLS

Do /etc/postfix/master.cf přidat

 -o smtpd_sasl_type=dovecot
 -o smtpd_sasl_path=private/auth
 -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_unauth_destination

Do /etc/dovecot/conf.d/10-master přidat do service auth

unix_listener /var/spool/postfix/private/auth {
   mode = 0666
   user = postfix
   group = postfix
}
  • Zjištění jména a hesla v base64
printf  "\0sei01\0sei01" |openssl base64
  • Test ověření

openssl s_client -crlf -connect 10.0.0.204:465

220 mail.honza.cz ESMTP Postfix (Debian/GNU)
ehlo david.cz
250-mail.honza.cz
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN AHNlaTAxAHNlaTAx
235 2.7.0 Authentication successful
....

Spam a antivirus (Clamv, Amavis, Spamassassin )

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop


                                     [SpamAssassin]
                                           ^
                                           |
Email --> [(Port 25) Postfix] --> [(10024) amavisd-new] --> [(10025) Postfix] --> Mailbox
                                           |
                                           v
                                        [ClamAV]

Poznámka

 !!! V /etc/mailname musí být správná doména, tedy např david.cz a né mail.david.cz !!!


  • Aktualizace virové databáze
freshclam
/etc/init.d/clamav-daemon start

V souboru /etc/amavis/conf.d/15-content_filter_mode povolit řádky:

@bypass_virus_checks_maps = (
  \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

Pravidla jsou uvedena zde /etc/amavis/conf.d/20-debian_defaults

Je nutné upravit /etc/postfix/main.cf a dodat řádky

 content_filter = amavis:[127.0.0.1]:10024
 receive_override_options = no_address_mappings

Dále je nutné přidat službu do /etc/postfix/master.cf

amavis unix - - - - 2 smtp
       -o smtp_data_done_timeout=1200
       -o smtp_send_xforward_command=yes
127.0.0.1:10025 inet n - - - - smtpd
       -o content_filter=
       -o local_recipient_maps=
       -o relay_recipient_maps=
       -o smtpd_restriction_classes=
       -o smtpd_client_restrictions=
       -o smtpd_helo_restrictions=
       -o smtpd_sender_restrictions=
       -o smtpd_recipient_restrictions=permit_mynetworks,reject
       -o mynetworks=127.0.0.0/8
       -o strict_rfc821_envelopes=yes
       -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

Povolit spamassassin v souboru /etc/default/spamassassin

 ENABLED=1
 CRON=1

Stahovat si aktuální spamové databáze

apt-get install pyzor  razor

Do souboru /etc/spamassassin/local.cf přidat:

#pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor
//pyzor_add_header 1

#razor
use_razor2 1
razor_config /etc/razor/razor-agent.conf 

#bayes
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1
/etc/init.d/spamassassin start

Přidat uživatele clamav do skupiny amavis, jinak nefunguje předávání emailů

usermod -a -G amavis clamav
 /etc/init.d/clamav-daemon restart
 /etc/init.d/amavis restart
 /etc/init.d/postfix restart

Postfix - zakázané přílohy

cat /etc/postfix/main.cf | grep mime_header_checks
mime_header_checks = regexp:/etc/postfix/mime_header_checks
cat /etc/postfix/mime_header_checks
/name=[^>]*\.(bat|com|exe|dll|vbs)/ REJECT

Webový IMAP klient

 apt-get install mysql-server
 apt-get install roundcube

Ve /var/www/ ud2lat link ln -s /var/lib/roundcube/

V souboru /var/www/roundcube/config/main.inc.php změnit:

$rcmail_config['default_host'] = '127.0.0.1';