我的/etc/rc.firewall
文件包含我创建的以下附加行,目的是禁止攻击者的 DDoSers IP:
${fwcmd} add deny ip from 122.228.19.80/24,\
185.234.219.65/24,\
92.118.38.57/24,\
185.36.81.143/24,\
141.98.10.137/24,\
45.125.66.144/24,\
185.100.87.190/24,\
45.142.195.6/24,\
45.143.223.52/24,\
103.7.10.131/24,\
52.178.192.68/24,\
80.82.77.33/24,\
164.68.112.178/24,\
81.95.5.34/24 to any
该列表每周都在急剧增长。我如何创建一个文本文件以便ipfw
会直接从那里获取这些IP吗?最简单的方法是什么?
PS:我找不到理由隐藏/mask 上面的那些 IP,因为它们是真正随机填充的日志文件,根本不是普通用户!对于其他人来说,了解它们并阻止它们也会很有用:)
操作系统:FreeBSD 12.1
答案1
又快又脏
所有的配置ipfw
都是通过发出命令来完成的ipfw
。在你的情况下,它被包裹在${fwcmd}
并且是一个参数替换(看嘘(0)段落Parameter Expansion
)。/etc/rc.firewall
然后可以将其视为sh
shell 脚本(带有一些附加的辅助函数)。
那么就很简单了:
cat list.txt | xargs -I BANIP ${fwcmd} add deny ip from BANIP to any
该文件list.txt
通过管道传输到参数它构造了命令。list.txt
每行应包含一个 IP 地址或子网。
例子:
122.228.19.80
185.234.219.65
92.118.38.57/24
185.36.81.143/24
安静
从你的问题我们看不到${fwcmd}
扩展到什么。它可能像这样简单ipfw
。对于在脚本中使用,最好使用ipfw -q
(请参阅ipfw(8)) 使其更加稳健。添加时它会为您创建一个表,并优雅地处理添加相同地址两次。
表格
如上所述添加一大堆deny
规则有点混乱。如果你把它们放到一个表中,然后根据表制定规则,那就干净多了。
首先我们创建表 #1 并填充它:
ipfw -q table 1 add 122.228.19.80
ipfw -q table 1 add 185.234.219.65
ipfw -q table 1 add 92.118.38.57/24
ipfw -q table 1 add 185.36.81.143/24
然后我们在规则中使用该表:
ipfw add deny ip from 'table(1)' to any
然后我们使用list.txt
和以前一样的方法。然后我们可以随时刷新并重新加载表:
ipfw table 1 flush
cat list.txt | xargs ipfw -q table 1 add
上面的内容可以在玩的时候在命令行上执行。
在您的配置脚本的上下文中,它会类似于:
cat list.txt | xargs ${fwcmd} table 1 add
${fwcmd} add deny ip from 'table(1)' to any
周围的“标记”table(1)
是为了确保 shell 不会尝试()
以任何方式进行解释。你可以选择逃脱他们也是。结果相同,但人类阅读起来有点困难。
${fwcmd} add deny ip from table\(1\) to any