如何解决 dnsmqsq 放到外网后,不停收到大量无效查询请求? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
EricInBj
V2EX    DNS

如何解决 dnsmqsq 放到外网后,不停收到大量无效查询请求?

  •  
  •   EricInBj 2016-10-24 16:37:16 +08:00 5317 次点击
    这是一个创建于 3352 天前的主题,其中的信息可能已经有所发展或是发生改变。
    dnsmasq[23209]: query[A] vomcpgbdkwz.fuxi003.com from 117.175.74.185
    dnsmasq[23209]: query[A] wooeqcywcih.fuxi003.com from 83.230.151.89
    dnsmasq[23209]: query[A] mmqnzhezkpz.fuxi002.com from 49.208.62.226
    dnsmasq[23209]: query[A] itnnfblvolb.fuxi002.com from 66.150.209.166
    dnsmasq[23209]: query[A] qjggtqzpbuh.fuxi003.com from 54.166.105.59


    大量这样的,都是些无效的二级域名,看上去是被利用来攻击 fuxi002 的 ns 服务器了?

    如何解决这个问题呢?
    第 1 条附言    2016-10-24 17:16:13 +08:00
    https://blog.gnuers.org/?p=1060

    用了上面连接里的方法,似乎管用,至少现在不会有这几个域名的查询了。
    就是需要经常来看 dnsmasq 日志,麻烦了点。
    第 2 条附言    2016-10-25 17:55:54 +08:00

    回复不支持MD 啊。。。

    刚才抽空搞了一下脚本,可以用下面的语句找出有问题的域名:

    grep query /var/log/dnsmasq.log|awk '{if(substr($9,1,2)!="10"){print $7}}'|awk -F"." '{if(NF==3){print $2"."$3}}'|sort|uniq -c|sort -n 

    能得到这样的结果:

     一堆正常的 6900 web-175.com 209091 scr888.com 

    把那哥们的脚本简化了一下:

    #!/bin/bash create_iptables(){ name=$1 string=$( echo $name|awk -F '.' '{for(i=1;i<=NF;i++){printf("|%02d|%s",length($i),$i)}}') string="$string|00|" echo -e "rule for \e[1;32m $name \e[mquery:" eval 'echo "iptables -t raw -A PREROUTING -p udp --dport 53 -m string --hex-string \"$string\" --algo bm -j LOG --log-prefix \"drop an dns query \""' eval 'echo "iptables -t raw -A PREROUTING -p udp --dport 53 -m string --hex-string \"$string\" --algo bm -j DROP"' } for domain in $@ do echo "DROP $domain rule:" create_iptables $domain done 

    这样需要经常执行脚本得到恶意解析的域名,然后再用上面的脚本来加 iptables,效果还是不错的,日志里看到不少 drop 掉的请求:

    /var/log/messages:Oct 25 13:40:53 ip-172-133-15-130 kernel: drop an dns query IN=eth0 OUT= MAC=d0:0d:0d:0b:e5:9e:50:e5:49:33:70:e8:08:00 SRC=19.181.62.199 DST=172.133.15.130 LEN=69 TOS=0x00 PREC=0x00 TTL=237 ID=50750 DF PROTO=UDP SPT=25649 DPT=53 LEN=49 /var/log/messages:Oct 25 13:40:53 ip-172-133-15-130 kernel: drop an dns query IN=eth0 OUT= MAC=d0:0d:0d:0b:e5:9e:50:e5:49:33:70:e8:08:00 SRC=106.105.134.235 DST=172.133.15.130 LEN=69 TOS=0x00 PREC=0x00 TTL=234 ID=60038 DF PROTO=UDP SPT=22975 DPT=53 LEN=49 /var/log/messages:Oct 25 13:40:56 ip-172-133-15-130 kernel: drop an dns query IN=eth0 OUT= MAC=d0:0d:0d:0b:e5:9e:50:e5:49:33:70:e8:08:00 SRC=98.80.54.16 DST=172.133.15.130 LEN=69 TOS=0x00 PREC=0x00 TTL=230 ID=3894 DF PROTO=UDP SPT=63664 DPT=53 LEN=49 

    后续再有必要的话,就把脚本再完善一下,整合成一个脚本,扔 crontab 里1小时跑一次,把解析数量超级多的全都干掉,然后清 dnsmasq.log。

    PS,我那个 !="10" 的判断是忽略内部 IP 的 query 记录。

    3 条回复    2016-10-25 17:53:44 +08:00
    Siril
        1
    Siril  
       2016-10-24 17:52:46 +08:00
    如果 dnsmasq 不是跑在路由上那种,(没有严格的资源限制)
    可以考虑 换 bind 9.10 简单点直接 docker pull ventz/bind
    然后可以用其自带的 rate-limit 之。
    EricInBj
        2
    EricInBj  
    OP
       2016-10-25 09:27:02 +08:00
    @Siril rate-limit 是针对固定来源 ip 的吧?像我碰到的这样的,随机产生的二级域名,随机的来源 IP ,好像不行?
    EricInBj
        3
    EricInBj  
    OP
       2016-10-25 17:53:44 +08:00
    刚才抽空搞一下脚本,可以用下面的语句找出有问题的域名:

    ```shell
    grep query /var/log/dnsmasq.log|awk '{if(substr($9,1,2)!="10"){print $7}}'|awk -F"." '{if(NF==3){print $2"."$3}}'|sort|uniq -c|sort -n
    ```

    能得到这样的结果:
    ```shell
    一堆正常的
    6900 web-175.com
    209091 scr888.com
    ```


    把那哥们的脚本简化了一下:
    ```shell
    #!/bin/bash
    create_iptables(){
    name=$1
    string=$( echo $name|awk -F '.' '{for(i=1;i<=NF;i++){printf("|%02d|%s",length($i),$i)}}')
    string="$string|00|"
    echo -e "rule for \e[1;32m $name \e[mquery:"
    eval 'echo "iptables -t raw -A PREROUTING -p udp --dport 53 -m string --hex-string \"$string\" --algo bm -j LOG --log-prefix \"drop an dns query \""'
    eval 'echo "iptables -t raw -A PREROUTING -p udp --dport 53 -m string --hex-string \"$string\" --algo bm -j DROP"'
    }

    for domain in $@
    do
    echo "DROP $domain rule:"
    create_iptables $domain
    done
    ```

    这样需要经常执行脚本得到恶意解析的域名,然后再用上面的脚本来加 iptables ,效果还是不错的,日志里看到不少 drop 掉的请求:
    ```shell
    /var/log/messages:Oct 25 13:40:53 ip-172-133-15-130 kernel: drop an dns query IN=eth0 OUT= MAC=d0:0d:0d:0b:e5:9e:50:e5:49:33:70:e8:08:00 SRC=19.181.62.199 DST=172.133.15.130 LEN=69 TOS=0x00 PREC=0x00 TTL=237 ID=50750 DF PROTO=UDP SPT=25649 DPT=53 LEN=49
    /var/log/messages:Oct 25 13:40:53 ip-172-133-15-130 kernel: drop an dns query IN=eth0 OUT= MAC=d0:0d:0d:0b:e5:9e:50:e5:49:33:70:e8:08:00 SRC=106.105.134.235 DST=172.133.15.130 LEN=69 TOS=0x00 PREC=0x00 TTL=234 ID=60038 DF PROTO=UDP SPT=22975 DPT=53 LEN=49
    /var/log/messages:Oct 25 13:40:56 ip-172-133-15-130 kernel: drop an dns query IN=eth0 OUT= MAC=d0:0d:0d:0b:e5:9e:50:e5:49:33:70:e8:08:00 SRC=98.80.54.16 DST=172.133.15.130 LEN=69 TOS=0x00 PREC=0x00 TTL=230 ID=3894 DF PROTO=UDP SPT=63664 DPT=53 LEN=49
    ```


    后续再有必要的话,就把脚本再完善一下,整合成一个脚本,扔 crontab 里 1 小时跑一次,把解析数量超级多的全都干掉,然后清 dnsmasq.log 。

    PS ,我那个 !="10" 的判断是忽略内部 IP 的 query 记录。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2535 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 10:08 PVG 18:08 LAX 02:08 JFK 05:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86