2017-03-16 59 views
-1

在我的Linux服務器上,我想禁止使用IPtables訪問特定端口24小時的IP。對於這一點,我用下面的iptables規則:iptables阻止IP x小時不工作?

# Check if IP is on banlist, if yes then drop 
-A INPUT -m state --state NEW -j bancheck 
-A bancheck -m recent --name blacklist --rcheck --reap --seconds 86400  -j LOG --log-prefix "IPT blacklist_ban: " 
-A bancheck -m recent --name blacklist --rcheck --reap --seconds 86400  -j DROP 

# PUT IPs on banlist 
-A banlist -m recent --set --name blacklist -j LOG --log-prefix "IPT add_IP_to_blacklist: " 
-A banlist -j DROP 

# Ban access to these ports 
-A INPUT -p tcp -m multiport --dports 23,25,445,1433,2323,3389,4899,5900 -j LOG --log-prefix "IPT syn_naughty_ports: " 
-A INPUT -p tcp -m multiport --dports 23,25,445,1433,2323,3389,4899,5900 -j banlist 

在日誌中,我可以驗證這個工程:

Mar 13 02:12:23 kernel: [39534099.648488] IPT syn_naughty_ports: IN=eth0 OUT= MAC=... SRC=218.189.140.2 DST=... LEN=52 TOS=0x00 PREC=0x00 TTL=113 ID=29768 DF PROTO=TCP SPT=65315 DPT=25 WINDOW=8192 RES=0x00 SYN URGP=0 
Mar 13 02:12:23 kernel: [39534099.648519] IPT add_IP_to_blacklist: IN=eth0 OUT= MAC=... SRC=218.189.140.2 DST=...4 LEN=52 TOS=0x00 PREC=0x00 TTL=113 ID=29768 DF PROTO=TCP SPT=65315 DPT=25 WINDOW=8192 RES=0x00 SYN URGP=0 
Mar 13 02:12:26 kernel: [39534102.664136] IPT blacklist_ban: IN=eth0 OUT= MAC=... SRC=218.189.140.2 DST=... LEN=52 TOS=0x00 PREC=0x00 TTL=113 ID=4724 DF PROTO=TCP SPT=65315 DPT=25 WINDOW=8192 RES=0x00 SYN URGP=0 

但隨後的日誌也顯示,剛剛超過2個小時後,同樣的IP再次訪問我的系統。而不是在開始時通過鏈接「bancheck」被阻止,IP可以訪問該端口,這導致它再次被置於「禁止列表」(在兩種情況下目標端口是相同的端口25)。

Mar 13 04:35:59 kernel: [39542718.875859] IPT syn_naughty_ports: IN=eth0 OUT= MAC=... SRC=218.189.140.2 DST=... LEN=52 TOS=0x00 PREC=0x00 TTL=113 ID=4533 DF PROTO=TCP SPT=57719 DPT=25 WINDOW=8192 RES=0x00 SYN URGP=0 
Mar 13 04:35:59 kernel: [39542718.875890] IPT add_IP_to_blacklist: IN=eth0 OUT= MAC=... SRC=218.189.140.2 DST=... LEN=52 TOS=0x00 PREC=0x00 TTL=113 ID=4533 DF PROTO=TCP SPT=57719 DPT=25 WINDOW=8192 RES=0x00 SYN URGP=0 
Mar 13 04:36:02 kernel: [39542721.880524] IPT blacklist_ban: IN=eth0 OUT= MAC=... DST=... LEN=52 TOS=0x00 PREC=0x00 TTL=113 ID=12505 DF PROTO=TCP SPT=57719 DPT=25 WINDOW=8192 RES=0x00 SYN URGP=0 
Mar 13 04:36:08 kernel: [39542727.882973] IPT blacklist_ban: IN=eth0 OUT= MAC=... SRC=218.189.140.2 DST=... LEN=48 TOS=0x00 PREC=0x00 TTL=113 ID=29092 DF PROTO=TCP SPT=57719 DPT=25 WINDOW=8192 RES=0x00 SYN URGP=0 

但是,如果我理解iptables規則正確的,它應該被阻止的前幾行之內,只要是在24小時內,並沒有能夠靜下心來遠在iptables規則集再次被發現違反港口規則,並再次被列入「禁令」。

我做錯了什麼,或者我誤解了規則的工作方式?

+0

您是否嘗試測試規則是否實際工作?就像嘗試阻止自己(嘗試從遠程服務器或位置訪問您的服務器)。看看這個塊是否處於活動狀態,您仍然可以訪問服務器 –

+0

是的,我做了,它確實有效,我被阻止,並且我的IP顯示在日誌中,如上所示。 – anz21

回答

0

工作從我的服務器例如對於SSH

iptables -X black 
iptables -N black 
iptables -A black -m recent --set --name blacklist -j DROP 

iptables -X ssh 
iptables -N ssh 
iptables -I ssh 1 -m recent --update --name blacklist --reap --seconds 86400 -j DROP 
iptables -A INPUT -p TCP --dport ssh -m state --state NEW -j ssh 

不要忘記創建使用iptables -N

與你的配置比較這個iptables鏈,看看是否有任何顯着的差異。

更好的解決方案將是使用IPSET結合的iptables:

超時創建一組和添加條目時 所有集類型支持可選的超時參數。 create命令的timeout參數值表示新條目的默認超時值(以秒爲單位)。如果使用超時支持創建了一個集合,那麼當添加條目時,可以使用相同的超時選項指定非默認超時值。零超時值意味着條目被永久添加到集合中。通過使用-exist選項讀取元素,可以更改已添加元素的超時值。 例如:

ipset create test hash:ip timeout 300 
ipset add test 192.168.0.1 timeout 60 
ipset -exist add test 192.168.0.1 timeout 600 
+0

謝謝你會試試這個。 – anz21

+0

你的文章沒有顯示IP被髮送到「黑色」鏈的地點和方式。我是否正確理解,任何尋求訪問SSH端口的IP都會被髮送到鏈接「ssh」,在那裏被禁止?沒有進一步的禁令標準是明顯的?那麼,任何尋求訪問您的SSH端口的IP將被禁止24小時? – anz21