一.问题情况
由于服务器出现持续长期的DDos攻击,大部分是udp的小包攻击,应该是ntp和dns解析udp放大攻击所致,机房直接封禁了外网IP的UDP协议,造成服务无法正常的解析域名和同步时间,所以找了个方法可以让服务器继续正常的使用解析服务和同步时间,找到如下方法.
二.解决办法
系统是centos7,dns默认使用UDP的53端口解析,封禁udp后,所有的dns解析无法正常,需要使用tcp,网上找了一些方法,都无法生效:
1 2 3 4 5 6 7 |
比如/etc/resolv.conf里添加 options tcp options edns0 或者/etc/nsswitch.conf里修改 hosts: files dns [!UDP] 或者/etc/sysconfig/network-scripts/ifcfg-{网卡名}里设置 DNSOVERTCP=yes |
以上方法均无法让dns正常,只能从网上找了一个把udp转成tcp协议的工具
https://github.com/zfl9/dns2tcp
服务器上需要先安装过gcc环境,否则无法编译,如果当前服务器无法解析,只能先把yum源的域名用能解析的机器现在解析出来,然后写入/etc/hosts里先强制解析把需要的环境装好,git下不到文件同理
1 2 3 4 |
yum install gcc git git clone https://github.com/zfl9/dns2tcp cd dns2tcp make && sudo make install |
安装的默认目录是/usr/local/bin/dns2tcp,可安装到其它目录,如 make install DESTDIR=/opt/local/bin
安装好以后启动这个程序,前提是没有程序占用本地的127.0.0.1的53端口,程序会把请求本地127.0.0.1的53端口的udp解析请求转发到114.114.114.114的53端口的tcp请求
1 |
dns2tcp -L "127.0.0.1#53" -R "114.114.114.114#53" > /dev/null & |
然后网卡/etc/sysconfig/network-scripts/ifcfg-{网卡名}里修改一下dns设置为127.0.0.1重启网卡服务器service network restart或者直接修改/etc/resolv.conf的servername为127.0.0.1临时使用
有些DNS的IP是不支持tcp请求的,所以可以安装dig用+tcp测试一下,有返回就是支持的,没返回就不支持,已知114.114.114.114和8.8.8.8都支持tcp请求
1 2 |
yum install bind-utils dig @114.114.114.114 +tcp www.baidu.com |
这样DNS问题就算解决了.下来还要处理服务器时间同步ntp问题,因为有些服务器时间长了因为高负载或者本身硬件问题,时间会过快或者过慢,就需要定期同步系统时间,ntpdate也使用的UDP协议的123端口,哪怕使用-u参数,也只是使用了高位端口依然还是不通的,更换chrony和rdate还是没有任何效果.
网上也看到了ntp使用tls和https同步的方法,感觉有些麻烦也没有尝试,由于服务器不需要高精度时间,最后想了一个比较偷懒的方法,直接请求baidu头部,获取到时间,设置为系统时间
1 2 |
yum install curl date -s "`curl -I www.baidu.com 2>&1|grep 'Date'|sed 's/Date: //'|sed 's/,//'`" |
或者使用wget也可以
1 2 |
yum install wget date -s "`wget -S --spider http://www.baidu.com 2>&1 |grep 'Date'|sed 's/Date: //;s/,//'`" |