(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便可。