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

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

我在基于 Linux 的路由器后面有一个 FreeBSD 系统(使用DD-WRT 固件)。FreeBSD 系统正在运行 sshd,并且经常受到各种脚本小子的探测。

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

如果我使用:

iptables -I INPUT -s $IP -j DROP

那么路由器将拒绝尝试联系路由器本身的 IP - 但会很乐意将连接转发到 LAN。

如果我使用

iptables -I FORWARD -s $IP -j DROP

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

有没有单身的规则——或者至少是单个命令——我可以为每个攻击 IP 制定一个规则来拦截所有往返于该 IP 的流量吗?

谢谢你!

答案1

是否存在一些单一规则 - 或者至少是单一命令 - 我可以为每个攻击 IP 制定一些规则来拦截所有往返于该 IP 的流量?

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

但不要直接屏蔽 IP 地址:设置ipset黑名单

ipset create blacklist hash:ip hashsize 4096

设置 iptables 规则来匹配该黑名单,只需一次性操作:

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

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

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

 ipset add blacklist 192.168.0.5 
 ipset add blacklist 192.168.0.100 

ETC。

答案2

我不知道有任何规则,但我认为如果你阻止一条规则,那应该就没问题了。如果你真的需要将两条命令放在一行上,你可以用 && 连接起来。以下是阻止入站流量的方法:

iptables -I INPUT -p tcp -s $IP -j DROP

如果您想阻止端口探测,可以将协议更改为icmp。可以使用 阻止出站流量-I OUTPUT,使用 阻止转发流量-I FORWARD

答案3

检查 mangle 表上的预路由链是否存在与主机的连接并进行转发。

我目前没有可以测试的系统,但请尝试在此创建规则。

答案4

如果你只想阻止 TCP 连接,那么你可以使用

iptables -I OUTPUT -d $IP -j DROP

这样,所有传入到 INPUT 的连接或 FORWARDed 的连接的所有回复都不会返回到 $IP。唯一的缺点是机器将接收 SYN 并尝试发送 SYN/ACK 一段时间,然后放弃。这对性能的影响应该可以忽略不计,因为这在现代操作系统中已经足够优化,可以防止 SYN 洪水攻击。

相关内容