Linux下防御DDOS攻击的操作梳理(转载)

xiaoxiao2021-02-28  55

DDOS的全称是Distributed Denial of Service,即”分布式拒绝服务攻击”,是指击者利用大量“肉鸡”对攻击目标发动大量的正常或非正常请求、耗尽目标主机资源或网络资源,从而使被攻击的主机不能为合法用户提供服务。

DDOS攻击的本质是: 利用木桶原理,寻找利用系统应用的瓶颈;阻塞和耗尽;当前问题:用户的带宽小于攻击的规模,噪声访问带宽成为木桶的短板。

可以参考下面的例子理解下DDOS攻击。 1)某饭店可以容纳100人同时就餐,某日有个商家恶意竞争,雇佣了200人来这个饭店坐着不吃不喝,导致饭店满满当当无法正常营业。(DDOS攻击成功) 2)老板当即大怒,派人把不吃不喝影响正常营业的人全都轰了出去,且不再让他们进来捣乱,饭店恢复了正常营业。(添加规则和黑名单进行DDOS防御,防御成功) 3)主动攻击的商家心存不满,这次请了五千人逐批次来捣乱,导致该饭店再次无法正常营业。(增加DDOS流量,改变攻击方式) 4)饭店把那些捣乱的人轰出去只后,另一批接踵而来。此时老板将饭店营业规模扩大,该饭店可同时容纳1万人就餐,5000人同时来捣乱饭店营业也不会受到影响。(增加硬防与其抗衡)

DDOS攻击只不过是一个概称,其下有各种攻击方式,比如:”CC攻击、SYN攻击、NTP攻击、TCP攻击、DNS攻击等等”,现在DDOS发展变得越来越可怕,NTP服务放大攻击渐渐成为主流了,这意味着可以将每秒的攻击流量放大几百倍,比如每秒1G的SYN碎片攻击换成NTP放大攻击,就成为了200G或者更多。

————————————————–顺便介绍下NTP服务放大攻击——————————————————–

什么事NTP服务? 网络时间协议NTP(Network Time Protocol)是用于互联网中时间同步的标准互联网协议。NTP服务器通过NTP服务向网络上的计算机或其他设备提供标准的授时服务,以保证这些服务系统的时钟能够同步。通常NTP服务使用UDP 123端口提供标准服务。

什么是NTP服务放大攻击? 标准NTP 服务提供了一个 monlist查询功能,也被称为MON_GETLIST,该功能主要用于监控 NTP 服务器的服务状况,当用户端向NTP服务提交monlist查询时,NTP 服务器会向查询端返回与NTP 服务器进行过时间同步的最后 600 个客户端的 IP,响应包按照每 6 个 IP 进行分割,最多有 100 个响应包。由于NTP服务使用UDP协议,攻击者可以伪造源发地址向NTP服务进行monlist查询,这将导致NTP服务器向被伪造的目标发送大量的UDP数据包,理论上这种恶意导向的攻击流量可以放大到伪造查询流量的100倍。

NTP是用UDP传输的,所以可以伪造源地址。NTP协议中有一类查询指令,用短小的指令即可令服务器返回很长的信息,放大攻击就是基于这类指令的。 比如: 小明以吴一帆的名义问李雷”我们班有哪些人?” ,李雷就回答吴一帆说”有谁谁谁和谁谁谁……”””(几百字),那么小明就以8个字的成本,令吴一帆收到了几百字的信息,所以叫做放大攻击。 (也就是说:对方服务器是个话唠,你以小明的身份问他一个问题,他回答小明一千句,结果小明崩溃了)

网络上一般NTP服务器都有很大的带宽,攻击者可能只需要1Mbps的上传带宽欺骗NTP服务器,即可给目标服务器带来几百上千Mbps的攻击流量,达到借刀杀人的效果。 所以现在新的ntpd已经可以通过配置文件,关掉除时间同步以外的查询功能。而时间同步的查询和返回大小相同(没记错的话),所以没办法用作放大攻击。

如何查看是否遭受NTP放大攻击? 如果网络上检测到大流量的UDP 123端口的数据,就可以确认正在遭受此类攻击。

