Professional Documents
Culture Documents
ELEKTRONSKE POŠTE
Veselin Mijušković, Ljubiša Radivojević i Marko Uskoković
Linux IT Akademija
Edukacioni centar
Elektrotehnički fakultet Univerziteta u Beogradu
L301 – Administracija servisa elektronske pošte
Verzija: 0.1
1. Uvod
Elektronska pošta predstavlja najznačajniji i najviše korišćeni servis interneta. Nije netačno
reći da je Internet i razvijen kako bi se omogućila razmena elektronske pošte između udaljenih
mašina. Nastao kao servis za kopiranje tekstualnih fajlova između korisnika na istoj mašini, danas
predstavlja univerzalni način za prosleđivanje teksta i multimedijalnih sadržaja. Važno je primetiti
da poruke danas gotovo nikad ne idu direktno od jednog korisnika do drugog, već putem servera za
transport i isporuku poruka.
Komponente sistema elektronske pošte
Komponente sistema elektronske pošte se mogu definisati kao:
● MUA – Mail User Agent
● MSA – Mail Submission Agent
● MTA – Mail Transport Agent
● MDA – Mail Delivery Agent
Mail User Agent (MUA) je korisnički program za pisanje, slanje i primanje elektronske pošte.
Korisnik piše poruku koristeći običan ili formatiran (npr. HTML-om) tekst i upućuje je na e-mail
adresu primaoca. MUA ne mora da zna koji server je odgovoran za prijem pošte za e-mail adresu
primaoca, niti da sam kontaktira taj server (koji možda trenutno nije dostupan), već poruku
prosleđuje Mail Submission Agentu (MSA) svog Internet provajdera. MSA je zadužen za
prihvatanje poruka od autorizovanih korisnika, eventualno dodavanje ili ispravljanje različitih
zaglavlja poruke (npr. From: polja, ili datum) i prosleđivanje poruke Mail Transport Agentu
(MTA). MTA kontaktira server koji prima poštu za e-mail adresu primaoca, nakon što je utvrdio
koji je to server. Na tom serveru se takođe izvršava MTA, ali ovde u ulozi prijemnog agenta za
određene e-mail adrese. Kada poruku prihvati, prijemni MTA kontaktira Mail Delivery Agenta
(MDA) koji poruku isporučuje u sanduče primaoca. Primalac koristi svoj MUA za pristup i
preuzimanje poruka iz svog sandučeta.
Napomene:
● MTA1 može kontaktirati MTA2 direktno ili preko svog nadređenog MTA
● Uloge MSA, MTA i MDA komponenti često može obavljati jedan isti softver.
4
Linux IT Akademija L301 – Administracija servisa elektronske pošte
5
L301 – Administracija servisa elektronske pošte LITA
------=_20090113010354_76450
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Pozdrav!
--
Марко Ускоковић, систем администратор
Е-пошта: uskokovic@etf.rs
------=_20090113010354_76450
Content-Type: image/gif; name="crn_btmlft.gif"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="crn_btmlft.gif"
R0lGODlhOgAfALMAAAAAAK2traWlpZmZmcXFxWZmZv///+Dg4A8QEnZ2drKysszMzIeHiMDAwP//
/wAAACH5BAUUAA4ALAAAAAA6AB8AAATLEJBAaz0plc27/2AYSoFgnuahrmzrvnCsSmht21aul3d/
0r6gcEgEnnbIJJJoI1GCS6a0Zpxar6YqdnvTabng3jcctozJQ6VifUaH224uPI6d0632uzRPV+b4
ekMSClMDhoeIA1dKg4FkEgRXiZOIYAaAXElHOpcEhFiTdAadn45QSKMADJ56fkKjl6ulkpSGUxaw
saymU7m6s61+Fb6XkJ5ryMnKa1FbxKkAC9LT1NXTBNjZ2tvcBA3f4N/PsADlAAjo6err7O3u7hEA
Ow==
------=_20090113010354_76450--
6
Linux IT Akademija L301 – Administracija servisa elektronske pošte
POP3
Post Office Protocol verzije 3 je protokol kojim klijenti preuzimaju pristiglu poštu sa servera
na svoj računar. Izvršava se na standardnom TCP portu 110, odnosno 995 za SSL enkriptovane
konekcije. Namenjen je prvenstveno za korisnike koji nemaju stalnu vezu sa serverom, već prilikom
povezivanja na server preuzimaju sve poruke na lokalni računar za kasnije čitanje. Poruke se mogu i
čuvati na serveru, mada je za takvu upotrebu bolje koristiti IMAP. Opisan je RFC-om 1939.
Evo primera komunikacije između klijenta i servera:
turncoat@bot:~$ telnet localhost 110 1 120
Trying 127.0.0.1... 2 200
Connected to localhost. .
Escape character is '^]'. RETR 1
+OK Hello there. +OK 120 octets
USER korisnik <poruka>
+OK Password required. .
PASS sifra DELE 1
+OK logged in. +OK message 1 deleted
LIST QUIT
+OK 2 messages (320 octets) +OK POP3 server signing off
7
L301 – Administracija servisa elektronske pošte LITA
IMAP4
Internet Message Access Protocol verzije 4 je zajedno sa POP3 protokolom, najzastupljeniji
protokol za pristup i preuzimanje pristigle pošte. Izvršava se na standardnom TCP portu 143,
odnosno 993 za SSL enkriptovane konekcije. Namenjen je prvenstveno za korisnike koji maju
stalnu vezu sa serverom i koji žele da svu svoju poštu čuvaju na serveru. Za razliku od POP3
protokola IMAP4 podržava korišćenje poddirektorijuma sandučeta, paralelan pristup sandučetu od
strane više klijenata, parcijalno preuzimanje poruka (npr. samo telo, a ne i attachment), označavanje
poruka (pročitana, odgovorena...) i pretraživanje poruka na serveru. Definisan je RFC-om 3501.
Primer komunikacije:
uskokovic@kondor:~$ telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE SORT IDLE STARTTLS]
Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc. See COPYING for
distribution information.
a001 LOGIN korisnik sifra
a001 OK LOGIN Ok.
a002 SELECT Inbox
* FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent)
* OK [PERMANENTFLAGS (\Draft \Answered \Flagged \Deleted \Seen)] Limited
* 8080 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1107851339] Ok
* OK [MYRIGHTS "acdilrsw"] ACL
a002 OK [READ-WRITE] Ok
a006 LIST "Inbox" "*"
* LIST (\Unmarked \HasNoChildren) "." "INBOX.Drafts"
* LIST (\Unmarked \HasNoChildren) "." "INBOX.Sent"
* LIST (\Unmarked \HasNoChildren) "." "INBOX.Trash"
a007 LOGOUT
IN MX 10 mail.lita.internal.
mail IN A 10.0.0.2
8
Linux IT Akademija L301 – Administracija servisa elektronske pošte
2. Sendmail
Uvod
Sendmail je napisan početkom osamdesetih godina prošlog veka na Berkli Univerzitetu.
Podržava veliki broj protokola za prosleđivanje pošte, uključujući i SMTP i UUCP. Danas više od
30% aktivnih mejl servera izvšava sendmail. Veb sajt i dokumentacija projekta se nalazi na adresi
http://www.sendmail.org/
Instalacija
Konfiguracioni fajlovi
Konfiguracioni fajlovi Sendmaila se smeštaju u /etc/mail direktorijum. Sendmail iz ovog
direktorijuma čita sendmail.cf i submit.cf, kao i fajlove koji se referenciraju odgovarajućim
direktivama iz ova dva fajla.
Fajlovi sa ekstenzijom .cf su prilično dugački i nečitljivi. To su fajlovi koje čita Sendmail, a
mogu se generisati korišćenjem makroa m4 na osnovu fajlova sa ekstenzijom .mc i m4.
Generisanje .cf fajlova od .mc i .m4 fajlova se vrši komandom m4 (sa odgovarajućim
parametrima), ali je to lakše uraditi pokretanjem "make -f /etc/mail/Makefile" ili, još lakše,
komandom sendmailconfig.
Sendmail koristi Berkli bazu za pojedine konfiguracione fajlove kako bi promene u toj
konfiguraciji mogle da se prave i bez restartovanja Sendmaila. Fajlovi baza su npr. aliases.db ili
access .db, i oni se komandom prave od odgovarajućih aliases i access fajlova koji sadrže čitljiv
tekst. Komanda makemap se koristi za pravljenje access.db fajla, a newaliases za aliases.db. Na
Debian i Ubuntu distribucijama komanda sendmailconfig će generisati i ove fajlove automatski,
dok se kod RedHata i Fedore ovi fajlovi automatski kreiraju prilikom restartovanja Sendmaila.
9
L301 – Administracija servisa elektronske pošte LITA
Prosleđivanje pošte
Lokalno prosleđivanje
Osnovni način prosleđivanje pošte koje Sendmail može da radi je lokalno prosleđivanje
između lokalnih korisnika na mašini. Da bi se dobilo ovakvo ponašanje potrebna su sledeća
podešavanja u /etc/mail/sendmail.mc fajlu:
divert(0)dnl
VERSIONID(`$Id: generic-linux.mc,v 8.1 1999/09/24 22:48:05 gshapiro Exp $')
OSTYPE(linux)dnl
DOMAIN(generic)dnl
MAILER(local)dnl
Ovako konfigurisan Sendmail će omogućavati lokalnim korisnicima da prosleđuju poštu jedni
drugima, korišćenjem korisničkog imena kao To: adrese. Pošta će biti isporučivana u mbox formatu
u fajl /var/mail/korisnik dok je korisnički program kao što je mail ili mutt ne preuzme i prebaci u
korisnikov home direktorijum.
Udaljeno prosleđivanje
Za prosleđivanje pošte namenjene za udaljene mašine, neophodno je podesiti da Sendmail
sluša na portu 25:
DAEMON_OPTIONS(`Family=inet, Name=MTA-v4, Port=smtp')dnl
Zatim, potrebno je reći Sendmailu za koje domene on prima poštu:
FEATURE(`use_cw_file')dnl
Domene za koje Sendmail prima poštu treba upisati u fajl /etc/mail/local-host-names .
Na kraju, neophodno je definisati smtp mailera:
MAILER(`smtp')dnl
Access liste za relaying
Ukoliko je potrebno nekim mašinama omogućiti relaying kroz naš mail server, to se radi
korišćenjem access baze. Najpre treba uključiti odgovarajuću mogućnost u Sendmail:
FEATURE(`access_db', , `skip')dnl
Zatim u fajlu /etc/mail/access treba dozvoliti relaying određenoj mašini:
Connect:147.91.13.7 RELAY
Umesto ključne reči RELAY, može da se navede i REJECT (za odbijanje maila uz
objašnjenje) ili DISCARD (za odbijanje maila bez objašnjenja).
Fajl access.db se pravi na osnovu access fajla, makemap komandom:
makemap hash /etc/mail/access < /etc/mail/access
Prosleđivanje nadređenom serveru
Ukoliko se koristi nadređeni (smart) server, potrebno je dodati sledeću liniju u konfiguraciju:
define(`SMART_HOST', `zmaj.etf.rs.')dnl
Aliasi
Fajl /etc/mail/aliases (ili /etc/aliases) služi za definisanje aliasa – e-mail adresa koje se
prosleđuju navedenim korisnicima ili e-mail adresama, ili na više destinacija (liste). Fajl aliases.db
koga Sendmail koristi se kreira newaliases komandom.
10
Linux IT Akademija L301 – Administracija servisa elektronske pošte
Prepisivanje adresa
Iako je posao MUA programa da dodaje zaglavlja poruke sa ispravnim informacijama u
From:, To: i ostalim poljima, ponekad je neophodno forsirati prepisivanje adresa – masquerading.
Za to je potrebno navesti domen na koji se prepisuju zaglavlja (MASQUERADE_AS), da li se
prepisuju samo zaglavlja ili i koverta i za koje domene treba da se radi prepisivanje
(MASQUERADE_DOMAIN).
MASQUERADE_AS(`etf.rs')dnl
FEATURE(always_add_domain)dnl
FEATURE(masquerade_entire_domain)dnl
FEATURE(masquerade_envelope)dnl
FEATURE(allmasquerade)dnl
MASQUERADE_DOMAIN(`etf.rs')dnl
MASQUERADE_DOMAIN(`localhost')dnl
MASQUERADE_DOMAIN(`localhost.localdomain')dnl
MASQUERADE_DOMAIN(`turncoat.etf.rs')dnl
Virtualni domeni
Ako je potrebno hostovati više domena, pri čemu su korisnici sa jednog domena različiti od
korisnika sa drugog domena, potrebno je definisati virtualne domene:
FEATURE(`virtusertable', `hash /etc/mail/virtusers')
VIRTUSER_DOMAIN(`lita.internal')
VIRTUSER_DOMAIN(`lita.external')
U fajlu /etc/mail/virtusers se definišu odredišta za virtualne e-mail adrese:
info@lita.internal \student
@lita.external uskokovic@etf.bg.ac.yu ,uskokovic@gmail.com
SMTP autentifikacija
Za SMTP autentifikaciju potrebno je koristiti SASL (Simple Authentication and Security
Layer) koji će Sendmailu autentifikovati korisnike (npr. putem PAM-a).
sudo apt-get install sasl2-bin
Da bi se omogućio SASL treba prepraviti START=yes u fajlu /etc/default/saslauthd.
include(`/etc/mail/sasl/sasl.m4')dnl
Da bi se generisao heš za SMTP AUTH PLAIN komandu:
perl -MMIME::Base64 -e 'print encode_base64("\000student\@etf.rs\000student")'
SSL konekcije
Da bi se uključila podrška za TLS (SSL) potrebno je dodati liniju:
include(`/etc/mail/tls/starttls.m4')dnl
11
L301 – Administracija servisa elektronske pošte LITA
protocol imap {
listen = 127.0.0.1:143 # nekriptovani pristup samo lokalno
ssl_listen = 147.91.13.160:943 # ssl pristup na javnoj adresi
mail_plugins = quota imap_quota
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
mail_plugins = quota
}
auth default {
mechanisms = plain
passdb pam {
}
userdb passwd {
}
user = root
}
plugin {
quota = maildir:storage=10240:messages=10000 # 10MB i 10000 poruka
}
12
Linux IT Akademija L301 – Administracija servisa elektronske pošte
protocol lda {
postmaster_address = uskokovic@etf.rs
hostname = bot.etf.rs
mail_plugins = quota
sendmail_path = /usr/lib/sendmail
auth_socket_path = /var/run/dovecot/auth-master
}
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = mail # User running Dovecot LDA
group = mail # Or alternatively mode 0660 + LDA user in this group
}
}
Da bi maildir kvote ispravno radile, potrebno je da Sendmail koristi Dovecotov LDA za
isporuku pošte korisnicima. Da bi se to omogućilo potrebno je u sendmail.mc dodati sledeće
direktive umesto direktive MAILER(local):
FEATURE(`local_procmail', `/usr/lib/dovecot/deliver',`deliver -d $u')
MODIFY_MAILER_FLAGS(`LOCAL', `-f')
MAILER(procmail)
13