如何在 OpenBSD 中使用 pf 阻止滥用 IP 地址?

som*_*533 13 openbsd pf

我们可以从nginx日志中看到有一个IP地址在做一些讨厌的事情。

我们如何使用pf命令阻止它,然后使用/etc/pf.log? 我们如何阻止x.x.x.x/24该 IP 的 a?例如:1.2.3.4

更新:不,看起来 OpenBSD 在 /etc 中没有允许/拒绝文件。AFAIK 阻止滥用 IP 地址的最佳建议是使用 pf。

# cd /etc 
# ls -la|egrep -i 'deny|allow'
# uname -a
OpenBSD foo.com 5.4 GENERIC.MP#0 amd64
# 
Run Code Online (Sandbox Code Playgroud)

Zé *_*off 14

最好的方法是定义一个表并创建一个规则来阻止主机,在pf.conf

table <badhosts> persist
block on fxp0 from <badhosts> to any
Run Code Online (Sandbox Code Playgroud)

然后从中动态添加/删除 IP 地址:

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4
Run Code Online (Sandbox Code Playgroud)

其他“表格”命令包括flush(全部删除)replaceshow. 查看man pfctl更多。

如果您想要一个更永久的列表,您可以将其保存在一个(或多个)文件中。在pf.conf

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any
Run Code Online (Sandbox Code Playgroud)

您还可以添加主机名而不是 IP 地址。见的“表”部分man pf.confman pfctl

注意以上示例假设面向互联网的界面是fxp0,请根据您的设置进行更改。另外,请记住,in 中的规则pf.conf是按顺序评估的,并且 forblockpassrules 是最后一个适用的匹配规则。有了这个规则集

table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80
Run Code Online (Sandbox Code Playgroud)

并在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
Run Code Online (Sandbox Code Playgroud)

来自 1.2.3.4 和 192.168.0.10 的所有流量都将被阻止,但第二台主机能够连接到其他机器的端口 80,因为该pass规则匹配并覆盖该block规则。

  • 可以更轻松地将阻止规则指定为 `block in from &lt;badhosts&gt;`。您不需要指定 interface 或 `to any` 部分。 (4认同)

rye*_*ayo 3

我从网站上获得了此信息,请原谅我对 的了解不够OpenBSD,但就这样了。看看这个网址。根据它的说法,要阻止 IP,您需要:

echo '123.123.123.123' >> /etc/pf.blocked.ip.conf

然后您将重新启动防火墙:

pfctl -d
pfctl -e -f /etc/pf.conf
Run Code Online (Sandbox Code Playgroud)

或者,在不重新启动防火墙的情况下添加:

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
    
    Run Code Online (Sandbox Code Playgroud)

  • 无需禁用并重新启用 pf 来重新加载 pf.conf。`pfctl -f /etc/pf.conf` 就足够了。 (3认同)