syn***-別人說的,我總結下,沒測試

sysctl -w  net.core.netdev_max_backlog=8000
sysctl -w  net.core.rmem_max=16777216
sysctl -w  net.core.wmem_max=16777216
sysctl -w  net.ipv4.conf.all.accept_redirects=0      
sysctl -w  net.ipv4.conf.all.send_redirects=0
sysctl -w  net.ipv4.icmp_echo_ignore_all=1
sysctl -w  net.ipv4.icmp_echo_ignore_broadcasts=1
#sysctl -w  net.ipv4.ip_conntrack_max=300000
sysctl -w  net.ipv4.ip_local_port_range="1024 65000"
#sysctl -w  net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=3800
sysctl -w  net.ipv4.tcp_fin_timeout=30              
sysctl -w  net.ipv4.tcp_keepalive_time=60              
sysctl -w  net.ipv4.tcp_max_syn_backlog=8192
sysctl -w  net.ipv4.tcp_max_tw_buckets=5000
sysctl -w  net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w  net.ipv4.tcp_synack_retries=1     
sysctl -w  net.ipv4.tcp_syncookies=1       
sysctl -w  net.ipv4.tcp_syn_retries=1     
sysctl -w  net.ipv4.tcp_tw_recycle=1
sysctl -w  net.ipv4.tcp_tw_reuse=1
sysctl -w  net.ipv4.tcp_window_scaling=1


iptables -A INPUT -p tcp --syn -m limit --limit 30/s -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -m limit --limit 30/m --limit-burst 2 -j ACCEPT

iptables -A INPUT  -p tcp --syn -m connlimit --connlimit-above 15 -j DROP

iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT

netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
netstat -an | grep ^tcp | awk '{print  $NF}' | sort | uniq -c | sort

netstat -atp | grep http | grep ESTABLISHED -c

SYN Flood利用TCP協議缺陷,發送了大量僞造的TCP連接請求,使得被***方資源耗盡,無法及時迴應或處理正常的服務請求。一個正常的TCP連接需要三次握手,首先客戶端發送一個包含SYN標誌的數據包,其後服務器返回一個SYN/ACK的應答包,表示客戶端的請求被接受,最後客戶端再返回一個確認包ACK,這樣才完成TCP連接。在服務器端發送應答包後,如果客戶端不發出確認,服務器會等待到超時,期間這些半連接狀態都保存在一個空間有限的緩存隊列中;如果大量的SYN包發到服務器端後沒有應答,就會使服務器端的TCP資源迅速耗盡,導致正常的連接不能進入,甚至會導致服務器的系統崩潰。
防火牆通常用於保護內部網絡不受外部網絡的非授權訪問,它位於客戶端和服務器之間,因此利用防火牆來阻止DoS***能有效地保護內部的服務器。針對SYN Flood,防火牆通常有三種防護方式:SYN網關、被動式SYN網關和SYN中繼。
SYN網關 防火牆收到客戶端的SYN包時,直接轉發給服務器;防火牆收到服務器的SYN/ACK包後,一方面將SYN/ACK包轉發給客戶端,另一方面以客戶端的名義給服務器回送一個ACK包,完成TCP的三次握手,讓服務器端由半連接狀態進入連接狀態。當客戶端真正的ACK包到達時,有數據則轉發給服務器,否則丟棄該包。由於服務器能承受連接狀態要比半連接狀態高得多,所以這種方法能有效地減輕對服務器的***。
被動式SYN網關 設置防火牆的SYN請求超時參數,讓它遠小於服務器的超時期限。防火牆負責轉發客戶端發往服務器的SYN包,服務器發往客戶端的SYN/ACK包、以及客戶端發往服務器的ACK包。這樣,如果客戶端在防火牆計時器到期時還沒發送ACK包,防火牆則往服務器發送RST包,以使服務器從隊列中刪去該半連接。由於防火牆的超時參數遠小於服務器的超時期限,因此這樣能有效防止SYN Flood***。
SYN中繼防火牆在收到客戶端的SYN包後,並不向服務器轉發而是記錄該狀態信息然後主動給客戶端回送SYN/ACK包,如果收到客戶端的ACK包,表明是正常訪問,由防火牆向服務器發送SYN包並完成三次握手。這樣由防火牆做爲代理來實現客戶端和服務器端的連接,可以完全過濾不可用連接發往服務器。


CLOSED:無連接是活動的或正在進行
LISTEN:服務器在等待進入呼叫
SYN_RECV:一個連接請求已經到達,等待確認
SYN_SENT:應用已經開始,打開一個連接
ESTABLISHED:正常數據傳輸狀態
FIN_WAIT1:應用說它已經完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時嘗試關閉
TIME_WAIT:另一邊已初始化一個釋放
LAST_ACK:等待所有分組死掉
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章