如何防范NTP放大攻击? 1)升级服务程序版本 将系统中的NTP服务升级到 ntpd 4.2.7p26 或之后的版本,因为 ntpd 4.2.7p26 版本后,服务默认是关闭monlist查询功能的。

2)关闭服务的monlist查询功能: 首先查询问题主机的REQ_MON_GETLIST和REQ_MON_GETLIST_1请求是否可用。具体操作方法: # ntpq -c rv


卸载DDos default的操作如下:# wget http://www.inetbase.com/scripts/ddos/uninstall.ddos # chmod 0700 uninstall.ddos #./uninstall.ddos


2)配置DDoS deflate下面是DDoS deflate的默认配置位于/usr/local/ddos/ddos.conf ,内容如下: [root@test3-237 ~]# cat /usr/local/ddos/ddos.conf

Paths of the script and other files

PROGDIR=”/usr/local/ddos” PROG=”/usr/local/ddos/ddos.sh” IGNORE_IP_LIST=”/usr/local/ddos/ignore.ip.list” //IP地址白名单 CRON=”/etc/cron.d/ddos.cron” //定时执行程序 APF=”/etc/apf/apf” IPT=”/sbin/iptables”

frequency in minutes for running the script
Caution: Every time this setting is changed, run the script with –cron
option so that the new frequency takes effect

FREQ=1 //检查时间间隔,默认1分钟。设置检测时间间隔,默认是分钟,由于系统使用crontab功能,最小单位是分钟

How many connections define a bad IP? Indicate that below.

NO_OF_CONNECTIONS=150 //最大连接数,超过这个数IP就会被屏蔽,一般默认即可。默认是150,这是一个经验值,如果服务器性能比较高,可以设置200以上,以避免误杀

APF_BAN=1 (Make sure your APF version is atleast 0.96)
APF_BAN=0 (Uses iptables for banning ips instead of APF)

APF_BAN=0 //使用APF还是iptables屏蔽IP。推荐使用iptables,将APF_BAN的值改为0即可。设置为1表示使用APF,如果使用APF则需要先安装,centos中默认就没有安装

KILL=0 (Bad IPs are’nt banned, good for interactive execution of script)

KILL=1 //是否屏蔽IP,默认即可

An email is sent to the following address when an IP is banned.
Blank would suppress sending of mails

EMAIL_TO=”root” //当IP被屏蔽时给指定邮箱发送邮件,推荐使用,换成自己的邮箱即可。如果不希望发送邮件,设置为空,即EMAIL_TO=”“

Number of seconds the banned ip should remain in blacklist.

BAN_PERIOD=600 //禁用IP时间(锁定ip的时间),默认600秒,可根据情况调整

需要注意的是: DDos default安装完成后在/usr/local/ddos目录下产生了ddos.conf、ddos.sh、ignore.ip.list和LICENSE这四个文件,其中: ddos.conf是配置文件,ddos.sh是一个Shell文件,ignore.ip.list是存放忽略IP的文件,LICENSE是版权声明文件,安装完成后还在/etc/cron.d/下生产了ddos.cron文件,内容如下:

[root@test3-237 ~]# cat /etc/cron.d/ddos.cron SHELL=/bin/sh 0-59/1 * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1

意思是每隔一分钟执行一下/usr/local/ddos/ddos.sh,这个脚本是关键! 这个cron任务是依赖ddos.conf文件中的NO_OF_CONNECTIONS变量产生的,如果修改了此值,可以通过运行如下命令更新(实际也是在安装是运行了如下命令): [root@test3-237 ~]# /usr/local/ddos/ddos.sh -c Stopping crond: [ OK ] Starting crond: [ OK ] Stopping crond: [ OK ] Starting crond: [ OK ]

或者 [root@test3-237 ~]# /usr/local/ddos/ddos.sh –cron Stopping crond: [ OK ] Starting crond: [ OK ] Stopping crond: [ OK ] Starting crond: [ OK ]

