使用 iptables 暂时封锁 IP 的程序

使用 iptables 暂时封锁 IP 的程序

Debian 上是否有阻止 IP 地址的程序暂时地只需启动一个命令(指定IP和持续时间)?

仅使用 iptables/ip6tables,我可以创建规则,但随后必须手动删除。我还使用 fail2ban,但我认为我无法阻止不满足任何 fail2ban 规则的任意 IP 地址。

答案1

您需要创建一个 ipset,以便 iptables 可以对其进行匹配。注意超时 0表示默认永不过期。

ipset create temp_hosts hash:ip timeout 0
iptables -I INPUT 1 -m set -j DROP  --match-set temp_hosts src
iptables -I FORWARD 1 -m set -j DROP  --match-set temp_hosts src

现在我们的集合已经创建,我们可以开始添加 IP 地址(超时单位:秒)。

ipset add temp_hosts 1.1.1.2 timeout 400

请注意,如果您需要这些规则在重启后继续生效,您需要保存并加载规则。

ipset save -f /path/ipset.save
ipset restore -f /path/ipset.save

这些可以通过 cron 或 systemd 自动实现。

答案2

尝试一下这个脚本,受到 Dan 的评论的启发:

#!/bin/bash
iptables -I INPUT -s $1 -j DROP
at ${2:-now+1hour} <<<"iptables -D INPUT -s $1 -j DROP"

另存为/usr/local/sbin/blockip并运行blockip 1.2.3.4blockip 1.2.3.4 now+2hours。默认情况下,IP 被阻止 1 小时。

如果您更喜欢 REJECT 语义,则可以用 REJECT 替换 DROP。

相关内容