<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>ITBlog: Tag SenderID</title>
    <link>http://itblog.grono.net/articles/tag/senderid</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>grono.net</description>
    <item>
      <title>Walka ze spamfiltrami</title>
      <description>&lt;p&gt;Zdecydowa&#322;em si&#281; na napisanie tego kr&#243;tkiego tekstu po wielokrotnych pr&#243;bach skutecznego dostarczenia poczty do serwisu pocztowego, kt&#243;rego w&#322;a&#347;cicielem jest pewien &#347;wiatowy potentat z bran&#380;y software. Mowa tu o serwisie hotmail.com i wszystkich przystawkach do niego (live.com, msn.com etc.)&lt;/p&gt;

&lt;p&gt;Na wst&#281;pie warto przytoczy&#263; par&#281; fakt&#243;w.

Whois dla domeny &lt;a href="http://grono.net"&gt;grono.net&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;
[...]
Domain servers in listed order:
      DNS1.GRONO.NET
      DNS2.GRONO.NET
&lt;/pre&gt;

	&lt;p&gt;Odpytanie naszych serwer&#243;w dns o rekordy NS dla strefy grono.net&lt;/p&gt;


&lt;pre&gt;
mieki@mieki-laptop:~$ host -t ns grono.net dns1.grono.net
Using domain server:
Name: dns1.grono.net
Address: 193.33.58.3#53
Aliases: 

grono.net name server dns1.grono.net.
grono.net name server dns2.grono.net.
&lt;/pre&gt;

oraz:
&lt;pre&gt;
mieki@mieki-laptop:~$ host -t ns grono.net dns2.grono.net
Using domain server:
Name: dns2.grono.net
Address: 193.33.58.4#53
Aliases: 

grono.net name server dns2.grono.net.
grono.net name server dns1.grono.net.

&lt;/pre&gt;

&lt;p&gt;Czyli jak wida&#263;, delegacja na nasze serwery jest zrobiona w spos&#243;b poprawny.
Serwis grono.net posiada przyznan&#261; przez &lt;a href="http://en.wikipedia.org/wiki/RIPE"&gt;&lt;span class="caps"&gt;RIPE&lt;/span&gt;&lt;/a&gt; klas&#281; adres&#243;w 193.33.59.0/23. Jest to pula &lt;a href="http://en.wikipedia.org/wiki/Provider_Independent_Address_Space"&gt; PI&lt;/a&gt; i rozg&#322;aszamy j&#261; z naszego routera (&lt;a href="http://www.ripe.net/fcgi-bin/whois?form_type=simple&amp;#38;full_query_string=&amp;#38;searchtext=AS42782&amp;#38;submit.x=17&amp;#38;submit.y=15&amp;#38;submit=Search"&gt;&lt;span class="caps"&gt;AS42782&lt;/span&gt;&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;Jak wiadomo, powszechnym problemem w sieci internet jest wsz&#281;dobylski spam. Wiadomo&#347;ci o tre&#347;ci reklamowej na przyk&#322;ad o powi&#281;kszaniu pewnej cz&#281;&#347;ci cia&#322;a. Najcz&#281;&#347;ciej s&#261; rozsy&#322;ane z zainfekowanych wirusami (lub koniami troja&#324;skimi) komputer&#243;w. Posiadacze zara&#380;onego peceta nie s&#261; &#347;wiadomi, &#380;e mog&#261; rozsy&#322;a&#263; kilkaset maili na sekund&#281;. Odbiorcami spamu s&#261; maile u&#380;ytkownik&#243;w, zbierane do bazy przez spam-harvestery (czyli takie skrypty, monitoruj&#261;ce witryny webowe, grupy dyskusyjne i inne zasoby sieci w poszukiwaniu prawid&#322;owych adres&#243;w email), a tak&#380;e pobierane s&#261; z ksi&#261;&#380;ek adresowych popularnych program&#243;w pocztowych na zainfekowanych komputerach.&lt;/p&gt;
&lt;p&gt;Protok&#243;&#322; przesy&#322;ania poczty (&lt;a href="http://en.wikipedia.org/wiki/SMTP"&gt;&lt;span class="caps"&gt;SMTP&lt;/span&gt;&lt;/a&gt;) zosta&#322; zaprojektowany we wczesnych latach osiemdziesi&#261;tych XX wieku i praktycznie w niezmienionej formie pozosta&#322; do dzi&#347;. Ma on szereg b&#322;&#281;d&#243;w, kt&#243;rych istnienie mo&#380;na by&#322;o przewidzie&#263; ju&#380; na poziomie projektowania samego protoko&#322;u. Jednym z powa&#380;niejszych z nich jest mo&#380;liwo&#347;&#263; podszywania si&#281; pod nadawc&#281;. Do tego mo&#380;na u&#380;y&#263; zwyk&#322;ego programu telnet i udawa&#263; klienta pocztowego.&lt;/p&gt;

	&lt;p&gt;Poni&#380;ej zaprezentowa&#322;em pr&#243;b&#281; wys&#322;ania poczty z konta na nieistniej&#261;cej domenie:&lt;/p&gt;


