PF 规则和配置允许本地 IP 别名在 FreeBSD 上进行 NAT?

PF 规则和配置允许本地 IP 别名在 FreeBSD 上进行 NAT?

以下是我的配置的具体细节:

防火墙/DNS 服务器:192.168.2.1 (本地 LAN),路由至互联网。<-- 不受我控制 我的 FreeBSD 服务器:192.168.2.23 (LAN)

在我的服务器“内部”,我有一个监狱。(一旦我的防火墙规则开始工作,我就会有更多的监狱。)我正在使用 ezjail 进行设置,而且大部分都运行正常。我想在我的 FreeBSD 服务器的环回设备 lo0 上为它分配一个别名,并给这个监狱分配 127.0.0.10 的 IP

到目前为止,在我的 /etc/pf.conf 中,以下内容正在运行:

# allow the outside world or internet to hit my FreeBSD server on 6500, and send this traffic to 6500
# verified through nc -l 6500 inside the jail, and telnet in from outside world
rdr pass on em0 inet proto tcp from any to 192.168.2.23 port = 6500 -> 127.0.0.10 port 6500

但是我还有两个需求:

1)监狱必须能够通过端口 5555 或 7070 或 TBD 向任何 INTERNET IP(不是 192.* 或 127.*)发送 TCP 流量 2)监狱必须能够仅通过 DNS 端口向 192.168.2.1 发送 TCP 流量(我必须将其用作 NS,因为主防火墙的设置方式不受我的控制,我无法更改这一点)

我不知道如何设置 pf 来执行此操作。任何帮助都将不胜感激。如果能提供确切的 pf.conf 行,我将不胜感激。我不是网络专家,我读过很多关于此的常见问题解答和手册页,但结果总是我要么遵循 pf >4.5 语法,要么完全搞不清楚他们在研究什么。我在这里列出的实际上是我的“防火墙”需要做的所有事情,所以做了这么多研究却只完成了 1/3,真是令人沮丧。这似乎是一个非常基本的用例

支持信息:

在 rc.conf 中我已经设置:

defaultrouter="192.168.2.1"
ifconfig_em0="inet 192.168.2.23  netmask 255.255.255.0"
ifconfig_lo0_alias0="inet 127.0.0.10 netmask 255.255.255.0"
pf_enable="YES"
gateway_enable="YES"            # Enable as LAN gateway

我的 ifconfigs 给我:

server# ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
    ether 00:0c:29:fc:6f:48
    inet 192.168.2.23 netmask 0xffffff00 broadcast 192.168.2.255
    media: Ethernet autoselect (1000baseT <full-duplex>)
    status: active
plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> metric 0 mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 
    inet6 ::1 prefixlen 128 
    inet 127.0.0.1 netmask 0xff000000 
    inet 127.0.0.10 netmask 0xffffff00 
    nd6 options=3<PERFORMNUD,ACCEPT_RTADV>


jail# ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
    ether 00:0c:29:fc:6f:48
    media: Ethernet autoselect (1000baseT <full-duplex>)
    status: active
plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> metric 0 mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet 127.0.0.10 netmask 0xffffff00

答案1

我对 PF 有点生疏,但你在寻找类似的东西吗?

在 [interface] 上匹配从 192.168.2.23 到任何 nat-to [ip]

将 [接口] 从 192.168.2.23 传递到 !192.168.0.0/24 端口 {7070 5555}

将[接口]从192.168.2.23传递到168.2.23.1端口域

我一直认为openBSD PF 文档和这个地点方便……

编辑:

在 [接口] 上匹配从 127.0.0.10 到任何 nat-to [ip]

通过 [接口] 从 127.0.0.10 快速传递到 192.168.2.1 域

将 [接口] 从 127.0.0.10 传递到 {!192.168.2.0/24}

根据您留下的评论,我相信这就是您正在寻找的内容。

答案2

allowed_bounce_ports="{ 21, 23 }"

nat on em0 from 127.0.0.10 to 192.168.2.1 port = domain -> em0
nat on em0 from 127.0.0.10 to !192.168.0.0/24 port $allowed_bounce_ports -> em0

rdr pass on em0 inet proto tcp from any to 192.168.2.23 port = 6500 -> 127.0.0.10 port 6500

感谢 freenode #freebsd 上的 jhell(也感谢我,终于弄清楚了大部分内容)

相关内容