iptables限制同一IP连接数
?
最近服務器老down掉,今天特意設置防火墻,經測試以下是防止DDOS的極好方法
=====================iptables 防DDOS========
iptables -t filter -A OUTPUT -p tcp --sport 80 -mlimit --limit 1024/s -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 80 -d $yourip??-j REJECT
?
#iptables -t filter -A INPUT -p tcp --sport 80 -mlimit --limit 1000/s -j ACCEPT
#iptables -t filter -A INPUT?-p tcp --sport 80 -d $yourip??-j REJECT
--------------------------------------------------------------------------------------------------------------------------
http://iambin.blogbus.com/logs/63647029.html
?
版的 iptables 有個好用簡單又有效率的功能,可以設定它阻止瞬間聯機太多的來源 IP。這種阻擋功能在某些很受歡迎的,特別像是大型討論區網站,每個網頁都遭到「無知卻故意」的人士。一瞬間太多的鏈接訪問,導致服務器呈現呆滯狀態。?
這時,就需要下列的三行指令:?
iptables -I INPUT -p tcp --dport 80 -d SERVER_IP -m state --state NEW -m recent --name httpuser --set
?
iptables -A INPUT -m recent --update --name httpuser --seconds 60 --hitcount 9 -j LOG --log-prefix 'HTTP attack: '
?
iptables -A INPUT -m recent --update --name httpuser --seconds 60 --hitcount 9 -j DROP?
其中 SERVER_IP 換上被***的服務器 IP。?
1. ? ?第一行的意思是:-I,將本規則插入到 INPUT 鏈里頭的最上頭。什么樣的規則呢?只要是 TCP 性質的聯機,目標端口是80,目標 IP 是我們機器的IP,剛剛新被建立起來時,我們就將這個聯機列入 httpuser 這分清單中。?
2. ? ?第二行的意思是:-A,將本規則附在 INPUT 鏈的最尾端。只要是60秒內,同一個來源連續產生多個聯機,到達第9個聯機時,我們對此聯機留下 Log記錄。記錄行會以 HTTP attack 開頭。每一次的本規則比對, –update 均會更新 httpuser 清單中的列表。?
3. ? ?第三行的意思是:-A,將本規則附在 INPUT 鏈的最尾端。同樣的比對條件,但是本次的動作則是將此聯機給斷掉。?
所以,這三行規則表示,我們允許一個客戶端,每一分鐘內可以接上服務器8個。具體數值可以看管理者決定。這些規則另外也可以用在其它對 Internet 開放的聯機服務上,例如 port?
?
?
?
=========================================================
?netstat -an -t |grep '80'| grep SYN_RECV 發現有900+個連接
??假如說******的是Web 80端口,察看連接80端口的客戶端IP和端口,命令如下:
?netstat -an -t |grep '80'| grep ESTABLISHED | awk '{printf "%s %s\n",$5,$6}' | sort|more
?
?
如果來自同一IP的連接很多(超過50個),而且都是連續端口,就很可能是***。?
?
?
netstat -ntu |sed '1,2d'| awk '{print $NF}' | cut -d: -f1 | sort | uniq -c | sort -n
?
?
nload
fitop #然后按大S
net.ipv4.tcp_fin_timeou=10
iptables -I?INPUT -p tcp --dport 80 -s $IP ?-j ?DROP?
===========================show syn test
?
?
? 1 #!/bin/bash
? 2 filename=/tmp/test.test
? 3 netstat -an -t|awk 'NR>3''{print $5 }'|awk -F: '{print $1 }'>$filename
? 4
? 5 while
? 6 read IPm
? 7 do
? 8 echo $IP
? 9 done <$filename
?10 rm $filename
?
?
?
################################################
新版的 iptables 有個好用簡單又有效率的功能,可以設定它阻止瞬間聯機太多的來源 IP。這種阻擋功能在某些很受歡迎的,特別像是大型討論區網站,每個網頁都遭到「無知卻故意」的人士。一瞬間太多的鏈接訪問,導致服務器呈現呆滯狀態。
這時,就需要下列的三行指令:
iptables -I INPUT -p tcp --dport 80 -d SERVER_IP -m state --state NEW -m recent --name httpuser --set
iptables -A INPUT -m recent --update --name httpuser --seconds 60 --hitcount 9 -j LOG --log-prefix 'HTTP attack: '
iptables -A INPUT -m recent --update --name httpuser --seconds 60 --hitcount 9 -j DROP
其中 SERVER_IP 換上被***的服務器 IP。
1.??? 第一行的意思是:-I,將本規則插入到 INPUT 鏈里頭的最上頭。什么樣的規則呢?只要是 TCP 性質的聯機,目標端口是80,目標 IP 是我們機器的IP,剛剛新被建立起來時,我們就將這個聯機列入 httpuser 這分清單中。
2.??? 第二行的意思是:-A,將本規則附在 INPUT 鏈的最尾端。只要是60秒內,同一個來源連續產生多個聯機,到達第9個聯機時,我們對此聯機留下 Log記錄。記錄行會以 HTTP attack 開頭。每一次的本規則比對, –update 均會更新 httpuser 清單中的列表。
3.??? 第三行的意思是:-A,將本規則附在 INPUT 鏈的最尾端。同樣的比對條件,但是本次的動作則是將此聯機給斷掉。
所以,這三行規則表示,我們允許一個客戶端,每一分鐘內可以接上服務器8個。具體數值可以看管理者決定。這些規則另外也可以用在其它對 Internet 開放的聯機服務上,例如 port 22 (SSH), port 25 (smtp email)。
為什么新版的 iptables 它在阻擋上很有效率呢?因為在舊版的 iptables 中,并沒有這些新模塊功能,導致我們得需要使用操作系統的 Shell 接口,周期性地執行網絡檢查與攔阻動作。 前者只動用到網絡層的資源,而后者已經是應用層的大量(相對而言)運算。試想,服務器都已經給白目客戶操翻天了,哪還有余力周期性地呼叫軟件層級的計算,來阻擋白目客戶呢?
如果下上述指令時,得到下列錯誤:
iptables: No chain/target/match by that name
這表示, kernel 在編譯時,沒有將 iptables module 功能勾選。要重新勾選再編譯哦~~~另一個可能是,您使用的服務器,該服務公司所提供的共享核心中,并沒有打開此功能,但因為是核心共享…所以…沒有權利重新編譯核心。
?
source:http://hi.baidu.com/deathshadow/blog/item/e182ab367d2c16cfa2cc2b46.html
source:http://iambin.blogbus.com/logs/63647029.html
轉載于:https://blog.51cto.com/comtv/703964
總結
以上是生活随笔為你收集整理的iptables限制同一IP连接数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联想E431 安装ubuntu16.04
- 下一篇: 3GPP R16的Conditional