SMTP co to takiego? SMTP Simple Mail Transfer Protocol (Protokół Prostego Przesyłania Poczty) RFC 2821 Protokół niezawodnego przesyłania wiadomości tekstowych (e-mail) za pomocą prostych komend tekstowych.
SMTP jak to działa? serwer pocztowy domeny abc.pl Zapytanie DNS o rekord MX MAIL FROM: <user@abc.pl> 53:dns serwer DNS domeny xyz.pl serwer pocztowy domeny xyz.pl dialog SMTP 25:smtp klient SMTP Dialog SMTP 250 OK 25:smtp 110:pop3 dialog POP3 klient POP3
Dialog SMTP Rozpoczęcie połączenia Przedstawienie się HELO/EHLO smtp.abc.pl Przedstawienie się 220 smtp.xyz.pl SMTP Rozpoczęcie wprowadzenia treści DATA Przygotowanie na transmisję treści 354 go ahead Podanie nadawcy MAIL FROM:<user1@abc.pl> Przyjęcie polecenia 250 smtp.xyz.pl 250-PIPELINING 250-SIZE 10406346 250-AUTH LOGIN MD5 Wprowadzenie treści... Przyjęcie treści 250 ok Przyjęcie polecenia 250 smtp.xyz.pl Zakończenie transmisji QUIT Podanie odbiorcy RCPT TO: <user2@xyz.pl Przyjęcie polecenia 250 smtp.xyz.pl Przyjęcie zakończenia tranmisji 221 smtp.xyz.pl
Komendy SMTP i ESMTP (fragment) ESMTP SMTP komenda Opis komenda Opis AUTH autoryzacja DATA przesłanie treści listu DSN EHLO ETRN PIPELINING SIZE powiadamianie o statusie doręczenia spis obsługiwanych komend ESMTP przesłanie kolejki listów przeznaczonych do podłączającego się serwera potokowe przesyłanie wiadomości określenie wielkości przesyłanej wiadomości HELO HELP MAIL NOOP QUIT RCPT RSET nawiązanie połączenia SMTP wypis dostępnych komend nadawca listu podtrzymywanie połączenia zakończenie sesji SMTP odbiorca listu przerwanie sesji SMTP 8BITMIM E wsparcie dla 8bitowego kodowania wiadomości VRFY sprawdzenie obecności skrzynki pocztowej o podanej nazwie RESTART wznowienie przesyłania wiadomości przy rozłączeniu sesji
Kody zwrotne SMTP 1xy Wstępna akceptacja komendy Komenda zaakceptowana, ale oczekiwanie na dalszą decyzję użytkownika. Używane tylko w ESMTP 2xy Akceptacja komendy kod Komenda zaakceptowana, oczekiwanie na następną. 3xy Pośrednia akceptacja komendy Komenda zaakceptowana, ale oczekiwanie na dalszą jej część. 4xy Przejściowe odrzucenie komendy Komenda nie zaakceptowana, tymczasowo 5xy Permanentne odrzucenie komendy Komenda nie zaakceptowana, ostatecznie Opis 220 Usługa aktywna, oczekiwanie na komendy 250 akceptacja komendy 354 oczekiwanie na wprowadzanie treści listu 450 skrzynka użytkownika zajęta (np. zablokowana przez proces) 452 skrzynka użytkownika przepełniona 500 brak takiego polecenia 501 błąd w składni polecenia 552 brak miejsca na dysku (serwer)
Elementy systemu pocztowego MUA (Mail User Agent) Program używany przez odbiorcę końcowego do wysyłania, odbierania, filtrowania, czytania, pisania listów itp. (Mozilla Thunderbird, MS Outlook, pine, mutt ) MTA (Mail Transfer Agent) Część systemu pocztowego zajmująca się odbiorem poczty i/lub jej dalszym przekazaniem do innych serwerów (Postfix, qmail, MS Exchange) MDA (Mail Delivery Agent) Część systemu pocztowego zajmująca się dostarczaniem poczty do lokalnego użytkownika
SMTP przekazywanie poczty między MUA, MTA i MDA MUA 1 przesłanie wiadomości przez SMTP od użytkownika do serwera MTA X przesłanie wiadomości do właściwego serwera SMTP odbiorcy MTA Y MUA 2 odbiór wiadomości przez adresata poprzez POP3/IMAP MDA X przekazanie wiadomości do obróbki odbiór wiadomości przez adresata poprzez POP3/IMAP MDA Y przekazanie wiadomości do obróbki MUA 3
Metody antyspamowe sprawdzanie przez DNSBL weryfikacja przez adres IP greylisting wstępne odrzucanie sesji SMTP MTA analiza danych kopertowych sesji SMTP sprawdzanie poprawności parametrów komendy HELO/EHLO, wpisów MX/A w DNS itp. Filtry bayes'owskie analiza statystyczna słów w liście system challange-response prośba o potwierdzenie nadania listu MDA & MUA
Architektura serwera SMTP na przykładzie programu Postfix smtpd trivial-rewrite smtp cleanup qmgr pickup incoming active local maildrop deferred pipe sendmail postdrop MDA virtual
Postfix konfiguracja (fragment) /etc/postfix/main.cf myhostname = server.xyz.pl mydomain = xyz.pl myorigin = $mydomain inet_interfaces = all mydestination = $myhostname,$myhostname.$mydomain,$mydomain mynetworks = 192.168.1.0/24, 127.0.0.0/8 relay_domains = $mydestination smtpd_sender_restrictions = permit_mynetworks, warn_if_reject, reject_non_fqdn_sender, reject_unknown_sender_domain, permit smtpd_helo_restrictions = permit_mynetworks local_recipient_maps = $alias_maps unix:passwd.byname hash:/etc/postfix/vmailbox header_checks = regexp:/etc/postfix/header_checks body_checks = regexp:/etc/postfix/body_checks message_size_limit = 50000000 smtpd_recipient_limit = 50 home_mailbox = Maildir/ smtpd_banner = $myhostname HTTP Apache 2.1
Postfix konfiguracja c.d.(fragment) /etc/postfix/master.cf #service type private unpriv chroot wakeup maxproc command + args smtp inet n - - - - smtpd pickup fifo n - - 60 1 pickup defer unix - - - - 0 bounce 127.0.0.1:10026 inet n - - - - smtpd -o content_filter service nazwa usługi type rodzaj usługi private dostęp do usługi tylko z poziomu systemu pocztowego? unpriviledged usługa uruchomiona na prawach roota? chroot usługa uruchomiona w izolowanym środowisku? wake up time okres przymusowej aktywacji usługi process limit ilość maksymalnie uruchomionych procesów danej usługi command+args wywoływany demon z argumentami
Aliasy pocztowe w Postfix /etc/aliases /etc/postfix/aliases test: user1 root: user1 postmaster: root... serwer pocztowy domeny xyz.pl /etc/postfix/aliases test@xyz.pl test@xyz.pl => user1@xyz.pl user1@xyz.pl /home/user1/mailbox
Wirtualne domeny pocztowe w Postfix /etc/postfix/virtual /etc/postfix/virtual test@abc.pl postmaster@abc.pl... user1@xyz.pl postmaster@xyz.pl serwer pocztowy domeny xyz.pl /etc/postfix/main.cf virtual_alias_domains = abc.pl virtual_alias_maps = hash:/etc/postfix/virtual test@abc.pl wirtualny serwer pocztowy domeny abc.pl /etc/postfix/virtual test@abc.pl => user1@xyz.pl user1@xyz.pl /home/user1/mailbox
Wirtualne skrzynki pocztowe w Postfix /etc/postfix/vmailbox /etc/postfix/vmailbox abc.pl test@abc.pl postmaster@abc.pl... abc abc.pl/test abc.pl/postmaster serwer pocztowy domeny xyz.pl /etc/postfix/main.cf virtual_mailbox_base = /var/spool/virtual virtual_mailbox_maps = hash:/etc/postfix/vmailbox virtual_maps=hash:/etc/postfix/virtual virtual_uid_maps = static:8 virtual_gid_maps = static:8 transport_maps = hash:/etc/postfix/transport /etc/postfix/transport wirtualny serwer pocztowy domeny abc.pl /etc/postfix/vmailbox test@abc.pl => /var/spool/.../test abc.pl virtual: test@abc.pl /var/spool/virtual/abc.pl/test /var/spool/virtual/abc.pl/user1
XMPP (extensible Messaging and Presence Protocol) <?xml version="1.0"?> <stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" to="example.org"> <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='example.org' id='1461777714'> Protokół XMPP/Jabber CCC.NET mary@ccc.net <iq type="set" id="auth_2" to="example.org" > <query xmlns="jabber:iq:auth"> <username>alice</username> <password>password</password> <resource>work</resource> </query> </iq> <iq from="example.org" id='auth_2' type='result'/> AAA.COM BBB.ORG <message to="bob@example.org" > <subject>hello!</subject> <body>can't wait to see you tomorrow.</body> </message> <presence type="unavailable" > <status>logged out</status> </presence> </stream:stream> </stream:stream> bob@aaa.com alice@aaa.com frank@bbb.org
protokoly SMTP i XMPP - porównanie cecha SMTP XMPP format wiadomości bezpieczeństwo złożoność implementacji możliwości oparty o proste komendy tekstowe liczne ułomności protokołu pozwalające na fałszowanie wiadomości, zalewanie niechcianymi wiadomościami,itp rozbicie dostarczania wiadomości na szereg etapów dostarczanie wiadomości tylko do serwera, brak automatycznego powiadamiania oparty o język XML umożliwiający rozbudowę i implementację złożonych operacji mechanizm autoryzacji połączenia spójny, bezpośredni strumień XML do użytkownika dostarczanie wiadomości w trybie 'instant'