如何使用 iptables 阻止与某个 IP 地址的所有通信?

Mik*_* T. 1 firewall iptables

我在基于 Linux 的路由器后面有一个 FreeBSD 系统(使用DD-WRT 固件)。FreeBSD 系统正在运行 sshd,并且会定期被各种 script-kiddies 探测。

它当前运行一个脚本,当看到同一 IP 地址登录尝试超过 3 次失败时,会完全阻止该地址。该阻止曾经是本地的(使用 FreeBSD 的ipfw),但我想通过要求路由器进行阻止来覆盖整个 LAN。这让我开始使用 Linux 的防火墙手段——iptables。

如果我使用:

iptables -I INPUT -s $IP -j DROP
Run Code Online (Sandbox Code Playgroud)

那么路由器将拒绝尝试联系路由器本身的 IP,但会愉快地将连接转发到 LAN。

如果我使用

iptables -I FORWARD -s $IP -j DROP
Run Code Online (Sandbox Code Playgroud)

它将阻止攻击者访问我的 LAN,但会保持路由器可访问他们。

是否有一些单一的规则——或者至少是单一的命令——我可以为每个攻击 IP 拦截任何进出它的流量?

谢谢你!

HBr*_*ijn 6

是否有一些单一的规则——或者至少是单一的命令——我可以为每个攻击 IP 拦截任何进出它的流量?

您需要两个 iptables 规则,因为您需要阻止两个不同的流。

但不是直接阻止 IP 地址:设置ipset黑名单

ipset create blacklist hash:ip hashsize 4096
Run Code Online (Sandbox Code Playgroud)

设置 iptables 规则以匹配该黑名单,这是一次性的工作:

 iptables -I INPUT  -m set --match-set blacklist src -j DROP 

iptables -I FORWARD  -m set --match-set blacklist src -j DROP 
Run Code Online (Sandbox Code Playgroud)

然后您可以使用单个命令添加您需要阻止的每个 IP 地址:

 ipset add blacklist 192.168.0.5 
 ipset add blacklist 192.168.0.100 
Run Code Online (Sandbox Code Playgroud)

ETC。