我们可以从 nginx 日志中看到有一个 IP 地址在做一些令人讨厌的事情。
我们如何使用pf
命令阻止它,然后使用 永久阻止它/etc/pf.log
?我们怎样才能阻止x.x.x.x/24
该IP?例如:1.2.3.4
更新:不,看起来 OpenBSD 在 /etc 中没有允许/拒绝文件。据我所知,阻止滥用 IP 地址的最佳建议是使用 pf。
# cd /etc
# ls -la|egrep -i 'deny|allow'
# uname -a
OpenBSD foo.com 5.4 GENERIC.MP#0 amd64
#
答案1
执行此操作的最佳方法是定义一个表并创建一条规则来阻止主机,如下所示pf.conf
:
table <badhosts> persist
block on fxp0 from <badhosts> to any
然后动态添加/删除 IP 地址:
$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4
其他“表”命令包括flush
(全部删除)replace
和show
.查看man pfctl
更多。
如果您想要一份更永久的列表,可以将其保存在一个(或多个)文件中。在pf.conf
:
table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any
您还可以添加主机名而不是 IP 地址。请参阅man pf.conf
和的“表格”部分man pfctl
。
笔记:上面的例子假设面向互联网的接口是fxp0
,请根据您的设置进行更改。另外,请记住, 中的规则pf.conf
是按顺序评估的,并且对于block
或pass
规则,它是应用的最后一个匹配规则。有了这个规则集
table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80
badhosts
并将 1.2.3.4 和 192.168.0.10 添加到表中后
$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T add 192.168.0.10
来自 1.2.3.4 和 192.168.0.10 的所有流量都将被阻止,但第二个主机除外将要能够连接到其他计算机的端口 80,因为该pass
规则匹配并覆盖该block
规则。
答案2
从其他答案中不清楚您需要创建一个您试图阻止的恶意主机的实际表。
这在pf.conf文件中,例如我有两个badguys文件,1&2 badguys1用于那些来来去去的人,而badguys2用于永久黑名单。
因此,如果您需要添加一段时间内令人讨厌的人的IP,请将其添加到badguys1中。
现在,在你的 pf.conf 文件中你有这个。在我的示例中,我使用 en1,因为那是我的 WiFi 接口。将其设置为您的网络进入的任何接口。
table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on en1 from <badhosts> to any
现在您可以将临时地址添加到 badguys1。 (不是 badhosts,这是表的名称)
sudo pfctl -t badguys1 -T add 185.130.5.160
1 table created.
1/1 addresses added.
虽然它说创建了 1 个表 - 它实际上添加了 ip,而不是创建新表。现在,如果您查看 badguys1,您将看到新的 IP。
sudo pfctl -t badhosts -T show
答案3
我从网站上获得此信息,请原谅我的不了解OpenBSD
,但就这样了。看看这个网址。根据它的说法,要阻止 IP,您需要:
echo '123.123.123.123' >> /etc/pf.blocked.ip.conf
然后您将重新启动防火墙:
pfctl -d
pfctl -e -f /etc/pf.conf
或者,在不重新启动防火墙的情况下添加:
pfctl -t blockedips -T add 111.222.333.444
现在检查是否已添加:
pfctl -t blockedips -T show
更新:也许这会有所帮助。
在 vi 中打开以下文件:
vi /etc/pf.conf
添加以下代码行:
table <blockedips> persist file "/etc/pf.blocked.ip.conf" ext_if="bge0" # interface connected to internet
之后,我会尝试重新启动防火墙并通过输入以下内容确认 IP 已被阻止:
pfctl -d pfctl -e -f /etc/pf.conf pfctl -t blockedips -T show