天天看點

利用linux核心防火牆防禦小規模的 syn flooding

首發于http://www.linux-ch.com/post-14.html

遇到syn flooding(CC)時,很多情況下内一個ip在短時間内有可能并不會再次請求,也有可能在短時間内瘋狂地發送syn請求,兩個都是極端.這個時候我們可以将第一個請求丢棄,過多請求直接屏蔽ip可以取得不錯的效果.腳本如下:

#!/bin/bash

modprobe ipt_recent ip_list_tot=65535 ip_pkt_list_tot=50

iptables -F

iptables -N SYN-FLOODING

iptables -A INPUT -m state --state INVALID -j DROP

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP

iptables -A INPUT -p icmp --icmp-type any -j ACCEPT

iptables -A INPUT -m state --state NEW -m tcp -p tcp --syn -m limit --limit 1/m --limit-burst 500 -m multiport --dports 22,80,8080 -j ACCEPT

iptables -A INPUT -m tcp -p tcp --syn -m multiport --dports 22,80,8080 -j SYN-FLOODING

iptables -A SYN-FLOODING -p tcp --syn -m multiport --dports 22,80,8080 -m recent --name SYN-FLOODING --rcheck --second 120 --hitcount 10 -j DROP

iptables -A SYN-FLOODING -p tcp --syn -m multiport --dports 22,80,8080 -m recent --name SYN-FLOODING --update --second 120 --hitcount 1 -j ACCEPT

iptables -A SYN-FLOODING -p tcp --syn -m multiport --dports 22,80,8080 -m recent --name SYN-FLOODING --set

iptables -A SYN-FLOODING -p tcp --syn -j DROP

iptables -A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

iptables -A INPUT -j REJECT --reject-with icmp-net-unreachable

iptables -A FORWARD -j REJECT --reject-with icmp-net-unreachable

先是修改ipt_recent的參數:

記錄65535個ip,然後每個ip記錄50筆記錄

清空,建立一個SYN-FLOODING的鍊;重點是紅色的部分内容:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --syn -m limit --limit 1/m --limit-burst 500 -m multiport --dports 22,80,8080 -j ACCEPT

當每分鐘向伺服器的22,80,8080三個端口發起的syn請求小于每分鐘500次時,請求通過;

當大于500次每分鐘時請求進入SYN-FLOODING鍊;

iptables -A SYN-FLOODING -p tcp --syn -m multiport --dports 22,80,8080 -m recent --name SYN-FLOODING --rcheck --second 120 --hitcount 10 -j DROP

檢測SYN-FLOODING資料庫,如果發現在120秒内有10次或以上請求直接DROP,沒有或小于則進入下一條;

iptables -A SYN-FLOODING -p tcp --syn -m multiport --dports 22,80,8080 -m recent --name SYN-FLOODING --update --second 120 --hitcount 1 -j ACCEPT

檢測SYN-FLOODING資料庫,如果120秒内有1次或以上的請求通過,沒有記錄則進入下一條;

如果資料是第一次進入的,更新SYN-FLOODING資料庫;最後丢棄該請求.

繼續閱讀