.
Některé pole jsou strukturovaná a jejich struktura je popsaná v RFC 2822.
Povinné položky v hlavičce jsou: orig-date, from.
Příklad hlavičky
From: John Doe
To: Mary Smith
Subject: Saying Hello
Date: Fri, 21 Nov 1997 09:55:06 -0600
Message-ID: <1234@local.machine.example>
This is a message just to say hello.
So, "Hello".
MIME (Multipurpose Internet Mail Extensions)
MIME standard (RFC 2045, RFC 2046, RFC 2049)
popisuje mechanismy jak pomocí elektronické pošty definovaná v RFC 2822 posílat jiný než textový obsah (hudbu, video ....).
Dokumenty RFC, specifikující MIME jsou:
- RFC 2045 - specifikuje hlavičky používané v MIME
- RFC 2046 - definuje typy médií. Základní typy jsou dva
- Jednoduché
- text
- image
- audio
- video
- application
- Složené
- multipart - data složené z více částí
- message - data obsahující zprávu
- RFC 2049 - toto RFC popisuje, jaká část MIME musí být podporována implementací
Příklad MIME hlavičky
MIME-version: 1.0
Content-type: multipart/mixed; boundary="frontier"
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--
Příklad komunikace přes SMTP
Komunikace pak tedy může probíhat tak, že MUA předá zprávu MSA to předá zprávu MTA.
MTA předá zprávu MTA pro danou doménu (zjištěno přes DNS).
MTA doručí pomocí MDA zprávu do schránku kde ji lze pomocí MUA zpracovat.
S: 220 smtp.example.com ESMTP Postfix
C: HELO relay.example.org
S: 250 Hello relay.example.org, I am glad to meet you
C: MAIL FROM:
S: 250 Ok
C: RCPT TO:
S: 250 Ok
C: RCPT TO:
S: 250 Ok
C: DATA
S: 354 End data with .
C: From: "Bob Example"
C: To: "Alice Example"
C: Cc: theboss@example.com
C: Date: Tue, 15 Jan 2008 16:02:43 -0500
C: Subject: Test message
C:
C: Hello Alice.
C: This is a test message with 5 header fields and 4 lines in the message body.
C: Your friend,
C: Bob
C: .
S: 250 Ok: queued as 12345
C: QUIT
S: 221 Bye
SPAM (relaying, open relay, black-listy, delayed bounce, greylisting, antispamové filtry)
SPAM
Nevyžádaná pošta.
Relaying
Přeposílání emailů přes další servery.
Open relay
Server, který umožní všem bez autentizace přeposlat email do jiných sítí.
Black listy
Seznam IP adres, které jsou podezřelé z odesílání SPAMových zpráv.
Bounce
Zpráva generovaná MTA o nedoručitelnosti zprávy.
Greylisting
Typ antiSPAMového opatření. Vychází z principu, že pokud zpráva bude jednou odmítnuta pak se ji
spamer nepokusí odeslat znovu, ale "normální" MTA by se měl pokusit zprávu odeslat znovu.
Antispamové filtry
Programy snažící se rozeznat zda je email SPAM či HAM (vyžádaná zpráva). Rozpoznávání může probíhat buď na základě
analýzy textu a hlaviček zprávy (checksum zprávy, pravidla hodnotící obsah zprávy) nebo dle IP ze, které se odesílá (Blacklisting).
Poštovní klienti (IMAP a POP3)
Uživatelé se k emailům mohou dostat buď přímo na serveru kam jsou zprávy doručeny nebo si je mohou stáhnout a prohlížet na svém
osobním počítači. Ke vzdálené manipulaci s elektronickou poštou slouží mimo jiné protokoly IMAP a POP3.
Internet Mail Access Protocol (IMAP)
Poslední verze protokolu je definována RFC 3501. IMAP podporuje jak off-line tak on-line přístup k elektronické poště.
IMAP nechává zprávy na mail serveru dokud je uživatel nesmaže. Klient si tedy může ukládat lokální kopie zpráv, ale na ty je pohlíženo jako
na dočasné úložiště.
Post Office Protocol(POP3)
Poslední verze protokolu je definována RFC 2449. POP3 je stejně jako IMAP protokol určený k manipulaci s elektronickou poštou.
Na rozdíl od protokolu IMAP umožňuje pouze operaci stáhni a smaž.
Postfix
Postfix je jeden z mnoha MTA. Je šířen pod svobodnou licencí. Byl napsán v roce 1997 ve firmě IBM.
Vlastnosti
- Transport Layer Security (TLS)
- Umožňuje předávat SMTP data externím programům za účelem filtrace, greylistingu atd
- Mbox a MailDIR a virtuální domény
- Podpora pro sendmail miltery (protocoly, API)
Architektura - přijímání zpráv
|
trivial- rewrite |
Network | -> |
smtpd |
|
|
| \ |
Network | -> |
qmqpd |
-> |
cleanup |
-> |
incoming |
| / |
|
pickup
|
<- |
maildrop |
|
^ | |
Local | -> |
sendmail |
-> |
postdrop |
Architektura - doručování zpráv
|
trivial- rewrite
|
|
smtp(8)
| -> | Network |
/ |
|
|
- |
lmtp(8) |
-> | Network |
/ |
incoming |
-> |
active |
-> |
qmgr |
--- |
local |
-> | File, command |
|
|
|
\ |
- |
virtual |
-> | File |
|
deferred |
|
\ |
| pipe |
-> | Command |
Fronty zpráv
Při příchodu zprávy do systému je zpráva přeposlána přes několik front.
název | význam |
maildrop | zpráva, odeslaná z lokálního systému |
incoming | příchozí lokální nebo z Internetu |
active | přesunuté z incoming, právě zpracovávané |
deferred | dočasně odložené, z důvodů chyby |
Celý systém řídí démon Master, který spouští jednotlivé démony další služby dle potřeby.
Komponenty Postfixu
název | funkce |
sendmail |
slouží pro odeslání (vytvoření) zprávy Postfixu, je kompatibilní se Sendmailem |
pickup |
Bere zprávy z fronty maildrop a předá ji programu cleanup |
cleaner |
přidává chybějící hlavičky; informuje queue manažera o nové zprávě |
qmgr |
správce fronty; kontaktuje démony doručení (local, pipe, smtp) |
bounce |
generuje zprávu o nedoručitelnosti, případně vrátí zprávu |
defer |
generuje zprávu o nedoručitelnosti, z důvodů chyby nebo nedosažitelnosti cíle |
smtp |
zjišťuje cíl pro doručení zprávy |
smtpd |
přijímá síťová spojení; provádí kontroly |
local |
doručuje místním uživatelům |
pipe |
posílá zprávy rourou pro jiné transporty |
resolve |
rozlišuje mezi lokálním a vzdáleným doručením; může se orientovat podle transport_table |
Základní konfigurace
Konfiguraci postfixu je uložena převážně v souborech master.cf a main.cf.
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
127.0.0.1:smtp inet n - n - - smtpd
10.0.0.2:smtp inet n - n - - smtpd -o content_filter=spamassassin
spamassassin unix - n n - - pipe
user=spamassassin argv=/usr/bin/spamc -f -e /usr/lib/sendmail.postfix -oi -f ${sender} ${recipient}
pickup fifo n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr fifo n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
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
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay unix - - n - - smtp
-o fallback_relay=
showq unix n - n - - showq
error unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
old-cyrus unix - n n - - pipe
flags=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user}
cyrus unix - n n - - pipe
user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} ${user}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
127.0.0.1:10026 inet n - n - 100 smtpd
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=100
-o smtpd_hard_error_limit=120
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
název sloupce | význam |
service | název služby |
type | transport type, inet, fifo, unix |
private | omezení přístupu pouze pro Postfix |
unpriv | nízká oprávnění |
chroot | změna kořenového adresáře |
wakeup | jak často kontrolovat |
maxproc | max. počet procesů |
command + args | příkaz, -o parametry, -v upovídanost |
Formát main.cf
disable_vrfy_command = yes
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 550
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.3.3/samples
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
###################################################################
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
###################################################################
mydomain = test.com
myorigin = $myhostname
myhostname = test2.test.com
mynetworks = 127.0.0.0/8
maps_rbl_domains=sbl.spamhaus.org
# definice pro jake domeny prijima lokalne
mydestination = $myhostname, localhost.$mydomain, localhost
relay_domains = $mydestination
soft_bounce = no
# propust pouze povolene site
smtpd_recipient_restrictions = permit_mynetworks,
reject_unauth_destination
smtpd_client_restrictions =
permit_mynetworks,
reject_rbl_client sbl.spamhaus.org,
permit
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtpd_helo_restrictions = warn_if_reject,
reject_non_fqdn_hostname, reject_invalid_hostname, permit
# namapovani prichozich uzivatelu na lokalni uzivatele
virtual_alias_maps = hash:/etc/postfix/virtual
# header soubor
header_checks = regexp:/etc/postfix/header_checks
# transporty
transport_maps = hash:/etc/postfix/transport
# relay rc list
relay_recipient_maps = hash:/etc/postfix/relay_recipients
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
maildrop_destination_recipient_limit = 1
mailbox_command = /usr/bin/procmail -a
"$EXTENSION" DEFAULT=$HOME/Maildir/ MAILDIR=$HOME/Maildir
Doménový koš
Je e-mailová schránka, kam dojdou e-maily, které byly poslány do neexistující schránky na stejné doméně.
Literatura