我在基于 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 洪水攻击。