在 FreeBSD 上,如何在 WAN 上打开端口但不在 LAN 上打开端口?

在 FreeBSD 上,如何在 WAN 上打开端口但不在 LAN 上打开端口?

我有一台 FreeBSD 机器,用作 playbox/服务器/torrentbox。它是我的局域网的一部分。以下是语义(根据 OpenBSD 网站上的示例更改):

[ desktop ]    [ laptop ]
    |            |                               
 ---+------+-----+------- [switch] -------- ( DSL modem )
           |
       [ FreeBSD playbox ]

我已在 10.0.0.0/24 范围内的所有设备中设置静态 IP。所以我的 DSL 调制解调器是 10.0.0.1,我的桌面是 10.0.0.2,FreeBSD 盒子是 10.0.0.3。它还启用了 DHCP,因此每台没有静态 IP 的计算机(朋友带来了一台笔记本电脑)都会由 DSL 调制解调器分配一个 IP,范围为 10.0.0.30 - 10.0.0.60。

我只有一张以太网卡 (em0),我想在 WAN 上打开一个端口,但不想在 LAN 上打开一个端口。这样做:

block in all
pass out all keep state
pass in proto tcp from any to any port 22

也会在 LAN 上打开端口。

在我见过的所有例子中,WAN 和 LAN 是分开的,它有两个 NIC,FreeBSD 扮演了中间层(防火墙)的角色。

那么,如何只在 WAN 上打开端口呢?

这个问题有后续。我想在 LAN 和 WAN 中打开一些端口,但我想对 WAN 施加一些限制。这是我在网上找到的一个例子:

# Setup a table and ruleset that prevents excessive abuse by hosts
# that attempt to brute force the ssh daemon with repeated requests.
# any host that hammers more than 3 connections in 5 seconds gets
# all their packet states killed and dropped into a blackhole table.
table <wan_abuse> persist
block in quick from <wan_abuse>
pass in on $eth proto tcp to any port $wan_servers_tcp flags S/SA keep \
state (max-src-conn 10, max-src-conn-rate 3/5, overload <wan_abuse> flush)

答案1

阻止 LAN 访问:如果pf.conf知道您的 LAN 子网是什么,您可以有选择地阻止来自该子网的流量。使用你的例子:

block in all
pass out all keep state

lan_subnet = "10.0.0.0/24"
block in quick proto tcp from $lan_subnet to any port 22
pass in proto tcp from any to any port 22

限制 WAN 速率,但不限制 LAN:例如,假设您想要对端口 80 和 8080 上来自 Internet 的流量进行速率限制,但不对这些端口上的 LAN 施加速率限制。此代码片段将跟踪并阻止滥用 WAN 主机,同时允许从 LAN 进行访问:

table <http_abuse> persist
http_ports = "{ 80 8080 }"

pass in quick proto tcp from $lan_subnet to any port $http_ports
block in quick proto tcp from <http_abuse> to any port $http_ports

pass in proto tcp from any to any port $http_ports \
    flags S/SA keep state \
    (source-track rule, max-src-conn 50, max-src-conn-rate 25/2, \
     overload <http_abuse> flush)

为了更灵活的限速和阻止,您可以使用类似的工具sshguard,可以方便地从端口和包

相关内容