{"id":645,"date":"2010-05-13T23:53:55","date_gmt":"2010-05-13T21:53:55","guid":{"rendered":"http:\/\/blog.benny-baumann.de\/?p=645"},"modified":"2010-05-14T00:13:20","modified_gmt":"2010-05-13T22:13:20","slug":"dnsbl-aus-postmap-files-erstellen","status":"publish","type":"post","link":"https:\/\/blog.benny-baumann.de\/?p=645","title":{"rendered":"DNSBL aus Postmap-Files erstellen"},"content":{"rendered":"<p>Wie ich <a href=\"http:\/\/blog.benny-baumann.de\/?p=627\">vor ein paar Tagen bereits angedeutet<\/a> habe, habe ich auf meinem Postfix nun einen IP-Filter am Start. Da es zudem Anfragen zur Weiternutzung dieser Liste gab, habe ich mir einmal kurz angeschaut, wieviel Aufwand das Ver\u00f6ffentlichen dieser Liste via Bind ben\u00f6tigt. Und wie sich herausstellt, l\u00e4sst sich der Hauptteil der Arbeit mit gerade einmal einer Zeile AWK l\u00f6sen.<!--more--><\/p>\n<p>Das Kernst\u00fcck daf\u00fcr bildet die bereits f\u00fcr Postfix vorhandene clients_access-Datei in der die zu sperrenden IPs eingetragen sind. Um diese in eine f\u00fcr Bind nutzbare Version zu \u00fcberf\u00fchren sind <a href=\"http:\/\/www.zytrax.com\/books\/dns\/ch9\/dnsbl.html\">im Wesentlichen drei Dinge<\/a> zu erledigen:<\/p>\n<ol>\n<li>Das REJECT aus der Zeile schmei\u00dfen<\/li>\n<li>Die IP umkehren (von a.b.c.d zu d.c.b.a)<\/li>\n<li>Aus diesen Eintr\u00e4gen A und TXT-Records erzeugen<\/li>\n<\/ol>\n<p>Zus\u00e4tzlich dazu ist  zum Eingliedern der Zone in Bind jedoch neben den eigentlichen Resource Records <a href=\"http:\/\/www.kloth.net\/internet\/dnsbl-howto.php\">eine Reihe weiterer Eintr\u00e4ge<\/a> einzubinden, die ein paar Fehler-Conditions der Liste definieren. Ferner muss die Zone mit einem sauberen Origin versehen werden. Dies l\u00e4sst sich am Einfachsten mit etwas Bash wunderbar bashen:<\/p>\n<pre lang=\"bash\" escaped=\"true\">#Create some magic DNSBL zone from this list\r\necho -e \"\\$TTL 3600\" &gt; \/etc\/postfix\/client_access.zone\r\necho -e \"\\$ORIGIN local.rbl.ccs-baumann.de.\" &gt;&gt; \/etc\/postfix\/client_access.zone\r\necho -e \"@\\tIN\\tSOA\\tns42.sys.ccs-baumann.de. BenBE1987.gmx.net. ( `date +%s` 60 60 86400 60 )\" &gt;&gt; \/etc\/postfix\/client_access.zone\r\necho -e \"@\\tIN\\tNS\\tns42.sys.ccs-baumann.de.\" &gt;&gt; \/etc\/postfix\/client_access.zone\r\necho -e \"2.0.0.127\\tIN\\tA\\t127.0.0.2\" &gt;&gt; \/etc\/postfix\/client_access.zone\r\necho -e \"\\t\\tIN\\tTXT\\t\\\"BenBE Mail client blacklist - test entry - This list is active!\\\"\" &gt;&gt; \/etc\/postfix\/client_access.zone\r\necho -e \"3.0.0.127\\tIN\\tA\\t127.0.0.3\" &gt;&gt; \/etc\/postfix\/client_access.zone\r\necho -e \"\\t\\tIN\\tTXT\\t\\\"Verified Spam Source\\\"\" &gt;&gt; \/etc\/postfix\/client_access.zone\r\necho -e \"10.0.0.127\\tIN\\tA\\t127.0.0.10\" &gt;&gt; \/etc\/postfix\/client_access.zone\r\necho -e \"\\t\\tIN\\tTXT\\t\\\"Dialup IP\\\"\" &gt;&gt; \/etc\/postfix\/client_access.zone\r\necho -ne \"\\n\" &gt;&gt; \/etc\/postfix\/client_access.zone<\/pre>\n<p>Ist dieser Teil der Zonefile geschrieben, kommt besagter AWK-Einzeiler zum Einsatz:<\/p>\n<pre lang=\"bash\" escaped=\"true\">cat \/etc\/postfix\/client_access | awk 'split($0,b,\"\\t\") split(b[1],a,\".\") {print a[4] \".\" a[3] \".\" a[2] \".\" a[1] \"\\tIN\\tA\\t127.0.0.3\\n\\t\\tIN\\tTXT\\t\\\"rot in hell\\\"\" }' &gt;&gt; \/etc\/postfix\/client_access.zone<\/pre>\n<p>Nun muss lediglich die neu erstellte Zonefile noch an den Ort kopiert werden, wo Bind nach ihr sucht. Diesen Teil \u00fcberlasse ich aber dem geneigten Leser. Zus\u00e4tzlich sollte man nach diesem Update an Bind die Aufforderung zu einem Reload reichen, was aber auch eher eine Finger\u00fcbung f\u00fcr Shell-Programmierer sein d\u00fcrfte. Zu guter Letzt noch ein kurzer Eintrag bei Bind in der Konfig erg\u00e4nzt, um unsere Zone erstmalig bekanntzugeben und wir sind fertig. Als Beispiel sollen diese Zeilen aus meiner Bind-Konfiguration dienen:<\/p>\n<pre lang=\"text\">zone \"local.rbl.ccs-baumann.de\" {\r\n        type master;\r\n        file \"\/etc\/bind\/master\/db.de.ccs-baumann.rbl.local\";\r\n        notify no;\r\n};<\/pre>\n<p>Nach einem Reload von Bind sollte alles wie gew\u00fcnscht funktionieren und die neue Zone erreichbar sein. Wer m\u00f6chte, darf meine DNSBL &#8222;local.rbl.ccs-baumann.de&#8220; gerne mit verwenden, sollte sich aber im Klaren sein, dass diese haupts\u00e4chlich f\u00fcr meine Zwecke gef\u00fchrt wird und ich daher f\u00fcr nichts garantiere.<\/p>\n<p class=\"wp-flattr-button\"><a href=\"https:\/\/blog.benny-baumann.de\/?flattrss_redirect&amp;id=645&amp;md5=64cf400e95b56b05bb31dc28760f3955\" title=\"Flattr\" target=\"_blank\"><img src=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" srcset=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" alt=\"Flattr this!\"\/><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Wie ich vor ein paar Tagen bereits angedeutet habe, habe ich auf meinem Postfix nun einen IP-Filter am Start. Da es zudem Anfragen zur Weiternutzung dieser Liste gab, habe ich mir einmal kurz angeschaut, wieviel Aufwand das Ver\u00f6ffentlichen dieser Liste via Bind ben\u00f6tigt. Und wie sich herausstellt, l\u00e4sst sich der Hauptteil der Arbeit mit gerade [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[4],"tags":[258,98,48,277,69,204,346],"class_list":["post-645","post","type-post","status-publish","format-standard","hentry","category-server","tag-bind","tag-developement","tag-dns","tag-dnsbl","tag-internet","tag-postfix","tag-server"],"_links":{"self":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/645","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=645"}],"version-history":[{"count":4,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/645\/revisions"}],"predecessor-version":[{"id":649,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/645\/revisions\/649"}],"wp:attachment":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=645"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=645"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=645"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}