UNIX / LINUX poštovní server Honza Vrbata honza@vrbata.cz
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 Mail Transfer Agent Sendmail Smail Z-mailer Q-mail Postfix Exim M$ - Exchange Lotus Domino... MDA Mail Delivery Agent 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 Q-MAIL www.qmail.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 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 EXIM www.exim.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 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 1 MUA 2 SMTP MTA 2 MTA 1 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: jan.vrbata@gopas.cz <Honza Vrbata> To: franta@jetel.cz Date: Mon, 20 Jan 2000 10:00:00 MET Subject: Pokusna zprava
ÚDAJE V HLAVIČKÁCH ZPRÁV FORMÁT ADRESY honza@gopas.cz Směrování pošty se provádí standardním způsobem podle MX záznamů v DNS honza@honza.gopas.cz 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: pokusnak@hippo.feld.cvut.cz 250 Ok RCPT To: honza@vrbata.cz 250 Ok DATA 354 End data with <CR><LF>.<CR><LF> From: pokusnak@hippo.feld.cvut.cz To: honza@vrbata.cz 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 jan.vrbata@gopas.cz info jana@gopas.cz... 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 123456@sms.eurotel.cz pepa, lojza, franta@seznam.cz /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 root@k331-pgs.feld.cvut.cz Thu Jul 15 15:14:51 2004 Return-Path: <root@k331-pgs.feld.cvut.cz> Delivered-To: root@k331-pgs.feld.cvut.cz Received: by k331-pgs.feld.cvut.cz (Postfix, from userid 0) id B70BAEFC92; Wed, 31 Mar 2004 21:03:27-0500 (EST) From: root@k331-pgs.feld.cvut.cz (Cron Daemon) To: root@k331-pgs.feld.cvut.cz Subject: Cron <root@k331-pgs> nice -n 19 run-parts /etc/cron.daily Message-Id: <20040401020327.B70BAEFC92@k331-pgs.feld.cvut.cz> Date: Wed, 31 Mar 2004 21:03:27-0500 (EST) run-parts: /etc/cron.daily/freshclam exited with return code 1 From root@k331-pgs.feld.cvut.cz Thu Jul 15 15:14:52 2004 Return-Path: <root@k331-pgs.feld.cvut.cz> Delivered-To: root@k331-pgs.feld.cvut.cz Received: by k331-pgs.feld.cvut.cz (Postfix, from userid 0) id C37A4F0060; Thu, 1 Apr 2004 21:03:28-0500 (EST) From: root@k331-pgs.feld.cvut.cz (Cron Daemon) To: root@k331-pgs.feld.cvut.cz Subject: Cron <root@k331-pgs> nice -n 19 run-parts /etc/cron.daily Message-Id: <20040402020328.C37A4F0060@k331-pgs.feld.cvut.cz> 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 postmaster@hippo.feld.cvut.cz (connect to mail.0733.com[61.187.98.7]: Connection refused) aini@0733.com C3F1134497 2213 Tue Aug 1 20:10:12 postmaster@hippo.feld.cvut.cz (connect to brmail1.brassring.com[66.77.22.180]: Connection refused) ajones@1-jobs.com -- 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
Přeposílání - RELAYING : POSTFIX konfigurace main.cf 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
Přeposílání - RELAYING : POSTFIX konfigurace main.cf 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ů : local, virtual, relay, error. Typ schránky a místo doručení : (domácí schránky) 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:.*root@hippo.feld.cvut.cz/) #{ # to $ROOT # cc franta@jetel.cz #}
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 info@firma1.cz a info@firma2.cz 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 : info@firma1.cz jana info@firma2.cz 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: pepa@firma1.cz info@firma1.cz reditel@firma2.cz info@firma2.cz firma1.cz/pepa firma1.cz/info firma2.cz/reditel firma2.cz/info Vlastník schránky : virtual_uid_maps = static:5000 virtual_gid_maps = static:5000
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 ntivirový program : Sophos, Kaspersky, AVG, NOD32, Clam Antivirus,.. LAMAV : http://www.clamav.net/ nstalace ze zdrojových kódů : adduser clamav./configure make make install onfigurace : /usr/local/etc/clamd.conf /usr/local/etc/freshclam.conf ontrola souborů v adresáři : clamscan -r /root možnost spuštění antivirového engine jako démona přístupného pomocí oketu : clamd, clamdscan.) ktualizace 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 Kontrola adresy příjemce, odesílatele, hlavičky HELO,... DNS BlackList DNSBL, DNSHSBL (DSBL, SpamHaus SBL, SPEWS, DRBL,...) Grey List Autorizace odesílatele (Habeas Haiku, Bonded Sender, SPF, HashCash,...) Heuristické metody Kontrolní součty - otisky HASH, podobnostní algoritmy (DCC, Pyzor, Razor 2) Statistická analýza (naivní Bayesovská analýza, Markovy skryté modely) Potvrzení přijetí (chalenge response)
OCHRANA PROTI SPAMu S : 220 smtp.server.cz Postfix smtpd_client_restrictions C : HELO pc1.gopas.cz S : 250 smtp.server.cz C : MAIL FROM: honza@vrbata.cz S : 250 OK C : RCPT TO: franta@jetel.cz S : 250 OK C : DATA S : 354 End data with <cr><lf>.<cr><lf> C : To: franta.jetel.cz From: honza@vrbata.cz Subject: Dulezita zprava Toto je telo zprávy. 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: honza@gopas.cz) 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