常見流量攻擊
服務器的攻擊分為四類,cc攻擊、syn攻擊、udp攻擊、tcp洪水攻擊。那么當被攻擊時會出現哪些癥狀呢,我們是如何來判斷服務器是否被攻擊,屬于哪種攻擊類型?
第一種類型:CC類攻擊
CC攻擊是DDoS(分布式拒絕服務)的一種,這種一種比DDOS流氓行為更具有技術含量的一種攻擊方式,CC攻擊完全模擬正常訪問行為,沒有虛假IP,也沒有大的流量異常,但一樣會造成您的服務器無法正常連接,一條ADSL的普通用戶發起的CC攻擊就可以干掉一臺高性能的服務器。
服務器唄CC攻擊時,會出現80端口關閉的現象,即出現丟包和高延遲的現象, 因為80端口被大量的垃圾數據堵塞導致正常的連接被中止。可以通過在CMD命令窗口輸入命令 netstat -an 來查看,如果看到類似如下大量顯示雷同的連接記錄基本就可以被CC攻擊了:
……
TCP 192.168.1.3:80 192.168.1.6:2205 SYN_RECEIVED 4
A.網站出現service unavailable提示
B.CPU占用率很高
C.網絡連接狀態:netstat –na,若觀察到大量的ESTABLISHED的連接狀態 單個IP高達幾十條甚至上百條
D.外部無法打開網站,軟重啟后短期內恢復正常,幾分鐘后又無法訪問。
CC類攻擊檢測
第一條命令:
tcpdump -s0 -A -n -i any | grep -o -E '(GET|POST|HEAD) .*'
正常的輸出結果類似于這樣
POST /ajax/validator.php HTTP/1.1
第二種類型:SYN類攻擊
A.CPU占用很高
B.網絡連接狀態:netstat –na,若觀察到大量的SYN_RECEIVED的連接狀態
SYN類攻擊檢測
netstat -na 顯示所有活動的網絡連接
netstat -an | grep :80 | sort 顯示所有80端口的網絡連接并排序。80端口為http端口
netstat -n -p | grep SYN_REC | wc -l 查看當前有多少活動的SYNC_REC連接,最好值小于5.
netstat -n -p | grep SYN_REC | sort -u 列出所有連接過的IP地址
netstat -n -p | grep SYN_REC | awk ‘{print $5}’ | awk -F: ‘{print $1}’ 列出所有發送SYN_REC連接節點的IP地址
netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n
使用netstat命令計算每個主機連接到本機的連接數
netstat -anp | grep ‘tcp|udp’ | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n 列出所有連接到本機的udp或者tcp連接的數量
netstat -ntu | grep ESTAB | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr 檢查ESTABLISHED 連接并且列出每個IP地址的連接數量
Netstat -plan|grep :80| awk {‘print $5’} | cut -d: -f1 | sort | uniq -c | sort -nk 1 列出所有連接到本機80端口的IP地址和其他連接數
1、利用netstat 工具來檢測查看SYN連接
netstat -n -p -t |wc -l
防護SYN類攻擊措施
防范也主要從兩方面入手,一是sysctl的自身的關于syn方面的配置,二是防火墻策略上。
sysctl -w net.ipv4.tcp_syncookies=1 # tcp syncookie,默認關閉
sysctl -w net.ipv4.tcp_max_syn_backlog=1280 # syn隊列,默認1024,》 1280可能工作不穩定,需要修改內核源碼參數
sysctl -w net.ipv4.tcp_synack_retries=2 # syn-ack握手狀態重試次數,默認5,遭受syn-flood攻擊時改為1或2
sysctl -w net.ipv4.tcp_syn_retries=2 # 外向syn握手重試次數,默認4
通過下列命令查看。
[root@localhost nginx]# sysctl -a|grep syn
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 120
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
fs.quota.syncs = 25
如未受到攻擊,上面的參數不建議修改。據說有增加主機的不穩定性的風險。
第三種類型:UDP類攻擊
A.觀察網卡狀況 每秒接受大量的數據包
B.網絡狀態:netstat –na TCP信息正常
UDP類攻擊檢測
檢測udp端口
檢測端口是否打開:nc -zuv ip 端口
服務器監聽端口:nc -l -u ip 端口(可以發送和接受信息)
客戶端檢測端口:nc -u ip 端口(可以發送和接受信息)
查看監聽的tup端口:ss -ant
查看監聽的udp端口:ss -anu
查看所有協議端口:ss -ano
第四種類型:TCP洪水攻擊
A.CPU占用很高
B.netstat –na,若觀察到大量的ESTABLISHED的連接狀態 單個IP高達幾十條甚至上百條,屬于正常。 查看TCP端口連接數
查看網絡連接總數
# netstat -an |wc -l
查看某個特定ip的連接數
# netstat -an |grep 8.8.8.8 |wc -l
查看連接數等待time_wait狀態連接數
# netstat -an |grep TIME_WAIT|wc -l
查看建立穩定連接數量
# netstat -an |grep ESTABLISHED |wc -l
查看不同狀態的連接數
# netstat -an | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'
查看每個ip跟服務器建立的連接數
# netstat -nat|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn
(PS:正則解析:顯示第5列,-F : 以:分割,顯示列,sort 排序,uniq -c統計排序過程中的重復行,sort -rn 按純數字進行逆序排序)
查看每個ip建立的ESTABLISHED/TIME_OUT狀態的連接數
# netstat -nat|grep ESTABLISHED|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn
以下是我自己用VPS測試的結果:
root:~# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
1 114.226.9.xx
1 174.129.237.xx
1 58.60.118.xx
1 Address
1 servers)
2 118.26.131.xx
3 123.125.1.x
每個IP幾個、十幾個或幾十個連接數都還算比較正常,如果像上面成百上千肯定就不正常了。
上述所講到的判斷分析,讓我們能準確的判斷存在的問題是什么,怎么第一時間來解決問題。讓我們能更好的維護我們的網站安全。
TCP洪水攻擊檢測
# tail -f /var/log/messages
Apr 18 11:21:56 web5 kernel: possible SYN flooding on port 80. Sending cookies.
檢查連接數增多,并且SYN_RECV 連接特別多:
檢查連接數增多,并且SYN_RECV 連接特別多:
# netstat -n awk '/^tcp/ { S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 16855
CLOSE_WAIT 21
SYN_SENT 99
FIN_WAIT1 229
根據經驗,正常時檢查連接數如下:
# netstat -n awk '/^tcp/ { S[$NF]} END {for(a in S) print a, S[a]}'
根據netstat查看到的對方IP特征:
# netstat -na grep SYN_RECV more
以下配置,第一段參數是最重要的,第二段參數是輔助的,其余參數是其他作用的:
# vi /etc/sysctl.conf
net.ipv4.tcp_synack_retries=0
#半連接隊列長度
net.ipv4.tcp_max_syn_backlog=200000
#系統允許的文件句柄的最大數目,因為連接需要占用文件句柄
fs.file-max=819200
#用來應對突發的大并發connect 請求
net.core.somaxconn=65536
#最大的TCP 數據接收緩沖(字節)
net.core.rmem_max=1024123000
#最大的TCP 數據發送緩沖(字節)
net.core.wmem_max=16777216
#網絡設備接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目
net.core.netdev_max_backlog=165536
#本機主動連接其他機器時的端口分配范圍
net.ipv4.ip_local_port_range=1000065535
使配置生效:
# sysctl -p
注意,以下參數面對外網時,不要打開。因為副作用很明顯,具體原因請google,如果已打開請顯式改為0,然后執行sysctl -p關閉。因為經過試驗,大量TIME_WAIT狀態的連接對系統沒太大影響:
#當出現 半連接 隊列溢出時向對方發送syncookies,調大 半連接 隊列后沒必要
net.ipv4.tcp_syncookies=0
#TIME_WAIT狀態的連接重用功能
net.ipv4.tcp_tw_reuse=0
#時間戳選項,與前面net.ipv4.tcp_tw_reuse參數配合
net.ipv4.tcp_timestamps=0
#TIME_WAIT狀態的連接回收功能
net.ipv4.tcp_tw_recycle=0
防御TCP洪水攻擊方法
通過調整tcp參數來防范DDOS攻擊 sysctl -a | grep syn 看到:SYN相關的配置 net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
tcp_max_syn_backlog是SYN隊列的長度,tcp_syncookies是一個開關,是否打開SYN Cookie 功能,該功能可以防止部分SYN攻擊。tcp_synack_retries和tcp_syn_retries定義SYN 的重試次數。加大SYN隊列長度可以容納更多等待連接的網絡連接數,打開SYN Cookie功能可以阻止部分 SYN攻擊,降低重試次數也有一定效果。 調整上述設置的方法是:
增加SYN隊列長度到2048:
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
打開SYN COOKIE功能:
sysctl -w net.ipv4.tcp_syncookies=1
降低重試次數:
sysctl -w net.ipv4.tcp_synack_retries=3
sysctl -w net.ipv4.tcp_syn_retries=3
為了系統重啟動時保持上述配置,可將上述命令加入到/etc/rc.d/rc.local文件中。
防止同步包洪水(Sync Flood)
# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
也有人寫作
#iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
--limit 1/s 限制syn并發數每秒1次,可以根據自己的需要修改
防止各種端口掃描
# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
Ping洪水攻擊(Ping of Death)
# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
擴展
問題1:解決time_wait連接數大量問題
查詢到time_wait連接數過多情況下,調整內核參數:/etc/sysctl.conf
# vim /etc/sysctl.conf
添加以下配置文件:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 300
讓配置生效
# /sbin/sysctl -p
參數詳解:
1.net.ipv4.tcp_syncookies = 1 表示開啟 syn cookies 。當出現 syn 等待隊列溢出時,啟用 cookies 來處理,可防范少量 syn ***,默認為 0 ,表示關閉;
2.net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將 time-wait sockets 重新用于新的 tcp 連接,默認為 0 ,表示關閉;
3.net.ipv4.tcp_tw_recycle = 1 表示開啟 tcp 連接中 time-wait sockets 的快速回收,默認為 0 ,表示關閉。
4.net.ipv4.tcp_fin_timeout 修改系靳默認的 timeout 時間
如果以上配置調優后性能還不理想,可繼續修改一下配置:
# vim /etc/sysctl.conf
net.ipv4.tcp_keepalive_time = 1200 #表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改為20分鐘。
net.ipv4.ip_local_port_range = 1024 65000 #表示用于向外連接的端口范圍。缺省情況下很小:32768到61000,改為1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192 #表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網絡連接數。
net.ipv4.tcp_max_tw_buckets = 5000 #表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除并打印警告信息。
默認為180000,改為5000。
對于Apache、Nginx等服務器,上幾行的參數可以很好地減少TIME_WAIT套接字數量,但是對于 Squid,效果卻不大。此項參數可以控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死。
問題2:ESTABLISHED連接數過大問題
怎么解決請求結束后依然存在大量ESTABLISHED沒有被釋放
初步推斷是tomcat服務器回收session時出了問題,這個一般都跟服務器的Timeout設置有聯系。
查看tomcat的配置文件 server.xml
Copy
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
*****
檢查配置得出20000毫秒的時候acceptCount=”100” ,明顯不合理,最大連接數也太小了吧。
所以進一步優化:
Copy
connectionTimeout="20000" 改為 connectionTimeout="100"
acceptCount="100"改為acceptCount="5000"
DDoS攻擊防御方法
**1. 過濾不必要的服務和端口:**可以使用Inexpress、Express、Forwarding等工具來過濾不必要的服務和端口,即在路由器上過濾假IP。比如Cisco公司的CEF(Cisco Express Forwarding)可以針對封包Source IP和Routing Table做比較,并加以過濾。只開放服務端口成為目前很多服務器的流行做法,例如WWW服務器那么只開放80而將其他所有端口關閉或在防火墻上做阻止策略。 **2. 異常流量的清洗過濾:**通過DDOS硬件防火墻對異常流量的清洗過濾,通過數據包的規則過濾、數據流指紋檢測過濾、及數據包內容定制過濾等頂尖技術能準確判斷外來訪問流量是否正常,進一步將異常流量禁止過濾。單臺負載每秒可防御800-927萬個syn攻擊包。
**3. 分布式集群防御:**這是目前網絡安全界防御大規模DDOS攻擊的最有效辦法。分布式集群防御的特點是在每個節點服務器配置多個IP地址(負載均衡),并且每個節點能承受不低于10G的DDOS攻擊,如一個節點受攻擊無法提供服務,系統將會根據優先級設置自動切換另一個節點,并將攻擊者的數據包全部返回發送點,使攻擊源成為癱瘓狀態,從更為深度的安全防護角度去影響企業的安全執行決策。
**4. 高防智能DNS解析:**高智能DNS解析系統與DDOS防御系統的完美結合,為企業提供對抗新興安全威脅的超級檢測功能。它顛覆了傳統一個域名對應一個鏡像的做法,智能根據用戶的上網路線將DNS解析請求解析到用戶所屬網絡的服務器。同時智能DNS解析系統還有宕機檢測功能,隨時可將癱瘓的服務器IP智能更換成正常服務器IP,為企業的網絡保持一個永不宕機的服務狀態。
參考鏈接 :
https://www.cnblogs.com/mydomain/archive/2013/05/14/3079002.html
https://www.cnblogs.com/hello-sky/p/11598954.html
五種簡單CC攻擊解決方案 http://www.anxinidc.com/faq/anquan/126.html
linux檢測及防止DDOS攻擊的技巧(2) http://www.xitongzhijia.net/xtjc/20150608/50328_2.html
TCP洪水攻擊(DDOS)診斷與防護http://blog.sina.com.cn/s/blog_6f82cb740101j7z0.html
服務器被ddos攻擊?分析如何防止DDOS攻擊? :https://blog.csdn.net/weixin_34407348/article/details/86013716?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.nonecase
DDos攻擊的常見方法及防御方法 https://www.cnblogs.com/larry-luo/p/10208074.html
原文地址:https://blog.csdn.net/qq_40907977/article/details/106897732