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.4
或blockip 1.2.3.4 now+2hours
。默认情况下,IP 被阻止 1 小时。
如果您更喜欢 REJECT 语义,则可以用 REJECT 替换 DROP。