【问题标题】:iptables block IP for x hours not working?iptables 阻止 IP x 小时不起作用?
【发布时间】:2017-03-16 08:57:19
【问题描述】:

在我的 Linux 服务器上,我想在 24 小时内禁止使用 IPtables 访问某些端口的 IP。为此,我使用以下 IPtables 规则:

# 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 再次访问我的系统。 IP 可以访问端口,而不是在一开始就通过链“bancheck”被阻止,这导致它再次被放入“banlist”(两种情况下的目标端口都是相同的端口 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 规则集中再次下降那么远被发现违反港口规则,再次被列入“禁止名单”。

是我做错了什么,还是我误解了规则的运作方式?

【问题讨论】:

  • 您是否尝试测试这些规则是否真的有效?就像尝试阻止自己(例如尝试从远程服务器或位置访问您的服务器)。查看块处于活动状态时您仍然可以访问服务器
  • 是的,我做到了,它确实有效,我被阻止了,我的 IP 显示在日志中,如上所示。

标签: linux networking iptables ip-blocking


【解决方案1】:

来自我的服务器的 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

【讨论】:

  • 谢谢你试试这个。
  • 您的帖子没有显示 IP 被发送到“黑色”链的位置和方式。我是否正确理解任何寻求访问端口 SSH 的 IP 都被发送到链“ssh”,在那里它被禁止?没有其他明显的禁止标准?那么,任何试图访问您的端口 SSH 的 IP 都将被禁止 24 小时?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
相关资源
最近更新 更多