1. sysctl -w net.ipv4.tcp_syncookies=1 #啟用使用syncookiessysctl -w net.ipv4.tcp_synack_retries=1 #降低syn重試次數sysctl -w net.ipv4.tcp_syn_retries=1 #降低syn重試次 ...
1.
sysctl -w net.ipv4.tcp_syncookies=1 #啟用使用syncookies
sysctl -w net.ipv4.tcp_synack_retries=1 #降低syn重試次數
sysctl -w net.ipv4.tcp_syn_retries=1 #降低syn重試次數
sysctl -w net.ipv4.tcp_max_syn_backlog=6000 #最大半連接數
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv4.conf.all.accept_redirects=0 #不接受重定向的icmp數據包
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_keepalive_time=60
sysctl -w net.ipv4.tcp_window_scaling=1
sysctl -w net.ipv4.icmp_echo_ignore_all=1 #禁止ICMP
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1#ICMP禁止廣播
2.限制單位時間內連接數
如
iptables -N syn-flood
iptables -A FORWARD -p tcp --syn -j syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -A syn-flood -p tcp --syn -m limit --limit 3/s--limit-burst 1 -j ACCEP
iptables -A syn-flood -j DROP
iptables -A INPUT -i eth0 -p tcp ! --syn -m state --state NEW-j DROP
iptables -A INPUT -p tcp --syn -m state --state NEW -jDROP
3 如果還是不行,
iptables -A INPUT -p tcp --dport 80 -m recent --nameBAD_HTTP_ACCESS --update --seconds 60 --hitcount 30 -j REJECT
iptables -A INPUT -p tcp --dport 80 -m recent --nameBAD_HTTP_ACCESS --set -j ACCEP
如攻擊過來的流量大於你的伺服器的流量,那就沒有什麼辦法了,如果流量不大,以上方法,可以暫時保證你的80可以訪問
---------------------------------------------------------------------------------------------
如果你的內核已經支持iptables connlimit可以使用, iptables設定部份,也可以使用
iptables -I FORWARD -p tcp --syn -m connlimit--connlimit-above 5 -j DROP
或
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit--connlimit-above 5 -j REJECT
------------------------------------------------------------------------------------
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -jACCEPT
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -mlimit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m limit--limit 1/s -j ACCEPT
echo 2048 >/proc/sys/net/ipv4/tcp_max_syn_backlog
echo 1 >/proc/sys/net/ipv4/tcp_synack_retries
echo 1 >/proc/sys/net/ipv4/tcp_syn_retries
echo 1 >/proc/sys/net/ipv4/tcp_syncookies
查詢某ip併發連接數
netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print$1}'|sort|uniq -c|sort -r
統計
netstat -na |grep SYN_RECV |grep 80 |wc -l
查看各個狀態總數
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}'
---------------------------------------------------------------------------------------------
防止同步包洪水(Sync Flood)
# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -jACCEPT
也有人寫作
#iptables -A INPUT -p tcp --syn -m limit --limit 1/s -jACCEPT
--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 -mlimit --limit 1/s -j ACCEPT
vi /etc/sysctl.conf
net.ipv4.tcp_tw_reuse = 1
該文件表示是否允許重新應用處於TIME-WAIT狀態的socket用於新的TCP連接。
net.ipv4.tcp_tw_recycle = 1
recyse是加速TIME-WAIT sockets回收
對tcp_tw_reuse和tcp_tw_recycle的修改,可能會出現.warning, got duplicatetcp line warning, got BOGUS tcpline.上面這二個參數指的是存在這兩個完全一樣的TCP連接,這會發生在一個連接被迅速的斷開並且重新連接的情況,而且使用的埠和地址相同。但基本上這樣的事情不會發生,無論如何,使能上述設置會增加重現機會。這個提示不會有人和危害,而且也不會降低系統性能,目前正在進行工作
net.ipv4.tcp_syncookies = 1
表示開啟SYNCookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,預設為0,表示關閉;
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_keepalive_time = 1200
表示當keepalive起用的時候,TCP發送keepalive消息的頻度。預設是2小時
net.ipv4.tcp_fin_timeout = 30
fin_wait1狀態是在發起端主動要求關閉tcp連接,並且主動發送fin以後,等待接收端回覆ack時候的狀態。對於本端斷開的socket連接,TCP保持在FIN-WAIT-2狀態的時間。對方可能會斷開連接或一直不結束連接或不可預料的進程死亡。
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
該文件指定了,在介面接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。
net.ipv4.tcp_max_tw_buckets = 5000
sysctl -p