如何让 iptables 规则过期?

如何让 iptables 规则过期?

有人告诉我这是可能的,但我在谷歌或手册页上找不到任何东西。

我需要禁止 IP 一段时间,然后自动解除禁止。

答案1

如果你的意思是让 iptables 自己完全删除规则,那么据我所知,你无法做到这一点。这样做的目的是什么?如果你需要某种自动临时禁止,标准解决方案是失败2ban

或者,您可以使用 cron 作业来删除您正在添加的规则,或者,如果您想以交互方式执行此at操作,更好的方法是使用以下作业:

iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm 

还可以查看recentiptables 模块。该模块及其--seconds选项可能会有所帮助,具体取决于您的实际需要。man iptables了解更多信息。

答案2

在规则中添加带有时间戳(可能是纪元以来的秒数)的评论。定期清除过期的规则。

请注意,最新的 Linux 内核支持将 IP 地址动态加载到 iptable 规则查询的缓存中,而不是直接加载到 iptables 规则中。

例子:

iptables  -A INPUT -s 192.168.200.100/32 -m comment --comment "expire=`date -d '+ 5 min' +%s`" -j DROP 
iptables -L INPUT -n --line-numbers | tac | perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { print "iptables -D INPUT $1\n"; }'

当然,您可以iptables -D INPUT $1不打印命令。

答案3

iptables 有一种方法,如果满足用户定义的条件,可以自动将 IP 地址添加到列表中。我使用以下方法来帮助避免对我的 ssh 端口的自动黑客攻击:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP

通过将来自同一 IP 地址的连接尝试限制为每 60 秒一次,这有助于限制自动尝试访问服务器。

如果您希望在一定时间范围内允许一定次数的尝试,例如 5 分钟内 4 次,并在失败时将其列入黑名单更长时间,例如 24 小时,您可以执行以下操作:

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 -I ssh 2   -m recent --update    --name timer       --reap   --seconds   600     --hitcount 4   -j black
iptables -I ssh 3   -m recent --set       --name timer   -j ACCEPT

iptables -A INPUT   -p TCP --dport ssh   -m state --state NEW -j ssh

在上面,我们创建了 2 个链:“ssh”和“black”,以及 2 个列表:“timer”和“blacklist”。

简而言之,上面显示的最后一条链是进入 ssh 链的“门户”。

  • ssh 链中的规则 1 检查源 IP 是否在“黑名单”列表中。如果是,则断开连接并重新启动 24 小时黑名单计时器。如果规则 1 为假,则我们转到规则 2。
  • ssh 链中的规则 2 检查源 IP 是否在 5 分钟内进行了超过 4 次连接尝试。如果是,则将数据包发送到链“black”,然后将其添加到列表“黑名单”中。链“black”随后会丢弃该连接,这样就大功告成了。
  • 仅当规则 1 和 2 为假时,才会达到链“ssh”中的规则 3。如果是这样,则数据包被接受,并且源 IP 被添加到列表“计时器”中,以便我们可以监视连接尝试频率。

“--reap”选项告诉内核搜索列表并清除任何超过设定时间限制的项目;列表“计时器”为 5 分钟,“黑名单”为 24 小时。

注意:额外的空格是为了便于阅读,在你的 shell 脚本中是可选的。

答案4

正如某人所说的那样:您应该使用 ipset 来实现此功能。

ipset 可以添加带有超时值的 ip 地址。当超时结束时,记录将自动从 ipset 中删除。

timeout All set types supports the optional timeout parameter when creating a set and adding entries. The value of the timeout parameter for the create command means the default timeout value (in seconds) for new entries. If a set is created with timeout support, then the same timeout option can be used to specify non-default timeout values when adding entries. Zero timeout value means the entry is added permanent to the set. The timeout value of already added elements can be changed by readding the element using the -exist option. Example: 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

http://ipset.netfilter.org/ipset.man.html

这是控制此行为的首选方法。

相关内容