3)DDos default选项 # /usr/local/ddos/ddos.sh -h #查看选项 # /usr/local/ddos/ddos.sh -k n #杀掉连接数大于n的连接。n默认为配置文件的NO_OF_CONNECTIONS 比如: [root@test3-237 ~]# /usr/local/ddos/ddos.sh -k 150 2 103.110.186.75 1 servers) 1 Address # /usr/local/ddos/ddos.sh -c #按照配置文件创建一个执行计划。使得ddos.conf文件配置后生效 4)分享一个防御DDOS攻击的shell脚本

Linux服务器中一旦受到DDOS的攻击(比如IDC机房服务器被攻击了,关机,拔网线,降流量),目前只能通过封IP来源来暂时解决。 然而IP来源变化多端,光靠手工来添加简直是恶梦,所以还是想办法写个shell脚本来定时处理,这才是比较靠谱的办法。

[root@test3-237 ~]# mkdir /root/bin [root@test1-237 ~]# cat /root/bin/dropip.sh //此脚本自动提取攻击ip,然后自动屏蔽 #!/bin/bash /bin/netstat -na|grep ESTABLISHED|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -rn|head -10|grep -v -E ‘192.168|127.0’|awk ‘{if ($2!=null && $1>4) {print $2}}’>/tmp/dropip for i in $(cat /tmp/dropip) do /sbin/iptables -A INPUT -s $i -j DROP echo “\$i kill at `date`”>>/var/log/ddos done

以上脚本中最重要的是第二行,即: 获取ESTABLISHED连接数最多的前10个ip并写入临时文件/tmp/dropip,排除了内部ip段192.168|127.0开头的.通过for循环将dropip里面的ip通过iptables全部drop掉,然后写到日志文件/var/log/ddos。

给脚本添加执行权限 [root@test1-237 ~]# chmod +x /root/bin/dropip.sh

添加到计划任务,每分钟执行一次 [root@test1-237 ~]#crontab -e */1 * * * * /root/bin/dropip.sh


下面是针对连接数屏蔽IP #!/bin/sh /bin/netstat -ant |grep 80 |awk ‘{print $5}’ |awk -F”:” ‘{print $1}’ |sort |uniq -c |sort -rn |grep -v -E ‘192.168|127.0’ |awk ‘{if ($2!=null && $1>50)}’ > /root/drop_ip.txt for i in `cat /root/drop_ip.txt ` do /sbin/iptables -I INPUT -s $i -j DROP; done 5)Linux下使用safedog(安全狗)软件防御DDOS攻击:

[root@test3-237 ~]# setenforce 0 //关闭selinux,否则不能安装成功 [root@test3-237 ~]# getenforce //永久关闭selinux需要配置/etc/sysconfig/selinux文件,并重启机器生效!! Permissive

安装(nginx版)安全狗(safedog) [root@test3-237 ~]# wget http://safedog.cn/safedogwz_linux_Nginx64.tar.gz [root@test3-237 ~]# tar -zvxf safedogwz_linux_Nginx64.tar.gz [root@test3-237 ~]# cd safedogwz_linux_Nginx64 [root@test3-237 safedogwz_linux_Nginx64]# chmod 755 install.py [root@bastion-IDC safedogwz_linux_Nginx64]# ls install_files install.py uninstall.py [root@test3-237 safedogwz_linux_Nginx64]# ./install.py -A //卸载安全狗就用uninstall.py ……. step 3.5, start service… [ok] step 3.6, save safedog install info… [ok] Tips: (1)Run the command to setup Server Defense Module: sdui (2)Explore more features by tapping the command to join Cloud Management Center (fuyun.safedog.cn) with your account: sdcloud -h

If you need any help about installation,please tap the command: ./install.py -h Install Completely!

温馨提示: 1)安装完成后,记得一定要重新启动Nginx服务,网站安全狗软件即可生效。 2)运行时,安装脚本默认将自动获取Nginx服务的安装路径;若自动获取失败则将提示输入Nginx服务的安装路径(绝对路径),需要根据所安装的Nginx的目录,填写真实的安装路径。 3)当出现提示:Are you sure to uninstall?[y/n]时,输入y

转载地址:http://www.cnblogs.com/kevingrace/p/6756515.html

转载请注明原文地址: https://www.6miu.com/read-1624179.html

最新回复(0)