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


13

从nginx日志中我们可以看到,有一个IP地址正在处理令人讨厌的事情。

我们如何才能通过pf命令将其阻止,然后在以后永久使用/etc/pf.log?我们如何才能阻止x.x.x.x/24该IP?例如:1.2.3.4

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

# cd /etc 
# ls -la|egrep -i 'deny|allow'
# uname -a
OpenBSD foo.com 5.4 GENERIC.MP#0 amd64
# 

/ etc目录中是否有hosts.deny文件?
ryekayo 2014年

Answers:


13

最好的方法是在中定义一个表并创建一个规则来阻止主机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(全部删除)replaceshow。查看man pfctl更多。

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

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any

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

注意上面的示例假定面向Internet的界面为fxp0,请根据您的设置进行更改。另外,请记住,其中的规则pf.conf是按顺序评估的,并且适用于该规则blockpass最后一条适用的规则。有了这个规则集

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规则。


4
阻止规则可以更容易地指定为block in from <badhosts>。您无需指定界面或to any零件。
kurtm 2014年

4

从其他答案中还不清楚您是否需要创建要阻止的Badhost的实际表。

例如,这存在于pf.conf文件中,我有两个badguys文件,1&2 badguys1用于来去的人,badguys2用于永久性列入黑名单。

因此,如果您需要添加某人的IP地址,并将其添加到badguys1,该IP用户会在一段时间内令人讨厌。

现在,在您的pf.conf文件中有此文件。在我的示例中,我使用en1,因为这是我的WiFi接口。将其设置为您的网络启用的接口。

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on en1 from <badhosts> to any

现在,您可以将临时地址添加到badguys1。(不是坏主机,这是表的名称)

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,但是现在就可以了。看一下这个URL。根据它,它指出要阻止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
    

1
我认为该表需要设置为阻止,但是该方法尚不清楚,我遵循了该部分,但IP仍然没有被阻止
somelooser28533

让我看看是否可以查找该怎么做。
ryekayo 2014年

2
无需禁用并重新启用pf以重新加载pf.conf。pfctl -f /etc/pf.conf足够。
泽的Loff

1
(糟糕)HOWTO会阻止思考并鼓励模仿。阅读man pf.conf,您会对OpenBSD手册页的出色表现感到惊讶。此外,pf.conf文件需要整体读取(规则的放置顺序至关重要),因此复制和粘贴单行通常不是一个好主意。创建文件和table规则(很正确),但是您可以共享整个pf.conf文件,也可以由您自己确定适当的block规则及其在文件中的位置。
泽的Loff

1
@ryekayo除非您可以证明包含ext_if="bge0"宏的理由以及为什么没有阻止规则,否则我批评您的答案,因为它是不完整的(即不是正确的答案),无论您付出了多少努力。再加上我对HOWTO的评论是在OP上解决的,不是您(抱歉,我应该明确地说)。
泽的Loff
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.