linux – iptables:构建针对DNS放大攻击滥用的规则集
我一直致力于构建一个规则集来检测和阻止DNS放大攻击.
我卡住了,希望能在这里找到帮助. 我将在这里发布我的内容(bash脚本,与DNS有关的部分): IPTABLES='/sbin/iptables -v' SERVERIP=a.b.c.d echo '################ Previously initiated and accepted exchanges bypass rule checking #' $IPTABLES --append INPUT -m state --state ESTABLISHED,RELATED --jump ACCEPT echo '################################################ Allow unlimited outbound traffic #' $IPTABLES --append OUTPUT -m state --state NEW,ESTABLISHED,RELATED --jump ACCEPT echo '################################################################## Rules for DNS #' # DIG ANY ISC.ORG attack preventer. # QUESTION1: this one does not work,why!?!? $IPTABLES --append INPUT --proto udp --dport 53 -m string --string "isc.org" --algo bm --to 65535 --jump LOG --log-prefix "iptables: UDP ISC0 " $IPTABLES --append INPUT --proto udp --dport 53 -m string --hex-string "|03697363036f726700|" --algo bm --to 65535 --jump LOG --log-prefix "iptables: UDP ISC " $IPTABLES --append INPUT --proto udp --dport 53 -m string --hex-string "|03697363036f726700|" --algo bm --to 65535 --jump DROP # DNS DNSIPSOK list $IPTABLES --new DNSFLOODRULES $IPTABLES --append DNSFLOODRULES --source 127.0.0.1 --jump RETURN $IPTABLES --append DNSFLOODRULES --source $SERVERIP --jump RETURN $IPTABLES --append DNSFLOODRULES --jump LOG --log-prefix "iptables: UDP BLOCK " $IPTABLES --append DNSFLOODRULES --jump ACCEPT #$IPTABLES --append DNSFLOODRULES --jump DROP # I have it turned off right now,because echo '# S & D port rules' # DNS limit rule for standard acceptance # QUESTION2: can't get the connbytes to work properly :( $IPTABLES --append INPUT --proto udp --source 0/0 --dport 53 -m state --state NEW -m connbytes --connbytes 75 --connbytes-dir reply --connbytes-mode bytes -m limit --limit 1/s --limit-burst 10 --jump ACCEPT # DNS log / drop the abusers EXEPT the whitelisted IP numbers $IPTABLES --append INPUT --proto udp --source 0/0 --dport 53 -m state --state NEW --jump DNSFLOODRULES $IPTABLES --append INPUT --proto udp --source 0/0 --sport 53 -m state --state NEW --jump DNSFLOODRULES # DNS allow the whitelisted IP numbers $IPTABLES --append INPUT --proto udp --source 0/0 --dport 53 -m state --state NEW --jump ACCEPT $IPTABLES --append INPUT --proto udp --source 0/0 --sport 53 -m state --state NEW --jump ACCEPT 问题1: 问题2: 非常感谢您的想法和帮助. 解决方法
问题1:
字符串不匹配,因为“.”不包含在数据包中. DNS数据包不包含“主机名”,而是“标签”.在数据包中,域名的每个部分都是一个标签,前缀为标签的字节数. 所以“isc.org”转换为: isc: 03 69 73 63 org: 03 6f 72 67 或者在数据包中: 03697363036f7267 每个标签限制为63个字节,整个名称限制为255个字节. 它在DNS RFC中解释: http://tools.ietf.org/html/rfc1035#section-2.3.4 http://tools.ietf.org/html/rfc1035#section-4.1.2 问题2: 您需要启用net.netfilter.nf_conntrack_acct标志才能使用conntrack选项(请参阅iptables联机帮助页).但我不认为这样使用它是明智的.始终存在大包的合法答案. 也许你最好使用hashlimit扩展.已经提到过: https://lists.dns-oarc.net/pipermail/dns-operations/2012-October/009321.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |