(1).DDos概念html
分布式拒绝服务攻击(英文意思是Distributed Denial of Service,简称DDoS)是指处于不一样位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不一样位置的多台机器并利用这些机器对受害者同时实施攻击。因为攻击的发出点是分布在不一样地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者能够有多个。前端
防护DDOS是一个系统工程,攻击花样多,防护的成本高瓶颈多,防护起来即被动又无奈。DDOS的 特色是分布式,针对带宽和服务攻击,也就是四层流量攻击和七层应用攻击,相应的防护瓶颈四层在带宽,七层的多在架构的吞吐量。对于七层的应用攻击,咱们还 是能够作一些配置来防护的,例如前端是Nginx,主要使用nginx的http_limit_conn和http_limit_req模块来防护。 ngx_http_limit_conn_module 能够限制单个IP的链接数,ngx_http_limit_req_module 能够限制单个IP每秒请求数,经过限制链接数和请求数能相对有效的防护CC攻击。nginx
(2).编写查看DDos攻击的脚本git
[root@youxi1 ~]# yum -y install net-tools [root@youxi1 ~]# vim ddos-ip.sh netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n [root@youxi1 ~]# chmod +x ddos-ip.sh
说明:netstat -ntu查看网络相关信息,-n拒绝别名(显示IP地址和端口号),-t是TCP协议,-u是UDP协议;github
awk '{print $5}'是将网络信息以空格为分隔符取第5位参数;vim
cut -d: -f1是将传来的信息以冒号做为分隔符,取第1位参数;服务器
sort排序;网络
uniq -c去重并进行统计;架构
sort -n根据字符串的数值比较进行排序,即比较统计的数值大小比较。tcp
扩展:ss命令也能够查看网络相关的监控,并且执行速度比netstat命令快,可是ss命令执行命令却稍有不一样ss -antu | awk '{print $6}' | cut -d: -f4 | uniq -c | sort -n。另外,这两条命令统计的都是1分钟之内的网络链接信息。
模拟DDos攻击
[root@youxi1 ~]# yum -y install httpd //须要压测命令ab [root@youxi1 ~]# ab -n 100 -c 10 http://192.168.5.101/index.html //当即执行脚本 [root@youxi1 ~]# ./ddos-ip.sh 1 Address 1 servers) 2 192.168.5.1 101 192.168.5.101
(3).防护DDos攻击
防护DDos的方法:添加防火墙规则、加大带宽、增长服务器、使用CDNA技术、高防服务器和带流量清洗的ISP、流量清洗服务等,还有前段自带的防护功能,例如nginx:nginx防止DDOS攻击配置或nginx调优(二)。
最多见的通常是添加防火墙规则,若是IP地址数较少能够手动添加,若是IP地址数较多通常会使用软件自动添加,例如:fail2ban(经过分析日志来判断是否使用iptables拦截,已支持firewalld防火墙,详情:https://blog.csdn.net/qq_23587541/article/details/84190650)、DDoS deflate(经过netstat判断ip链接数,并使用iptables屏蔽)。
1)DDos deflate介绍
DDoS deflate是一款免费的用来防护和减轻DDoS攻击的脚本。它经过netstat监测跟踪建立大量网络链接的IP地址,在检测到某个结点超过预设的限制时,该程序会经过APF或iptables禁止或阻挡这些IP。
2)安装
GitHUb下载地址:https://github.com/jgmdev/ddos-deflate(ss命令好像没有调试好)
inetbase下载地址:http://www.inetbase.com/scripts/ddos/
下载install.sh文件并上传至服务器。我使用的是GitHub下载,这是一个zip文件,须要安装unzip
[root@youxi1 ~]# yum -y install unzip [root@youxi1 ~]# unzip ddos-deflate-master.zip [root@youxi1 ~]# cd ddos-deflate-master/ [root@youxi1 ddos-deflate-master]# ls ChangeLog install.sh Makefile README.md uninstall.sh config LICENSE man src [root@youxi1 ddos-deflate-master]# ll install.sh -rwxr-xr-x 1 root root 5788 5月 29 23:36 install.sh [root@youxi1 ddos-deflate-master]# ./install.sh //执行安装,都是yum安装 //在最后会出现安装地址 Installation has completed! Config files are located at /etc/ddos/ [root@youxi1 ddos-deflate-master]# ls /etc/ddos/ ddos.conf ignore.host.list ignore.ip.list
查看配置文件
[root@youxi1 ddos-deflate-master]# vim /etc/ddos/ddos.conf //查看配置文件 //脚本和其余文件的路径 # Paths of the script and other files PROGDIR="/usr/local/ddos" SBINDIR="/usr/local/sbin" PROG="$PROGDIR/ddos.sh" //执行脚本地址 IGNORE_IP_LIST="ignore.ip.list" //IP地址白名单列表 IGNORE_HOST_LIST="ignore.host.list" //主机白名单列表 CRON="/etc/cron.d/ddos" //计划任务文件地址 //防火墙命令地址 APF="/usr/sbin/apf" CSF="/usr/sbin/csf" IPF="/sbin/ipfw" IPT="/sbin/iptables" IPT6="/sbin/ip6tables" TC="/sbin/tc" //第22行,检查DDos时间间隔,默认1分钟 FREQ=1 //第25行,做为一个守护进程时,运行的频率,单位秒 DAEMON_FREQ=5 //第28行,最大链接数,超过该数值后IP就会被禁止,通常默认便可 NO_OF_CONNECTIONS=150 //第33行,为true时仅统计接入链接,会比统计in/out更慢禁止 ONLY_INCOMING=false //第38行,为true时脚本将会使用tcpdump扫描由CloudFlare服务器发送的CF-Connecting-IP头标签, //而且禁止使用iptables字符串匹配模块 ENABLE_CLOUDFLARE=false //第43行,为true时启用PORT_CONNECTIONS,与ONLY_INCOMING相同,但更慢 ENABLE_PORTS=false //第54行,端口链接检测,为每一个端口分配监听规则,格式为“端口(或端口端):最大链接数:禁用时间(单位秒)” PORT_CONNECTIONS="80:150:600 443:150:600 20-21:150:600" //第58行,使用的防火墙,包括:auto, apf, csf, ipfw, and iptables FIREWALL="auto" //第62行,当ip被屏蔽是给指定邮箱发送邮件 EMAIL_TO="root" //第65行,IP禁止时间,单位秒 BAN_PERIOD=600 //第71行,要阻止的链接状态,状态之间使用冒号分隔,例如:established:syn-sent:syn-recv:fin-wait-1:fin-wait-2 //该例默认状况下,会阻止监听和关闭以外的全部状态,状态详见:man ss CONN_STATES="connected" //第74行,当使用netstat时要阻止的链接状态,状态详见:man netstat。那理论上,上面是使用ss时阻止的链接状态? CONN_STATES_NS="ESTABLISHED|SYN_SENT|SYN_RECV|FIN_WAIT1|FIN_WAIT2|TIME_WAIT|CLOSE_WAIT|LAST_ACK|CLOSING" //第78行,是否监控每一个ip使用的带宽,超过期下降速率(须要iftop和tc命令) BANDWIDTH_CONTROL=false //第82行,触发降速的带宽速率,目前支持kbit和mbit BANDWIDTH_CONTROL_LIMIT="1896kbit" //第87行,触发降速时,会在指定时间周期内,速率上限 BANDWIDTH_DROP_RATE="512kbit" //第91行,降速的时间周期,单位秒,即600秒内会有速率上限 BANDWIDTH_DROP_PERIOD=600 //第95行,若是为true时,仅考虑从客户端接收的数据,而不考虑服务器发给客户端的数据 BANDWIDTH_ONLY_INCOMING=true
注意:在配置文件中,ENABLE_PORTS(第43行)参数开启时,PORT_CONNECTIONS(第54行)才能使用;BANDWIDTH_CONTROL(第78行)参数开启时,BANDWIDTH_CONTROL_LIMIT(第82行)、BANDWIDTH_DROP_RATE(第87行)、BANDWIDTH_DROP_PERIOD(第91行)、BANDWIDTH_ONLY_INCOMING(第95行)才能使用。
另外最新DDoS deflate已支持systemctl命令管理
[root@youxi1 ~]# systemctl status ddos ● ddos.service - (D)Dos Deflate Loaded: loaded (/usr/lib/systemd/system/ddos.service; enabled; vendor preset: disabled) Active: active (running) since 六 2019-08-31 17:40:05 CST; 8min ago Process: 1126 ExecStart=/usr/local/sbin/ddos --start (code=exited, status=0/SUCCESS) Main PID: 1163 (ddos.sh) CGroup: /system.slice/ddos.service ├─1163 /bin/sh /usr/local/ddos/ddos.sh -l └─4375 sleep 5 8月 31 17:40:04 youxi1 systemd[1]: Starting (D)Dos Deflate... 8月 31 17:40:05 youxi1 ddos[1126]: starting ddos daemon... 8月 31 17:40:05 youxi1 systemd[1]: Started (D)Dos Deflate.
因为DDos deflate目前不支持firewalld,因此须要安装iptables
[root@youxi1 ~]# systemctl stop firewalld [root@youxi1 ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@youxi1 ~]# yum -y install iptables-services [root@youxi1 ~]# systemctl start iptables [root@youxi1 ~]# systemctl enable iptables Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
[root@youxi1 ~]# iptables -F //清空规则方便实验
注意:最新版的DDos deflate1.3版(GitHUb下载)使用了ss命令,可是ss命令使用-ntu选项时对已完成的网络链接不进行统计,我我的感受没有原来的(inetbase下载)好。原来的使用请看:https://blog.csdn.net/huangyuxin_/article/details/100116403
3)卸载
运行./uninstall.sh便可。