&lt;pre&gt;
mieki@mieki-laptop:~$ telnet mx.grono.net 25
Trying 193.33.58.136...
Connected to mx.grono.net.
Escape character is '^]'.
220 dakota.nemo.pl Microsoft ESMTP MAIL Service, Version: 6.0.3790.3959 ready at  Thu, 4 Oct 2007 23:51:24 +0200 
ehlo jakasdomena.pl
250-dakota.nemo.pl Hello [82.210.166.16]
250-TURN
250-SIZE
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250-TLS
250-STARTTLS
250-X-EXPS GSSAPI NTLM LOGIN
250-X-EXPS=LOGIN
250-AUTH GSSAPI NTLM LOGIN
250-AUTH=LOGIN
250-X-LINK2STATE
250-XEXCH50
250 OK
mail from: piotr@jakasdomena.pl
250 2.1.0 piotr@jakasdomena.pl....Sender OK
rcpt to: p.milczarek@grono.net
250 2.1.5 p.milczarek@grono.net 
data
354 Start mail input; end with &amp;lt;CRLF&amp;gt;.&amp;lt;CRLF&amp;gt;
From: Piotr Z JakiejsDomeny &amp;lt;piotr@jakasdomena.pl&amp;gt;
Subject: Przyk&#322;adowa wiadomosc          

Tutaj tresc wiadomosci, czy to dojdzie ?

.
250 2.6.0 &amp;lt;DAKOTAogkJXrRjbDt3H000001ad@dakota.nemo.pl&amp;gt; Queued mail for delivery
quit
221 2.0.0 dakota.nemo.pl Service closing transmission channel
Connection closed by foreign host.
&lt;/pre&gt;

Dopiero po zajrzeniu w nag&#322;&#243;wki mo&#380;emy stwierdzi&#263;, &#380;e pole From jest sfa&#322;szowane. 
&lt;pre&gt;
Received: from jakasdomena.pl ([82.210.166.16]) by dakota.nemo.pl with Microsoft SMTPSVC(6.0.3790.3959);
         Thu, 4 Oct 2007 23:52:26 +0200

&lt;/pre&gt;
podczas gdy:

