UNIX / LINUX poštovní server Honza Vrbata
[email protected]
ZAKLADNÍ NORMY ELEKTRONICKÉ POŠTY
➢ RFC 2821 - Simple Mail Transfer Protocol ➢ RFC 1869 - SMTP Service Extensions (ESMTP ➢ RFC 2822 - Standard for the format of ARPA Internet text messages ➢ RFC 823 - DARPA Internet gateway ➢ RFC 1341, RFC 2045, RFC 2046, RFC 2049 – MIME (Multipurpose Internet Mail extensions)
http://www.rfc-editor.org/
ROZDĚLENÍ POŠTOVNÍCH PROGRAMŮ
MTA
MDA
Mail Transfer Agent
Mail Delivery Agent
➢ Sendmail ➢ Smail ➢ Z-mailer ➢ Q-mail ➢ Postfix ➢ Exim ➢ M$ - Exchange ➢ Lotus Domino ➢ .....
➢ Procmail ➢ Maildrop ➢ Sieve ➢ .....
MUA
Mail User Agent ➢ mail ➢ pine ➢ mutt ➢ Mozilla Mailer ➢ Pegasus Mail ➢ Eudora ➢ Outlook ➢ Ximian Evolution ➢ .....
ZÁKLADNÍ UNIXOVÉ MTA
SENDMAIL www.sendmail.org
➢ Standarní UNIXový MTA ➢ Až 30% všech zpráv v Internetu odesláno sendmailem v současné době ➢ Výkonný systém prověřený letitou praxí ➢ Velké konfigurační možnosti ➢ Konfigrace je velmi složitá ➢ Častý výskyt bezpečnostních chyb
Q-MAIL www.qmail.org
➢ Výkoný, robustní, bezpečný MTA od známého bezpočnostního experta Daniela J. Bernsteina ➢ Dokáže v UNIXu bezbolestně nahradit sendmail ➢ „Zvláštní“ postup instalace konfigurace !!! ➢ Nemá takové konfigurační možnosti jako Sendmail ➢ Nekoncepční způsob vývoje '''
ZÁKLADNÍ UNIXOVÉ MTA
POSTFIX www.postfix.org
➢ Výkoný, robustní, bezpečný MTA ➢ Autor Wietse Venema, na vzniku se silně podílela IBM ➢ Dokáže v UNIXu bezbolestně nahradit sendmail ➢ Přehledná konfigurace !!! ➢ Nemá takové konfigurační možnosti jako Sendmail
EXIM www.exim.org
➢ Výkoný, robustní, bezpečný MTA ➢ Dokáže v UNIXu bezbolestně nahradit sendmail ➢ Přehledná konfigurace !!! ➢ Nemá takové konfigurační možnosti jako Sendmail ➢ Vychází ze systému smail
CESTA E-MAILu INTERNETEM MUA 2 MUA 1 SMTP MTA 1
MTA 2 SMTP MDA
POP3, IMAP
POP3 IMAP
FORMÁT ZPRÁVY Hlavičky (HEADERS) prázdný řádek
Tělo (BODY)
Hlavičky – obsahují informace pro odesílání, doručování a přenášení. Jsou přesně strukturovány. ● Tělo – obsahuje vlastní text zprávy. Tělo zprávy není z hlediska poštovního systému nijak strukturováno. ●
ÚDAJE V HLAVIČKÁCH ZPRÁV Základní informace v hlavičkách zprávy : odesílatel zprávy ● příjemce zprávy ● datum a čas odeslání zprávy ● předmět zprávy (subject) ●
Příklad hlaviček zprávy : From:
[email protected] To: [email protected] Date: Mon, 20 Jan 2000 10:00:00 MET Subject: Pokusna zprava
ÚDAJE V HLAVIČKÁCH ZPRÁV – FORMÁT ADRESY
[email protected] Směrování pošty se provádí standardním způsobem podle MX záznamů v DNS
[email protected] RFC 823 vyžaduje směrování pošty podle A záznamů
honza@[10.2.10.1] Je možné dopis směrovat přímo na cílový MTA pomocí IP adresy
PROTOKOL SMTP ●
SMTP je textový aplikační protokol používající transportní protokol TCP
●
Klient generuje požadavky/příkazy (HELO, VRFY, DATA, EXPN ...)
●
Příkazy mohou mít doplňkové parametry
●
●
Server příkazy vykonává a klientovy odesílá stavové zprávy o výsledku zpracování požadavků Tyto zprávy jsou třímístná dekadická čísla. Mohou obsahovat i doprovodné texty. Ty však z hlediska systému nejsou důležité !!!
PROTOKOL SMTP
Stavové kódy protokolu SMTP : 2xx ..... úspěšně provedeno 3xx ..... úspěšne provedeno, ale server očekává další informace, stávající jsou nedostatečné 4xx ..... chyba dočasného charakteru 5xx ..... chyba trvalá
PROTOKOL SMTP 220 hippo.feld.cvut.cz ESMTP Microsoft Exchange 2010 HELO pck331-33.feld.cvut.cz 250 hippo.feld.cvut.cz MAIL From: [email protected] 250 Ok RCPT To: [email protected] 250 Ok DATA 354 End data with . From: [email protected] To: [email protected] Subject: Dulezita zprava !!! Zdar ! Dnes operativne v sest vecer u Cechu !!! . 250 Ok: queued as E57BF342D1 QUIT 221 Bye
POSTFIX – kompilace, instalace
Požadavky pro kompilaci : standardní součásti jako gcc, glibc, make, atd. ● knihovna Berkeley database (libdb) ● knihovna PCRE, podpora PERLových regulárních výrazů ● v případě rozšířených požadavků, další knihovny (OpenLDAP, Cyrus SASL, MySQL, atd.) ●
Kompilace a instalace : rozbalit archiv ● vytvořit uživatele postfix a skupinu postdrop ● make, make install ●
POSTFIX – konfigurace Konfigurace :
/etc/postfix/master.cf /etc/postfix/main.cf
Démon master řídí celou rodinu Postfixu : /etc/postfix/master.cf # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n n smtpd pickup fifo n n 60 1 pickup cleanup unix n n 0 cleanup qmgr fifo n n 300 1 qmgr rewrite unix n trivial-rewrite bounce unix n 0 bounce defer unix n 0 bounce trace unix n 0 bounce verify unix n 1 verify flush unix n n 1000? 0 flush proxymap unix n proxymap smtp unix n smtp relay unix n smtp showq unix n n showq error unix n error local unix n n local virtual unix n n virtual
POSTFIX – konfigurace Struktura main.cf: Parametry s hodnotami zadávané přiřazením. Před názvem parametru nesmí být mezera, atd. ... a=gopas.cz ● Pokud řádek začíná mezerou jedná se o další hodnotu parametru na předchozím řádku (pokračování řádku). ● Více hodnot na pravé straně možno oddělovat mezerami nebo čárkami. ● Je možné se odkazovat na již definovanou proměnnou ... b=$a. ●
Vyhledávací tabulky (lookup tables) :
Dvousloupcová tabulka : - první sloupec LHS je vyhledávací klíč (key) - druhý sloupec RHS je návratová hodnota (value) ● Zdroj typu lookup table v main.cf: a=type:table (hash:/etc/postfix/pokus Někdy se používají degenerované tabulky (pouze s jedním sloupcem) místo seznamu hodnot. ● Typy tabulek : hash, dbm, regexp, pcre, static, unix, mysql, ldap, ... ●
POSTFIX – konfigurace Jaké tabulky postfix podporuje : postconf -m static nis regexp environ btree unix hash
Vytvoření tabulky : vi /etc/postfix/canonical honza [email protected] info [email protected] .........
Převedení tabulky do databázového tvaru : postmap [typ tabulky] /etc/postfix/canonical
POSTFIX – konfigurace Vyhledání v tabulce : postmap -q honza /etc/postfix/canonical
POSTFIX – konfigurace Přijímání pošty : ●
●
Implicitně Postfix přijímá poštu pro uživatele, kteří mají na hostitelském UNIXu uživatelský (systémový) účet ! Tzv. virtuální poštovní systémy čerpají seznam uživatelů a související údaje z externích databází (lokální databázové soubory, LDAP, MySQL, ...)
POSTFIX – konfigurace main.cf
Základní nastavení : myhostname = honza.gopas.cz (FQDN, plně kvalifikované doménové jméno serveru) mydomain = gopas.cz myorigin = gopas.cz (přepsání lokální adresy user do standardního tvaru user@$myorigin) inet_interfaces = all
mydestination = gopas.cz, spar.cz, firma.cz (seznam domén, pro které systém přijímá poštu, je cílový MTA)
POSTFIX – konfigurace main.cf
Základní nastavení aliasy /etc/postfix/aliases : (struktura shodná se sendmailem) honza: pruser: webmasteri: tonda: akce:
vrbata [email protected] pepa, lojza, [email protected] /var/mail/tonda.zaloha, tonda |/usr/bin/akce
Textovou formu je nutné převést do databázového tvaru : newaliases Uživatelské aliasy : ~/.forward
Poštovní přezdívky v main.cf : alias_maps=hash:/etc/postfix/aliases alias_database=hash:/etc/postfix/aliases
POSTFIX – konfigurace Ovládání systému Postfix : postfix start ... spuštění systému postfix stop ... zastavení systému postfix reload ... restart systému při změně konfigurace postfix check ... test konfigurace
POSTFIX – konfigurace Formát poštovních schránek : ●
MAILBOX - schránka=soubor, tradiční umístění schránek INBOX v UNIXu : /var/spool/mail/, /var/mail/ From [email protected] Thu Jul 15 15:14:51 2004 Return-Path: Delivered-To: [email protected] Received: by k331-pgs.feld.cvut.cz (Postfix, from userid 0) id B70BAEFC92; Wed, 31 Mar 2004 21:03:27 -0500 (EST) From: [email protected] (Cron Daemon) To: [email protected] Subject: Cron nice -n 19 run-parts /etc/cron.daily Message-Id: <[email protected]> Date: Wed, 31 Mar 2004 21:03:27 -0500 (EST) run-parts: /etc/cron.daily/freshclam exited with return code 1 From [email protected] Thu Jul 15 15:14:52 2004 Return-Path: Delivered-To: [email protected] Received: by k331-pgs.feld.cvut.cz (Postfix, from userid 0) id C37A4F0060; Thu, 1 Apr 2004 21:03:28 -0500 (EST) From: [email protected] (Cron Daemon) To: [email protected] Subject: Cron nice -n 19 run-parts /etc/cron.daily Message-Id: <[email protected]> Date: Thu, 1 Apr 2004 21:03:28 -0500 (EST) ERROR: Can't open config file /etc/clamav.conf !
POSTFIX – konfigurace Formát poštovních schránek : ●
MAILDIR - schránka=adresář cur/ new/ 1151577399.M887150P6718V0000000000000803I0015778D_0.hippo.feld.cvut.cz,S=211087 1151679136.M208135P7665V0000000000000803I0015778E_0.hippo.feld.cvut.cz,S=215228 1151994257.M87153P152V0000000000000803I00157790_0.hippo.feld.cvut.cz,S=2729
tmp/ Možno vytvářet podadresáře (subfolders) : $MAILDIR/.podadresar/cur/ /new/ /tmp/
POSTFIX – konfigurace Fronty zpráv : ●
active, bounce, corrupt, deferred, hold, ...
Zobrazení obsahu fronty : postqueue -p (mailq) -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------E197034519 2253 Thu Aug 3 14:28:44 [email protected] (connect to mail.0733.com[61.187.98.7]: Connection refused) [email protected] C3F1134497
2213 Tue Aug 1 20:10:12 [email protected] (connect to brmail1.brassring.com[66.77.22.180]: Connection refused) [email protected]
-- 4 Kbytes in 2 Requests.
Odstranění zprávy z fronty :
postsuper -d E197034519 postsuper -d ALL
POSTFIX – konfigurace Zobrazení zprávy ve frontě : postcat -q E197034519 Okamžité odeslání zpráv : postqueue -f (postfix flush, sendmail -q) Okamžité odeslání zpráv jen pro příjemce z určité domény : postqueue -s seznam.cz příslušná doména musí uvedena v seznamu : fast_flush_domains = seznam.cz
POSTFIX – konfigurace main.cf
Přeposílání - RELAYING : MUA Internet MUA
MTA
MUA
Povolení z důvěryhodných počítačů : mynetworks = 10.2.0.0/16 ● Metody : POP before SMTP, SMTP after POP ● Možnost autentizace (ESMTP) : Cyrus SASL, Dovecot SASL ●
POSTFIX – konfigurace main.cf
Přeposílání - RELAYING : ●
●
Postfix přijímá poštu k dalšímu přeposlání od důvěryhodných počítačů pro jakéhokoli příjemce. Postfix přijme poštu od kohokoli, pokud souhlasí adresa příjemce s relay_domains. Implicitně obsahuje $mydestination.
MDA – lokální doručování Postfix obsahuje několik doručovacích agentů : Typ schránky a místo doručení : (domácí schránky)
local, virtual, relay, error.
home_mailbox = Mailbox home_mailbox = Maildir/
Repozitář pro UNIXový styl schránek : mail_spool_directory = /var/mail mail_spool_directory = /var/spool/mail Změna lokálního doručovatele : mailbox_command = /some/where/mda
MDA – lokální doručování Flexibilní MDA :
procmail sieve (CMU Cyrus Project) maildrop (Courier Mail Server Project)
MAILDROP : http://www.courier-mta.org/maildrop/ Konfigurace :
/etc/maildroprc ~/.mailfilter
Maildrop má vlastní univerzální procedurální jazyk. Pomocí skriptu v tomto jazyce je možné při doručení do poštovní schránky provést řadu akcí.
MDA – lokální doručování Syntaxe ~/.mailfilter : ROOT="/var/spool/mail/root" SPAM="/var/spool/mail/vrbata/.spam" SCHR="/var/spool/mail/vrbata" if ($SIZE<70000) { exception { xfilter "/usr/bin/spamassassin" } } if (/^X-Spam-Flag: *YES/) { to $SPAM } #if (/^From: .*@netwave/) #{ # cc "|/usr/bin/vacation -j -a honza vrbata" # to $SCHR #} #if (/^From:.*[email protected]/) #{ # to $ROOT # cc [email protected] #}
Hostování více domén - virtuální systém ●
Více domén se systémovými účty Systém přijímá poštu pro systémové uživatele a nerozlišuje příchozí doménu. mydestination = firma1.cz, firma2.cz, $mydomain, $myhostname Pozn : Zprávy adresované na [email protected] a [email protected] jsou doručeny do stejné schránky.
●
Více domén se systémovými účty odděleně Systém přijímá poštu pro systémové uživatele a rozlišuje příchozí doménu. virtual_alias_domains = firma1.cz, firma2.cz, firma3.cz virtual_alias_maps = hash:/etc/postfix/virtual_alias /etc/postfix/virtual_alias : [email protected] jana [email protected] lenka @firma3.cz firma3kos
Hostování více domén - virtuální systém ●
Více domén s virtuálními účty - uživatelé poštovního systému nemají systémové účty - informace o uživatelích jsou uloženy v externí databázi - z této databáze musí umět čerpat údaje i POP3 / IMAP systém virtual_mailbox_domains = firma1.cz, firma2.cz virtual_mailbox_base = /var/mail/vhosts virtual_mailbox_maps = hash:/etc/postfix/vmailbox /etc/postfix/vmailbox: [email protected] [email protected] [email protected] [email protected] Vlastník schránky : virtual_uid_maps = static:5000 virtual_gid_maps = static:5000
firma1.cz/pepa firma1.cz/info firma2.cz/reditel firma2.cz/info
FILTROVÁNÍ OBSAHU Princip 1 :
smtpd
qmgr
pipe
sendmail
filtr
Jednoduchým transparentním způsobem je možné, aby správce front na každou zprávu aplikoval externí filtr obsahu.
FILTROVÁNÍ OBSAHU Princip 2 : (použití démona)
smtpd
qmgr
smtp
smtpd 2 smtp:10026
smtp:10025
filtr (démon)
Jednoduchým transparentním způsobem je možné, aby správce front na každou zprávu aplikoval externí filtr obsahu. Použití filtru ve formě démona zvyšuje výkonnost systému.
ANTIVIROVÁ OCHRANA
Antivirový program : Sophos, Kaspersky, AVG, NOD32, Clam Antivirus, ..
CLAMAV : http://www.clamav.net/
Instalace ze zdrojových kódů : adduser clamav ./configure make make install
Konfigurace :
/usr/local/etc/clamd.conf /usr/local/etc/freshclam.conf
Kontrola souborů v adresáři : clamscan -r /root (možnost spuštění antivirového engine jako démona přístupného pomocí soketu : clamd, clamdscan.)
Aktualizace virové databáze : freshclam
ANTIVIROVÁ OCHRANA Virový wrapper : Amavis, MailScanner, Sagator, … AMAVIS : http://www.amavis.org/ (Amavis, Amavisd-new) Instalace ze zdrojových kódů : adduser amavis ./configure make make install Konfigurace POSTFIXu : master.cf : vscan unix - n n - 10 pipe user=amavis argv=/usr/sbin/amavis ${sender} ${recipient} localhost:10025 inet n - n - - smtpd -o content_filter= main.cf :
content_filter = vscan:
OCHRANA PROTI SPAMu
Na straně MTA : ●
●
●
Na straně MDA :
Blacklist - Whitelist
●
Heuristické metody
Kontrola adresy příjemce, odesílatele, hlavičky HELO, ...
●
Kontrolní součty - otisky
DNS BlackList – DNSBL, DNSHSBL
HASH, podobnostní algoritmy (DCC, Pyzor, Razor 2) ●
(naivní Bayesovská analýza, Markovy skryté modely)
(DSBL, SpamHaus SBL, SPEWS, DRBL, ...) ●
Grey List
●
Autorizace odesílatele (Habeas Haiku, Bonded Sender, SPF, HashCash, ...)
Statistická analýza
●
Potvrzení přijetí (chalenge response)
OCHRANA PROTI SPAMu S : 220 smtp.server.cz Postfix C : HELO pc1.gopas.cz S : 250 smtp.server.cz C : MAIL FROM: [email protected] S : 250 OK C : RCPT TO: [email protected] S : 250 OK C : DATA S : 354 End data with . C : To: franta.jetel.cz From: [email protected] Subject: Dulezita zprava Toto je telo zprávy .
smtpd_client_restrictions smtpd_helo_restrictions smtpd_sender_restrictions smtpd_recipient_restrictions smtpd_data_restrictions header_checks body_checks
OCHRANA PROTI SPAMu Výchozí nastavení : smtpd_client_restrictions = smtpd_helo_restrictions = smtpd_sender_restrictions = smtpd_recipient_restrictions = permit_mynetworks reject_unauth_destination všechna omezení bez mapy vrací hodnotu OK, REJECT nebo DUNNO ● omezení jsou vyhodnocována v pořadí v jakém jsou uvedena ● první REJECT znamená odmítnutí zprávy ● výchozí akce je přijmutí zprávy ●
OCHRANA PROTI SPAMu Možnosti ochrany, omezení :
Přístupové mapy pro kontrolu klientů : direktivy check_*_access ukazují na vyhledávací tabulky obsahující IP, FQDN hostitelů nebo e-mail adresy, které mají být přijmuty nebo odmítnuty. Další kontroly klientů : porovnávání informací od klienta s obecnými konfiguračními informacemi, např. permit_mynetworks, atd. Kontrola dodržování syntaxe : striktní prosazování standardů SMTP. Kontrola DNS : kontrola informací z DNS, FQDN odesílatele, existující doména e-mail adresy odesílatele, atd. Kontrola černých listin v reálném čase : kontrola DNSBL a DNSHSBL. Všeobecná pravidla : další kontroly
OCHRANA PROTI SPAMu - DNSBL ●
●
●
Databáze IP adres či jmenných záznamů, které se nějakým způsobem prohřešují proti etiketě. Obvykle jsou realizovány jako stromy v DNS a jsou tedy přístupné pomocí aplikačního DNS protokolu. Příklad použití – mail přichází se severu 127.0.0.2. Provedeme dotaz do DNS :
●
dig A 2.0.0.127.dsbl.org. dig TXT 2.0.0.127.dsbl.org.
Použití v Postfixu : smtpd_recipient_resctrictions= reject_rbl_client blackholes.easynet.nl reject_rhsbl_client blackhole.securitysage.com reject_rhsbl_sender blackhole.securitysage.com
OCHRANA PROTI SPAMu - GreyList ●
●
●
Triplet je trojice údajů z příchozí zprávy. Je to IP adresa odesílajícího serveru, obálková hlavička odesílatele a obálková hlavička příjemce. Server ukládá triplety pro všechny příchozí zprávy. Při příchodu mailu server zkontroluje zda-li je v databázi daný triplet již obsažen : - pokud ano, mail je standardně přijat. - pokud ne, triplet pro nový mail je vložen do databáze a přijetí mailu je zamítnuto s kódem dočasné chyby (kategorie 4xx). Odesílající server se u takto odmítnuté zprávy pokusí o pozdější doručení.
OCHRANA PROTI SPAMu - SPF ●
●
●
●
Rozšíření SMTP protokolu, RFC 4408. Umožňuje pomocí DNS záznamu specifikovat jaké poštovní servery jsou autorizované pro odesílání mailů pro danou doménu. (kontroluje se hlavička Return-Path: [email protected]) SPF disponuje vlastním jazykem pro zápis pravidel (http://en.wikipedia.org/wiki/Sender_Policy_Framework) Příklad : dig TXT vrbata.cz
;; ANSWER SECTION: vrbata.cz.
86400
IN
TXT
"v=spf1 mx ip4:147.32.193.32 -all"
OCHRANA PROTI SPAMu Statistické analýzy – naivní Bayesovo filtrování Vychází z teorie o pravděpodobnosti příčin ● Teoreticky zpracoval a dokázal matematik T. Bayes ●
Příklad : člověk měřící více jak 190 cm je z 55% basketbalista ● člověk držící basketbalový míč je ze 70% basketbalista ●
Předpoklady : jevy jsou neslučitelné !!! (to v praxi neplatí, ale zanedbáváme) ● jejich průnikem je jev jistý (tzn. úplný systém jevů) ●
Jaká je pravděpodobnost, že člověk meřící 195 cm s míčem v ruce je košíkář ???
OCHRANA PROTI SPAMu Statistické metody – Bayes filtrování Výpočet a výsledky : (0,55 * 0,70) ------------------------------------------------ = 0,385 / 0,52 = 0,74 [(0,55 * 0,70) + (1 – 0,55)(1 - 0,70)]
OCHRANA PROTI SPAMu
http://spamassassin.apache.org/
●
volně šířený antispamový filtr napsaný v PERLu
●
integrace s různými programy : Sendmail, Q-mail, Postfix, Exim, ...
●
obsahuje heuristické a statistické filtry, kontrolní součty a další metody