(1).DDos概念
分布式拒絕服務攻擊(英文意思是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攻擊。
(2).編寫查看DDos攻擊的腳本
[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協議;
awk '{print $5}'是將網絡信息以空格為分隔符取第5位參數;
cut -d: -f1是將傳來的信息以冒號作為分隔符,取第1位參數;
sort排序;
uniq -c去重並進行統計;
sort -n根據字符串的數值比較進行排序,即比較統計的數值大小比較。
擴展: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即可。