&lt;pre&gt;
mieki@mieki-laptop:~$ host jakasdomena.pl
jakasdomena.pl has address 83.133.126.177
jakasdomena.pl mail is handled by 0 jakasdomena.pl.
&lt;/pre&gt;

	&lt;p&gt;Czyli host 82.210.166.16 nie jest ani wpisem &lt;span class="caps"&gt;IN A&lt;/span&gt; dla jakasdomena.pl, ani wpisem MX w tej domenie (wyb&#243;r domeny by&#322; ca&#322;kowicie przypadkowy).&lt;/p&gt;


	&lt;p&gt;Aby zapobiec procederom tego typu jak powy&#380;szy, w Kwietniu 2006 powsta&#322; dokument &lt;a href="http://tools.ietf.org/html/rfc4408"&gt;&lt;span class="caps"&gt;RFC&lt;/span&gt;&lt;/a&gt; opisuj&#261;cy jak definiowa&#263; na serwerach dns rekordy dotycz&#261;cych uprawnie&#324; wysy&#322;ania poczty.&lt;/p&gt;


	&lt;p&gt;Typ rekordu, w jakim definiujemy kt&#243;re serwery mog&#261; rozsy&#322;a&#263; poczt&#281; z danej domeny, a kt&#243;re nie, to &lt;span class="caps"&gt;TXT&lt;/span&gt;. Przyk&#322;adowy rekord dla przyk&#322;adowej domeny &lt;a href="http://grono.net"&gt;grono.net&lt;/a&gt; :-)&lt;/p&gt;


&lt;pre&gt;
mieki@mieki-laptop:~$ host -t txt grono.net
grono.net descriptive text "v=spf1 +ip4:193.33.58.0/23 -all" // o tym teraz
grono.net descriptive text "spf2.0/mfrom,pra +ip4:193.33.58.0/23 -all" // natomiast o tym troche p&#243;&#378;niej
&lt;/pre&gt;

	&lt;p&gt;Ten rekord oznacza deklaracje mechanizmu Sender Policy Framework dla domeny grono.net. Pierwszym elementem rekordu &lt;span class="caps"&gt;SPF&lt;/span&gt; jest deklaracja wersji czyli &lt;code&gt;"v=spf1"&lt;/code&gt;, nast&#281;pnie wyst&#281;puje lista element&#243;w dla kt&#243;rych ustalamy polityk&#281; rozsy&#322;ania poczty.&lt;/p&gt;


Ka&#380;dy taki element sk&#322;ada si&#281; z kilku cz&#281;&#347;ci.
Cz&#281;&#347;&#263; pierwsza &amp;#8211; kwalifikator &amp;#8211; jest to ma&#322;y znaczek od kt&#243;rego zaczyna si&#281; element, wskazuj&#261;cy co zrobi&#263; z poczt&#261; przychodz&#261;c&#261; od danego &lt;cite&gt;elementu&lt;/cite&gt;. Wszystkie poni&#380;sze elementy przedstawi&#322;em w maksymalnym uproszczeniu:
&lt;ul&gt;
 &lt;li&gt; &amp;#8221;+&amp;#8221; &amp;#8211; whitelisting &amp;#8211; czyli bezwarunkowe zaakceptowanie poczty i oznaczenie jej jako nie &lt;span class="caps"&gt;SPAM&lt;/span&gt;&lt;/li&gt;
 &lt;li&gt; &amp;#8221;-&amp;#8221; &amp;#8211; blacklisting &amp;#8211; oznaczenie poczty jako niechciana/niepo&#380;&#261;dana&lt;/li&gt;
 &lt;li&gt; &amp;#8221;&amp;tilde;&amp;#8221; &amp;#8211; greylisting &amp;#8211; w skr&#243;cie: zastosuj swoje mechanizmy filtrowania poczty i detekcji spamu&lt;/li&gt;
&lt;/ul&gt;
Istnieje jeszcze kwalifikator &amp;#8221;?&amp;#8221;, kt&#243;ry dzia&#322;a podobnie do &amp;#8221;&amp;tilde;&amp;#8221;, ale nie b&#281;dziemy si&#281; zag&#322;&#281;bia&#263; w szczeg&#243;&#322;y.

Cz&#281;&#347;&#263; druga &amp;#8211; typ obiektu:
&lt;ul&gt;
 &lt;li&gt; &amp;#8220;a&amp;#8221; &amp;#8211; rekord &lt;span class="caps"&gt;IN A&lt;/span&gt; w danej domenie np +a &amp;#8211; oznacza deklaracje o wysy&#322;aniu poczty z rekordu (b&#261;d&#378; rekord&#243;w) &lt;span class="caps"&gt;IN A&lt;/span&gt; dla samej domeny&lt;/li&gt;
 &lt;li&gt; &amp;#8220;ip4&amp;#8221; &amp;#8211; oznacza zakres host&#243;w przedstawiony w postaci &lt;span class="caps"&gt;CIDR&lt;/span&gt;, b&#261;d&#378; jeden host bez maski podsieci np. -ip4:193.33.58.0/23&lt;/li&gt;
 &lt;li&gt; &amp;#8220;mx&amp;#8221; &amp;#8211; oznacza wpis lub wpisy mx w danej domenie, na przyk&#322;ad -mx oznacza deklaracje, &#380;e z serwer&#243;w pocztowych nie rozsy&#322;amy poczty :&amp;gt;&lt;/li&gt;
 &lt;li&gt; &amp;#8220;all&amp;#8221; &amp;#8211; oznacza wszystkie inne niezdefiniowane w &lt;span class="caps"&gt;SPF&lt;/span&gt;&lt;/li&gt;

	&lt;p&gt;Cz&#281;&#347;&#263; trzecia (opcjonalna) &amp;#8211; warto&#347;&#263; parametru:
        W przypadku domeny grono.net u&#380;yty tylko raz &amp;#8211; chodzi o &amp;#8220;193.33.58.0/23&amp;#8221; &amp;#8211; czyli klas&#281; adres&#243;w IP kt&#243;r&#261; posiada Grono.net&lt;/p&gt;


&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Sender_Policy_Framework"&gt;&lt;span class="caps"&gt;SPF&lt;/span&gt;&lt;/a&gt; przyj&#261;&#322; si&#281; jako standard je&#380;eli chodzi o polityk&#281; rozsy&#322;ania poczty. Jednak&#380;e istnieje sobie firma na &#347;wiecie o nazwie Microsoft, kt&#243;ra stwierdzi&#322;a, &#380;e stworzy sw&#243;j w&#322;asny mechanizm polityki walki z poczt&#261; &amp;#8211; SenderID. Do deklaracji tego mechanizmu s&#322;u&#380;y w&#322;a&#347;nie drugi rekord &lt;span class="caps"&gt;TXT&lt;/span&gt;. &lt;/p&gt;

	&lt;p&gt;Niestety, portale o kt&#243;rych wspomnia&#322;em na samym pocz&#261;tku wykorzystuj&#261; t&#281; drug&#261; technologi&#281;.(Nie wnikam ju&#380; kto jest rzeczonych serwis&#243;w). &lt;a href="http://en.wikipedia.org/wiki/Sender_ID"&gt;SenderID&lt;/a&gt; nie wnosi tak naprawd&#281; nic wi&#281;cej do walki ze spamem ni&#380; &lt;span class="caps"&gt;SPF&lt;/span&gt; (nawet sk&#322;adnia jest identyczna je&#380;eli chodzi o deklaracje obiekt&#243;w). Faktem jest, &#380;e wprowadza bardziej szczeg&#243;&#322;owe sprawdzanie nag&#322;&#243;wk&#243;w kt&#243;re pojawiaj&#261; si&#281; w poczcie (&lt;code&gt;From:&lt;/code&gt; i &lt;code&gt;Return Ptah:&lt;/code&gt;), oraz tego co jest podawane po &lt;code&gt;HELO/EHLO&lt;/code&gt;.&lt;/p&gt;


	&lt;p&gt;Niestety po mimo zastosowania si&#281; do rad potentata z Redmond, nie ma skutecznego sposobu na dostarczenie poczty do adresata, kt&#243;ry ma konto przyk&#322;adowo na serwisie &lt;a href="http://hotmail.com"&gt;hotmail.com&lt;/a&gt;.&lt;/p&gt;


Po d&#322;ugich i mozolnych testach uda&#322;o nam si&#281; zaobserwowa&#263; 2 zachowania serwisu:
&lt;ol&gt;
&lt;li&gt;Poczta l&#261;duje w folderze Junk, z kt&#243;rego jest automagicznie wywalana po 10 dniach&lt;/li&gt;
&lt;li&gt;Poczta wcale nie dociera do adresata.&lt;/li&gt;
&lt;/ol&gt;
W jednym i drugim przypadku serwer smtp hotmaila zwraca:

&lt;pre&gt;250 &amp;lt;BAY0-MC10-F5snIXriu0001e384@bay0-mc10-f5.bay0.hotmail.com&amp;gt; Queued mail for delivery&lt;/pre&gt;

&lt;p&gt;Je&#380;eli poczta wpadnie do folderu junk i sprytny u&#380;ytkownik j&#261; oznaczy, &#380;e spamem nie jest(kliknie w &amp;#8220;znam nadawc&#281;&amp;#8221;), kolejna poczta od tego adresata (z tego samego serwera pocztowego), nie jest wrzucana do folderu &amp;#8220;Junk&amp;#8221; ... ale tylko przez ok. tydzie&#324;.&lt;/p&gt;

&lt;p&gt;Po przewertowaniu zasob&#243;w Usenetu jestem w stanie wysnu&#263; tez&#281;, i&#380; serwery stosuj&#261;ce technologi&#281; SenderID zachowuj&#261; si&#281; zgo&#322;a niedeterministycznie, albo rz&#261;dzi nimi jaka&#347; mroczna logika rozmyta, do kt&#243;rej zwyk&#322;y &#347;miertelnik nie ma dost&#281;pu. Na domiar tego dodam, i&#380; ta cudowna technologia jest opatentowana oraz jej nie mo&#380;na stosowa&#263; bez zgody Microsoftu. Pr&#243;by kontaktu z kim&#347; ze strony MS s&#261; z g&#243;ry skazane na niepowodzenie. Na maile odpowiadaj&#261; automaty, albo nic nie odpowiada (w sumie nie dziwne, mo&#380;e im kto&#347; problem zg&#322;asza&#322;, &#380;e im nie dzia&#322;a poczta jak powinna &amp;#8211; drog&#261; w&#322;a&#347;nie pocztow&#261;). Po kilku telefonach do MS w pi&#281;knym kraju nad Wis&#322;&#261; nie uda&#322;o si&#281; znale&#378;&#263; osoby kompetentnej, kt&#243;ra by podpowiedzia&#322;a jak w/w problem rozwi&#261;za&#263;. Nawet wi&#281;cej, nie uda&#322;o si&#281; znale&#378;&#263; osoby, kt&#243;ra potrafi skontaktowa&#263; z person&#261; kompetentn&#261; w dziedzinie SenderID.&lt;/p&gt;

&lt;p&gt;Dla ciekawskich dodam, i&#380; by&#322;y zmieniane TTLe rekord&#243;w w dnsach, oraz wpisy &lt;span class="caps"&gt;PTR&lt;/span&gt; serwer&#243;w dns i pocztowych, z kt&#243;rych chcemy co&#347; skutecznie dostarczy&#263; do hotmaila &amp;#8211; efekt zawsze ten sam. Zrobili&#347;my to ju&#380; na wszystkie mo&#380;liwe sposoby &amp;#8211; zagl&#261;daj&#261;c nawet do nag&#322;&#243;wk&#243;w, poczty kt&#243;ra do hotmaila jakim&#347; cudem dotar&#322;a.&lt;/p&gt;

	&lt;p&gt;My chcemy tylko powiadomi&#263; o urodzinach znajomego&amp;#8230; a nie powi&#281;kszy&#263; pewn&#261; cz&#281;&#347;&#263; cia&#322;a.&lt;/p&gt;


	&lt;p&gt;Dla cierpliwych i szukaj&#261;cych wra&#380;e&#324; opis jak dzia&#322;a (albo jak powinno dzia&#322;a&#263;) SenderID mo&#380;na znale&#378;&#263; tutaj: &lt;a href="http://www.microsoft.com/mscorp/safety/technologies/senderid/default.mspx"&gt;http://www.microsoft.com/mscorp/safety/technologies/senderid/default.mspx&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Fri, 30 Nov 2007 15:38:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:ba6ffaa5-add6-47cb-b808-0db50851e6be</guid>
      <author>mieki</author>
      <link>http://itblog.grono.net/articles/2007/11/30/walka-ze-spamfiltrami</link>
      <category>ciekawostki</category>
      <category>SPF</category>
      <category>SenderID</category>
      <category>SMTP</category>
      <category>SPAM</category>
      <category>filtering</category>
    </item>
  </channel>
</rss>
