Od cias vzniku elektronickej posty(e-mail, email) sa postovy system sklada zo styroch casti, ktore zarucovali odoslanie a dorucenie emailu.
Dnes su ulohy plnene tymito agentami vacsinou do istej mieri
integrovane a spojovane do jednoho programu. Cim sa moze napriklad pri spojeni MUA a MSP objavit nutnost konfigurovat klientsku aplikaciu pre
spravne odosielanie posty. Prikladom programu, ktory je "cistym", MUA je mail. Dnes su vsak castejsie pouzivane programy ako
napr. mutt, pine alebo graficky klienti KMail
alebo Mozilla Thunderbird.
Ako historicky standart programu pre odesielanie posty mozeme jednoznacne povazovat program Sendmail,
ktory spojuje funkcie MSP a MTA(pozor nie standart v tom, ako ma vyzerat konfiguracny subor). Inymi zastupcami su napr.
QMail alebo Postfix.
Agentom MDA je program Procmail alebo Maildrop.
Takze postup zaslania spravy je zvycajne jej vytvorenie v MUA(+MSP), ten ju preda MTA. MTA bud priamo spravu doruci do schranky prijemcu(pomocou MDA)
alebo zasle dalsiemu MTA. Posledny MTA spravu preda MDA, ktory spravu doruci do prijemcovej schranky. Komunikacia medzi tymito programami
prebieha pomocou protokolu SMTP(vid nizsie). Prijemca si svoju postu z postovej schranky vybera bud priamo, alebo castejsie pomocou specialnych
protokolov. Najpouzivanejsie su IMAP a POP3 a ich zabezpecene varianty pomocou asymetrickeho sifrovania.
Najprv je treba zdoraznit, ze odlisujeme obalku spravy a telo spravy s hlavickami. Obalka obsahuje adresu prijemcu a odosielatela. V zavislosti od toho kadial email prechadza, mozu sa menit aj udaje na obalke(MTA prida stareho odosielatela do hlavicky a noveho zapise do obalky). Obalka zanika v okamihu jej dorucenia a uzivatel sa o nej nedozvie. Telo spravy sa deli na hlavicku a vlastne telo spravy. Specifikacia struktury spravy je uvedena v RFC 822(alebo novsie v RFC 2822) a specifikacia MIME(Multipurpose Internet Mail Extensions) v RFC 2045 az 2047, 4288, 4289, 2049, 2231, 2387. Hlavicka obsahuje doplnkove informacie dopisu. Su tu ulozene informacie o odosielatelovi a prijemcovi, predmet spravy, cas odoslania atd. Telo spravy je urcene pre ludskeho prijemcu a nesie vlastnu spravu. Telo a hlavicka su oddelene prazdnym riadkom. Obvykle hlavicka obsahuje:
Kazda polozka hlavicky ma tvar nazov:hodnota
a je ukoncena znakmi(om) ukoncenia riadku. Pokial je hlavicka prilis dlha,
moze pokracovat na nasledujucom riadku, ktory zacina znakom TAB(9) alebo medzery(32). Nazov sa striktne sklada zo znakov tlacitelnej ASCII-7(medzi 33 a 126).
Vynimkou je prva polozka From
, kde su uvedene informacie o smerovani spravy. Tieto informacie obnovuje kazdy system, ktory spravu spracovava.
specialnymi hlavickami su hlavicky zacinajuce na X-
, ktore si moze kazdy pridat ake chce. Pouzivaju sa napriklad na zaznamenanie informacii
antispamoveho filtra, ako je vidiet nizsie.
From xstancel@aurora.fi.muni.cz Sun Oct 29 22:03:13 2006 Return-path:Envelope-to: xkudlej@aurora.fi.muni.cz Delivery-date: Sun, 29 Oct 2006 22:03:13 +0100 Received: from mail by aurora.fi.muni.cz with spam-scanned (Exim 3.36 #1 (Debian)) id 1GeHoC-0001Kb-00 for ; Sun, 29 Oct 2006 22:03:13 +0100 Received: from xstancel by aurora.fi.muni.cz with local (Exim 3.36 #1 (Debian)) id 1GeHoC-0001KY-00 for ; Sun, 29 Oct 2006 22:03:08 +0100 Date: Sun, 29 Oct 2006 22:03:08 +0100 From: Radovan =?utf-8?Q?=C5=A0tancel?= | ravas To: Martin Kudlej Subject: Re: co si si zobral za smtp server na referat? Message-ID: <20061029210308.GA5069@aurora.fi.muni.cz> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.9i Sender: =?iso-8859-1?Q?Radovan_=A9tancel?= X-Spam-Checker-Version: SpamAssassin 3.0.3 (2005-04-27) on aurora.fi.muni.cz X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=disabled version=3.0.3 Status: RO X-Status: X-Keywords: X-UID: 2192 postfix On Sun, Oct 29, 2006 at 08:09:45PM +0100, Martin Kudlej wrote: > -- --------------- Radovan Stancel email: xstancel@fi.muni.cz icq: 160770612 be kind to your local god ---------------
Obmedzenie specifikacie RFC 822(zachovalo sa aj do RFC 2822) vsak je fakt, ze dopis moze obsahovat iba textove data. Preto bol vytvoreny novy standart MIME. Tento standart umoznuje prenasat aj multimedialne subory, ale zachovava kompatabilitu s RFC 822. To znamena, ze sa robi konverzia vnutra dopisu tak, aby bolo mozne ho odoslat a dorucit standartnou cestou. Specifikacia sa nachadza v RFC 2045-2047. To ci je email kodovany pomocou MIME zistime z hlavicky dopisu, pokial obsahuje polozku MIME-Version. Ostatne MIME hlavicky zacinaju slovom Content. Content-Type: Urcuje typ a podtyp obsahu, napr. text/plain oznacuje holy text, multipart/mixed oznacuje spravu skladajucu sa z podsprav, ktore maju rozdielny typ obsahu.
Content-type: multipart/mixed; boundary="frontier" MIME-version: 1.0 This is a multi-part message in MIME format. --frontier Content-type: text/plain This is the body of the message. --frontier Content-type: application/octet-stream Content-transfer-encoding: base64 PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg== --frontier--Slova hlavicky, ktore nie su v ASCII-7, alebo nie su sucastou mime typu, ktory neobsahuje kodovanie, kodujeme vo formate:
=?charset?encoding?encoded text?=
, napr. Subject: =?utf-8?Q?=C2=A1Hola,_se=C3=B1or!?=
Elektronicka adresa se sklada z dvoch casti oddelenych zavinacom. Udaj pred zavinacom sluzi na identifikaciu uzivatela na danom systeme a je spracovavany dorucovacim agentom. Za zavinacom je adresa domeny, kam ma byt zadany email odoslany. Stroj ktoremu sa ma posta pre tuto domenu odoslat je zistitelny z DNS zaznamu danej domeny. Pokial v DNS zaznamoch neexistuje MX zaznam, posta bude odoslana na stroj podla DNS zaznamu(A zaznam). Pokial, ale chceme nastavit postovy server pre celu domenu a nechceme, aby posta prechadzala priamo na uzivatelske stroje, je treba uviest MX zaznamy, ktore specifikuju stroj na ktory ma byt odoslana posta danej domeny ci skupinu strojov. MX zaznamy su urcene prioritou a to tak, ze prenosovy system sa pokusi najprv spojit so strojom, ktory ma najnizsiu prioritu. Pocitace s vyssimi prioritami byvaju zalozne a casto sluzia iba ako docasne uloziste, pokial nie je funkcny hlavny mail server.
$ host -t mx fi.muni.cz fi.muni.cz mail is handled by 50 relay.muni.cz. $ dig MX +short=yes fi.muni.cz 50 relay.muni.cz. $ nslookup > set type=mx > fi.muni.cz Server: 81.27.192.33 Address: 81.27.192.33#53 Non-authoritative answer: fi.muni.cz mail exchanger = 50 relay.muni.cz. Authoritative answers can be found from: fi.muni.cz nameserver = anxur.fi.muni.cz. fi.muni.cz nameserver = ns.muni.cz. fi.muni.cz nameserver = aisa.fi.muni.cz. relay.muni.cz internet address = 147.251.4.35 ns.muni.cz internet address = 147.251.4.33 aisa.fi.muni.cz internet address = 147.251.48.1 anxur.fi.muni.cz internet address = 147.251.48.3
SMTP je protokol, ktory je urceny pre prenasania elektronickej posty. Je definovany normou RFC 821(RFC 1123). Jeho rozsirenim je protokol
ESMTP(RFC 2821), ktory definuje niekolko dalsich prikazov, ktore si medzi sebou servery vymienaju. SMTP pracuje na porte 25 protokolu TCP.
Minimalna implementacia protokolu musi byt schopna odpovedat na tito prikazy: HELO, MAIL, RCPT, DATA, RSET, NOOP a QUIT.
telnet aurora.fi.muni.cz 25 Trying 147.251.50.200... Connected to aurora. Escape character is '^]'. 220 aurora.fi.muni.cz ESMTP Exim 3.36 #1 Mon, 30 Oct 2006 22:23:52 +0100 EHLO 501 Syntactically invalid EHLO argument(s) EHLO aurora.fi.muni.cz 250-aurora.fi.muni.cz Hello xkudlej at aurora [147.251.50.200] 250-SIZE 250-PIPELINING 250 HELP MAIL FROM: xkudlej@aurora.fi.muni.cz 250is syntactically correct RCPT TO: xkudlej@aisa.fi.muni.cz 250 is syntactically correct DATA 354 Enter message, ending with "." on a line by itself Subject: pozdrav od anonyma Ahoj, ako sa mas? . 250 OK id=1GeedC-0000rP-00 QUIT 221 aurora.fi.muni.cz closing connection
Protokol SMTP je neautentizovaný a nesifrovany. Server, ktory nema nastavenu ziadne pravidla pre preposielanie a preposiela vsetku postu, o ktorej preposlanie je poziadany, sa nazyva open relay. Taketo servery su/boli pouzivane pre rozosielanie spamu. Existuju databaze takychto serverov, ktore mozu byt potencionalnymi povodcami nevyziadanej posty, napr. ORDB (Open Relay Database). Dalsim riesenim, ako sa branit proti nevyziadanej poste su tzv. black listy, co su zoznamy uzivatelov a domen, ktore su filtrovane, pretoze z nich prichadza nevyziadana posta. Sofistikovanejsou metodou su spamove filtre. Jednym z programov, ktory takuto filtraciu robi je spam assassin. Ten prechadza prichodziu postu a v jej obsahu hlada znaky nevyziadanej posty. Kazdej podobnosti je priradena urcita "trestna bodova hodnota" a pokial sucet tychto trestnych bodov dosiahne administratorom urcenu hodnoty, je mail oznaceny za spam. Dalsou moznostou, ako odhalit spam, su tzv. databaze spamu. Prichodzi email je zahashovany nejakou funkciou a vysledok je porovnany s databazou.
Po nainstalovani eximu(pre jednoduchost verzie < 4) pomocou apt-get, uzivatela nasmeruje sprievodca instalaciou(opatovne spustenie je mozne programom /usr/sbin/eximconfig). Pre zakladne vygenerovanie konfiguracnych suborov, je tato moznost postacujuca. Sprievodca podla volieb(mailovy server) zmenil subory /etc/exim/exim.conf /etc/aliases /etc/mailname. V subore /etc/mailname sa nachadza meno domeny. V subore /etc/aliases sa nachadzaju alternativne pomenovania pre mailove schranky uzivatelov, napr. mail zaslany na nobody sa doruci do schranky postmaster, pricom mozu byt uvedene aj plne adresy do cudzich domen.
##Hlavna konfiguracia #Specifikuje domenu qualify_domain = kybela.localdomain #lokalne domeny local_domains = localhost:kybela.localdomain #vykonavanie reverznych DNS dotazov host_lookup = * #pre ktore IP adresy povolujem prenos sprav host_accept_relay = 127.0.0.1 : ::::1 : 192.168.0.0/24 #povolenie prikazu VRFY smtp_verify = true #maximalny pocet sprav na jedno pripojenie smtp_accept_queue_per_connection = 100 #pokial je sprava neprijata, tak ju poslat postmastrovi freeze_tell_mailmaster = true #Podoba polozky Received v hlavicke received_header_text = "Received: \ ${if def:sender_rcvhost {from ${sender_rcvhost}\n\t}\ {${if def:sender_ident {from ${sender_ident} }}\ ${if def:sender_helo_name {(helo=${sender_helo_name})\n\t}}}}\ by ${primary_hostname} \ ${if def:received_protocol {with ${received_protocol}}} \ (Exim ${version_number} #${compile_number} (Debian))\n\t\ id ${message_id}\ ${if def:received_for {\n\tfor <$received_for>}}" #kontrola prijemcu pred prijatim spravy receiver_try_verify = true ######################### ##Konfiguracia zasielania #nastavenia lokalneho dorucovania local_delivery: driver = appendfile group = mail mode = 0660 mode_fail_narrower = false envelope_to_add = true return_path_add = true file = /var/mail/${local_part} #nastavenie pre procmail procmail_pipe: driver = pipe command = "/usr/bin/procmail" return_path_add delivery_date_add envelope_to_add # check_string = "From " # escape_string = ">From " suffix = "" remote_smtp: driver = smtp # authenticate_hosts = smarthost.isp.com ###########################3 ##Konfiguracia spracovania lokalnych adries #spracovanie aliasov system_aliases: driver = aliasfile file_transport = address_file pipe_transport = address_pipe file = /etc/aliases search_type = lsearch #spracovanie suboru uzovatelov .forward userforward: driver = forwardfile file_transport = address_file pipe_transport = address_pipe reply_transport = address_reply no_verify check_ancestor check_local_user file = .forward modemask = 002 filter #nastavenie spustania procmailu, pokial uzivatel ma .procmailrc procmail: driver = localuser transport = procmail_pipe require_files = ${local_part}:+${home}:+${home}/.procmailrc:+/usr/bin/procmail no_verify ####################### #Autentifikacne nastavenie - priklad # plain: # driver = plaintext # public_name = PLAIN # client_send = "^username^password" # # login: # driver = plaintext # public_name = LOGIN # client_send = ": username : password" # # cram_md5: # driver = cram_md5 # public_name = CRAM-MD5 # client_name = username # client_secret = passwordExim ma v sebe niekolko testovacich rezimov. Jednym z nich je kontrola prepisovania adries.
$ exim -brw user sender: user@kybela.localdomain from: user@kybela.localdomain to: user@kybela.localdomain cc: user@kybela.localdomain bcc: user@kybela.localdomain reply-to: user@kybela.localdomain env-from: user@kybela.localdomain env-to: user@kybela.localdomain
Nastavení postovniho subsystemu v Linuxu - II
Nastavení postovniho subsystemu v Linuxu - I
Wikipedia
Archiv predmetu PV090
Testovani sluzeb mailserveru telnetem
Ako funguje e-mail
LINUX - Dokumentacny projekt; ISBN 80-7226-114-2, Computer Press 1998