{"id":180,"date":"2009-02-01T23:02:11","date_gmt":"2009-02-01T21:02:11","guid":{"rendered":"http:\/\/gcolpart.evolix.net\/blog21\/?p=180"},"modified":"2009-02-02T02:09:04","modified_gmt":"2009-02-02T00:09:04","slug":"ferme-ton-bind","status":"publish","type":"post","link":"https:\/\/gcolpart.evolix.net\/blog21\/ferme-ton-bind\/","title":{"rendered":"Ferme ton Bind !"},"content":{"rendered":"<p>Il est important de fermer compl\u00e8tement son Bind, \u00e0 savoir mettre dans son <em>named.conf<\/em> :<\/p>\n<pre>allow-query { localhost;};\r\nallow-recursion { localhost; };\r\nallow-transfer { none; };<\/pre>\n<p>Cela provoque un statut <em>REFUSED<\/em> pour toutes les requ\u00eates non autoris\u00e9es. Si refuser les transferts (requ\u00eates <em>AXFR<\/em> d\u00e9voilant toute votre zone) est sage et refuser les requ\u00eates r\u00e9cursives est logique (vous ne voulez pas \u00eatre serveur DNS pour le monde entier), il faut \u00e9galement refuser toutes les requ\u00eates par d\u00e9faut afin d&#8217;\u00e9viter de potentiels d\u00e9nis de service.<\/p>\n<p>Vous noterez que les directives ci-dessus autorisent les requ\u00eates classiques de la part de <em>localhost<\/em> dans la mesure o\u00f9 il est fr\u00e9quent que votre machine se serve de son propre Bind. Si ce n&#8217;est pas le cas, mettre toutes les directives \u00e0 <em>none<\/em>.<\/p>\n<p>Un moyen simple de v\u00e9rifier qu&#8217;un serveur DNS refuse bien toutes les requ\u00eates :<\/p>\n<pre>dig google.fr @&lt;serveur DNS&gt;<\/pre>\n<p>Vous ne devez pas obtenir la(les) r\u00e9ponse(s), ni m\u00eame obtenir la liste des ROOT SERVERS. Vous devez obtenir <em>status: REFUSED<\/em> (ou alors un timeout&#8230;).<\/p>\n<p>J&#8217;ai souvent eu du mal \u00e0 expliquer pourquoi il fallait fermer compl\u00e8tement son Bind, car la menace des attaques DOS restait un peu vague. Ce n&#8217;est d\u00e9sormais plus le cas depuis quelques semaines o\u00f9 chaque administrateur d&#8217;un Bind assiste (dans ses logs ;-) aux multiples requ\u00eates &#8220;. NS IN&#8221; g\u00e9n\u00e9r\u00e9es par des robots\/virus :<\/p>\n<pre>client 76.9.16.171#39068: query (cache) '.\/NS\/IN' denied\r\nclient 69.64.87.156#42646: query (cache) '.\/NS\/IN' denied<\/pre>\n<p>On d\u00e9plore m\u00eame des victimes de ces attaques DDOS de grande ampleur, notamment <a href=\"http:\/\/blog.networksolutions.com\/2009\/potential-latency-on-network-solutions-dns\/\">NetworkSolutions qui l&#8217;explique sur son blog<\/a>. Pour contrer cela, on peut refuser les paquets en amont : voici un <a href=\"http:\/\/gcolpart.evolix.net\/docs\/isprime-request.pcap\">fameux paquet (format PCAP)<\/a>. On voit donc que l&#8217;on peut interdire les paquets comportant une requ\u00eate DNS r\u00e9cursive (flags = 0x0100). Sur une machine Linux, on peut le faire avec iptables et le module u32 (attention, il semble y avoir des bugs avec certaines versions) :<\/p>\n<pre>iptables -A INPUT -p udp --dport domain -m u32 --u32 \"0&gt;&gt;22&amp;0x3C@10=0x01000001\" -j DROP<\/pre>\n<p>SI vous ne voulez pas interdire toutes les requ\u00eates r\u00e9cursives, j&#8217;ai trouv\u00e9 sur Internet une r\u00e8gle plus pr\u00e9cise qui matche sur le &#8220;. NS IN&#8221; (voir <a href=\"http:\/\/www.stupendous.net\/archives\/2009\/01\/22\/more-annoying-dns-queries\/\">commentaires de ce post<\/a>) :<\/p>\n<pre>iptables -A INPUT -j DROP -p udp --dport domain -m u32 --u32 \\\r\n\"0&gt;&gt;22&amp;0x3C@12&gt;&gt;16=1&amp;&amp;0&gt;&gt;22&amp;0x3C@20&gt;&gt;24=0&amp;&amp;0&gt;&gt;22&amp;0x3C@21=0x00020001\"<\/pre>\n<p>Enfin, sur l&#8217;excellent <a href=\"http:\/\/www.bortzmeyer.org\/dns-attaque-ns-point.html\">blog de St\u00e9phane Bortzmeyer<\/a>, vous trouverez plus de d\u00e9tails et des outils pour mesurer le nombre d&#8217;attaques sur votre serveur.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il est important de fermer compl\u00e8tement son Bind, \u00e0 savoir mettre dans son named.conf : allow-query { localhost;}; allow-recursion { localhost; }; allow-transfer { none; }; Cela provoque un statut REFUSED pour toutes les requ\u00eates non autoris\u00e9es. Si refuser les transferts (requ\u00eates AXFR d\u00e9voilant toute votre zone) est sage et refuser les requ\u00eates r\u00e9cursives est [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,5,72,7,69,8],"tags":[74,75,76],"class_list":["post-180","post","type-post","status-publish","format-standard","hentry","category-debian-fr","category-evolix","category-french","category-network","category-planet-libre","category-plug","tag-bind","tag-dns","tag-iptables"],"_links":{"self":[{"href":"https:\/\/gcolpart.evolix.net\/blog21\/wp-json\/wp\/v2\/posts\/180","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gcolpart.evolix.net\/blog21\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gcolpart.evolix.net\/blog21\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gcolpart.evolix.net\/blog21\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gcolpart.evolix.net\/blog21\/wp-json\/wp\/v2\/comments?post=180"}],"version-history":[{"count":8,"href":"https:\/\/gcolpart.evolix.net\/blog21\/wp-json\/wp\/v2\/posts\/180\/revisions"}],"predecessor-version":[{"id":185,"href":"https:\/\/gcolpart.evolix.net\/blog21\/wp-json\/wp\/v2\/posts\/180\/revisions\/185"}],"wp:attachment":[{"href":"https:\/\/gcolpart.evolix.net\/blog21\/wp-json\/wp\/v2\/media?parent=180"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gcolpart.evolix.net\/blog21\/wp-json\/wp\/v2\/categories?post=180"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gcolpart.evolix.net\/blog21\/wp-json\/wp\/v2\/tags?post=180"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}