使用 iptables 临时阻止 IP 的程序

Joe*_*ite 6 linux firewall iptables

Debian 上是否有程序可以通过启动命令(指定 IP 和持续时间)来临时阻止 IP 地址?

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

cyb*_*ard 7

您需要创建一个 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
Run Code Online (Sandbox Code Playgroud)

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

ipset add temp_hosts 1.1.1.2 timeout 400
Run Code Online (Sandbox Code Playgroud)

请注意,如果您需要这些才能在重新启动后继续存在,您需要保存和加载规则。

ipset save -f /path/ipset.save
ipset restore -f /path/ipset.save
Run Code Online (Sandbox Code Playgroud)

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


use*_*740 2

尝试这个脚本,灵感来自 Dan 的评论:

#!/bin/bash
iptables -I INPUT -s $1 -j DROP
at ${2:-now+1hour} <<<"iptables -D INPUT -s $1 -j DROP"
Run Code Online (Sandbox Code Playgroud)

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

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