sh
复制代码
pf_enable="YES"
这行配置位于 /etc/rc.conf 文件中,目的是告诉 FreeBSD 启动时启用 pf 防火墙。pf 是 FreeBSD 上的一个包过滤器(类似于 Linux 上的 iptables),可以用于网络地址转换 (NAT) 和防火墙规则管理。
变量定义
sh
复制代码
ext_if = "re0"
ext_if 是定义外部网络接口的变量,re0 代表你的网卡名称。你可以根据自己机器的网卡情况来替换。如果不确定网卡名称,可以通过命令 ifconfig 查看。
端口转发规则
sh
复制代码
rdr on $ext_if proto tcp from any to $ext_if port 8080 -> 192.168.1.100 port 80
这行是端口转发规则,具体含义如下:
rdr:表示端口重定向(redirect),用于转发端口。
on $ext_if:表示在外部网络接口上进行重定向,这里 $ext_if 是之前定义的变量,表示网卡接口。
proto tcp:表示仅处理 TCP 协议的流量。
from any to $ext_if port 8080:表示来自任何源地址的流量,如果流量是发往外部网络接口的 8080 端口,则进行处理。
-> 192.168.1.100 port 80:表示将这些流量重定向到内网 IP 地址 192.168.1.100 的 80 端口。
总结:这条规则将外部访问外部接口 8080 端口的流量重定向到局域网中的服务器 192.168.1.100 的 80 端口。
NAT 规则
sh
复制代码
nat on $ext_if from 192.168.1.0/24 to any -> ($ext_if)
nat on $ext_if:表示在外部接口上做 NAT(网络地址转换)。
from 192.168.1.0/24:表示来自内网 IP 段 192.168.1.0/24(通常是内网中的计算机)发出的流量。
to any:表示发送到任何外部目标的流量。
-> ($ext_if):表示将内网流量通过外部接口 $ext_if 出去,($ext_if) 表示动态获取接口的外部 IP 地址。
总结:这条 NAT 规则将内网 IP 段的流量通过外部接口翻译为外部 IP,从而允许内网计算机访问外网。
默认放行所有流量
sh
复制代码
pass all
这条规则表示允许所有流量通过防火墙,通常在调试时会放宽规则。在生产环境中,你可以根据需求进一步限制允许的流量。
sh
复制代码
pfctl -f /etc/pf.conf
pfctl:这是 pf 的控制命令,用于管理防火墙规则。
-f /etc/pf.conf:表示重新加载指定的规则文件 /etc/pf.conf。
sh
复制代码
pfctl -e
-e:启用 pf 防火墙。第一次使用 pf 时需要运行此命令启用防火墙。
sh
复制代码
pfctl -sr
-sr:显示当前正在使用的规则,帮助你确认规则是否已加载并生效。
sh
复制代码
pfctl -sn
-sn:显示当前的 NAT 规则,验证 NAT 是否配置正确。
在配置完成后,你可以通过工具(如 telnet、nc 等)测试端口转发是否工作正常,或者使用命令 tcpdump 抓包分析流量是否正确被重定向到内部服务器。
这些命令帮助你启用、配置和查看 FreeBSD 上的端口转发是否正常运行。
# 将外部接口上的端口 8080-8090 的流量重定向到内部服务器 192.168.1.100 的端口 80-90
rdr on $ext_if proto tcp from any to $ext_if port 8080:8090 -> 192.168.1.100 port 80:90