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

我有一个基于Linux的路由器(使用DD-WRT固件 )的FreeBSD系统。 FreeBSD系统运行sshd,并且经常被各种脚本小程序探测。

它目前运行一个脚本,当看到从同一个IP地址login失败的尝试超过3次时,将完全阻止该地址。 该块曾经是本地的(使用FreeBSD的ipfw ),但我想覆盖整个局域网 – 通过要求路由器进行阻塞。 这使我使用Linux的防火墙手段 – iptables

如果我使用:

iptables -I INPUT -s $IP -j DROP 

那么路由器会拒绝试图联系路由器本身的IP,但会很乐意将连接转发到局域网。

如果我使用

 iptables -I FORWARD -s $IP -j DROP 

它会阻止攻击者到达我的局域网,但会保持路由器到达他们。

是否有一个单一的规则 – 或者至less单一的命令 – 我可以为每个攻击性的IP拦截任何和所有的stream量和来自它的stream量?

谢谢!

那么不是真的。 你需要两个iptables规则,因为你需要阻塞两个不同的stream。 但不是直接阻止ip地址:build立一个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 

等等。

我没有一个统一的规则,但是我认为如果你阻止一个,你应该是好的。 如果你真的需要在一行上,你可以用&&来join这两个命令。 以下是阻止入站stream量的方法:

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

如果要阻塞端口探测,则可以将协议更改为icmp 。 出站stream量可以用-I OUTPUT来阻止,转发stream量可以用-I FORWARD阻塞。

检查mangle表上的Prerouting链是否连接到主机并被转发。

目前我还没有一个testing系统,但是在这里尝试创build一个规则。

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

 iptables -I OUTPUT -d $IP -j DROP 

通过这种方式,所有到INPUT的input连接或FORWARD连接的回复都不会回到$ IP。 唯一的缺点是机器会收到SYN,并在放弃之前尝试发送SYN / ACK一段时间。 这对性能的影响可以忽略不计,因为在现代操作系统中这已经足够优化,以防止SYN洪水攻击。