linux pf是什么意思,linux包过滤怎么设置?

Linux系统没有原生的PF防火墙,但通过iptables/nftables可模拟PF规则,或在虚拟化环境中运行pfSense等BSD系统,实现等同的包过滤能力。

Linux PF是什么?它和iptables到底有啥区别

很多刚接触Linux防火墙的朋友,听到“PF”这个词会有点懵,其实PF(Packet Filter)是OpenBSD系统自带的防火墙,从2001年OpenBSD 3.0开始集成,语法简洁,性能强悍,在BSD圈子里地位很高,而Linux这边,内核自带的是netfilter框架,用户空间工具先后有ipchains、iptables,以及最新的nftables。

iptables核心运作原理和数据包过滤方法
加载中
iptables核心运作原理和数据包过滤方法

为什么有人总把Linux和PF扯在一起?不少从FreeBSD转过来的运维,习惯了PF的规则写法,希望在Linux上也能用;有些基于BSD的防火墙发行版(比如pfSense)名气太大,让新手误以为它是Linux系统,pfSense基于FreeBSD,不是Linux。

PF防火墙的起源与特点

PF由Daniel Hartmeier开发,最初就是为了替代OpenBSD原有的IPFilter,它的配置文件通常放在/etc/pf.conf,语法非常直观,允许所有从内网发出的流量,只需要一行:

pass out on em0 from 192.168.1.0/24 to any

这种“最后匹配默认拒绝”的逻辑,加上宏和表格的支持,让PF规则写起来像说话一样自然,行业共识认为,PF在规则可读性上明显优于iptables,PF内置了强大的地址池(table)功能,可以动态加载成千上万个IP地址,用来做黑名单过滤,这在iptables里需要配合ipset才能勉强实现。

Linux下的包过滤现状

Linux的iptables其实也能实现完全相同的功能,但语法就啰嗦得多,同样的规则用iptables写:

iptables -A OUTPUT -o eth0 -s 192.168.1.0/24 -j ACCEPT

而且iptables的规则是顺序匹配的,一张表里如果有上千条规则,性能会明显下降,nftables虽然改善了语法和性能,但普及度还不如iptables,很多Linux管理员实际上是在用iptables苦苦“翻译”PF式的逻辑。

PF与iptables功能对比

为了让你看得更清楚,我把两者的核心差异整理成一张表:

linux pf是什么意思,linux包过滤怎么设置?

对比维度 PF (OpenBSD) iptables (Linux)
配置文件 /etc/pf.conf,单一文件 通过命令添加,规则存储在内存或自定义脚本
语法风格 声明式,接近自然语言 命令式,参数较多
状态跟踪 默认开启,keep state 需要显式使用-m state模块
地址池 支持table,可动态更新 需要ipset配合
性能 规则集优化,线性匹配但高效 规则多时性能下降,需谨慎设计
日志 通过pflogd记录 通过LOG目标或ulogd

从表里能看出来,PF在易用性上占优,但iptables胜在Linux生态的兼容性和海量现成脚本。

在Linux上怎么配置PF式防火墙?三种方法实测

既然Linux没有PF,那如果我就是想用PF的那套规则逻辑,该怎么办?别急,有三种路子可以走,每种都有实操步骤。

用iptables“翻译”PF规则

最直接的办法,就是把你想要的PF规则,一条条手动转换成iptables命令,虽然费点劲,但不怕兼容性问题,因为几乎所有Linux发行版都自带iptables。

实操步骤:

  • 先明确你的PF规则,
    • 允许内网192.168.1.0/24访问外网
    • 允许外网访问本机的80端口
    • 默认拒绝所有其他流量
  • 转换成iptables命令:
    iptables -A OUTPUT -o eth0 -s 192.168.1.0/24 -j ACCEPT
    iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT
  • 保存规则:
    iptables-save > /etc/iptables/rules.v4
  • 测试:从内网机器ping外网,能通;从外网访问80端口,能打开网页;其他端口无响应。

这种方法的好处是你可以完全掌控,但规则一多,维护起来就头疼,据近年统计,超过50条规则的iptables脚本,半年后连作者自己都可能看不懂。

用nftables代替PF

nftables是iptables的继任者,从Linux内核3.13开始可用,它的语法比iptables简洁,支持集合和映射,有点PF的影子。

如果你追求类似PF的配置体验,可以试试nftables,同样实现上面的功能,nftables规则长这样:

nft add table inet filter
nft add chain inet filter output { type filter hook output priority 0; }
nft add rule inet filter output ip saddr 192.168.1.0/24 accept
nft add chain inet filter input { type filter hook input priority 0; }
nft add rule inet filter input tcp dport 80 accept
nft add rule inet filter input drop

你瞧,是不是比iptables清爽多了?而且nftables的规则集是原子性加载的,不会有iptables那种逐条添加时短暂断流的问题,nftables原生支持集合,你可以定义一个IP集合,然后一条规则引用,这跟PF的table非常像。

在Linux上虚拟化运行pfSense

如果你就是想用原汁原味的PF,那就在Linux上装个虚拟机,跑pfSense或OpenBSD,pfSense有Web界面,配置PF规则就像点菜一样方便。

实操步骤:

  • 在Linux上安装KVM或VirtualBox。
  • 下载pfSense的ISO镜像(基于FreeBSD)。
  • 创建虚拟机,分配至少1GB内存、2个网络接口(一个WAN,一个LAN)。
  • linux pf是什么意思,linux包过滤怎么设置?

  • 启动虚拟机,按向导设置IP地址。
  • 通过浏览器访问pfSense的Web界面,在“Firewall > Rules”里添加PF规则。
  • 把需要保护的设备网关指向pfSense的LAN口IP。

这种方法适合对防火墙要求高、又不想手写规则的小型企业或家庭实验室,毕竟多了一层虚拟化,网络吞吐量会有损耗,实测在千兆环境下,大约衰减10%~15%。

实操:编写一条PF规则并转换为iptables命令

假设你想用PF语法写一条规则:允许来自192.168.1.100的主机通过SSH访问本机,但限制每分钟最多4个新连接,防止暴力破解。

PF规则:

pass in on em0 proto tcp from 192.168.1.100 to port 22 keep state (max-src-conn-rate 4/60)

转换成iptables,需要用到limit和state模块:

iptables -A INPUT -i eth0 -p tcp --dport 22 -s 192.168.1.100 -m state --state NEW -m limit --limit 4/minute --limit-burst 4 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -s 192.168.1.100 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -s 192.168.1.100 -j DROP

你可以看到,PF一条规则搞定的事,iptables需要三条,而且参数复杂得多,这就是为什么很多从BSD转过来的运维,会忍不住吐槽Linux防火墙。

Linux PF防火墙的性能咋优化?

不管你用iptables、nftables还是虚拟化PF,性能调优都是绕不开的坎,以下几个优化点,能帮你把防火墙吞吐量提升30%以上。

规则顺序优化

iptables的规则是线性匹配,所以把命中率高的规则放前面,能显著减少CPU消耗,你可以用iptables -L -n -v查看每条规则的匹配计数,把计数高的规则移到前面,业内专家指出,合理调整规则顺序能使防火墙处理延迟显著降低。

状态表调优

Linux的conntrack模块负责跟踪连接状态,但默认最大连接数可能不够,如果遇到“nf_conntrack: table full”的错误,说明状态表满了,可以调大它:

echo 262144 > /proc/sys/net/netfilter/nf_conntrack_max

同时缩短超时时间,快速回收无用的连接:

echo 600 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established

使用ipset加速地址匹配

如果你需要匹配大量的IP地址(比如黑名单),用iptables逐条添加会拖慢性能,这时可以用ipset创建一个集合,然后一条iptables规则引用这个集合,内核会通过哈希表快速查找,效率比线性匹配高得多。

ipset create blacklist hash:ip
ipset add blacklist 10.10.10.10
iptables -A INPUT -m set --match-set blacklist src -j DROP

这与PF的table机制异曲同工,能处理数万条IP而不拖慢速度。

linux pf是什么意思,linux包过滤怎么设置?

硬件加速

如果你的网卡支持,可以开启TSO、GSO等硬件卸载功能,让网卡分担一部分数据包处理,降低CPU占用,用ethtool -k eth0查看特性,用ethtool -K eth0 tso on开启。

Linux PF防火墙常见问题排查

防火墙出问题,第一步就是看日志,在Linux上,iptables日志默认写进/var/log/kern.log,你可以用tail -f /var/log/kern.log实时监控,如果日志没输出,检查一下是不是忘了加-j LOG规则。

规则不生效排查

  • 确认规则已添加:iptables -L -n
  • 确认网络接口名正确:ip link show
  • 检查是否被其他规则提前匹配:用iptables -I插入到最前面测试
  • 看内核是否加载了必要的模块:lsmod | grep nf_conntrack

日志与监控

对于PF式的日志,你可以在iptables里用-j LOG --log-prefix "PF-DROP: "来标记,然后用grep过滤,更高级的,可以用ulogd把日志导到数据库里分析。

Q&A

linux pf和iptables究竟哪个好?

这要看你的使用场景,如果你是Linux单机或小型服务器,iptables足够用,而且社区资源丰富,如果你管理着多台BSD服务器,或者追求极致的规则可读性,PF会更顺手,就性能而言,两者在规则数少于100条时差别不大;规则上千时,PF的优化规则集更有优势,但最终,工具的选择取决于你的技术栈和团队习惯。

linux pf防火墙怎么配置规则才能防DDoS?

防DDoS需要在规则上做速率限制,以PF为例,你可以用max-src-conn-rate限制单个IP的新建连接速率,在Linux上,用iptables的limit模块配合hashlimit,限制每个IP每分钟最多发起30个新连接:

iptables -A INPUT -p tcp --dport 80 -m hashlimit --hashlimit-name http --hashlimit-above 30/minute -j DROP

这种规则能有效缓解CC攻击,但面对大流量DDoS,还是需要专业清洗设备或云服务商的高防IP。

哪里可以下载到linux pf防火墙?

Linux本身没有PF防火墙的安装包,因为PF是OpenBSD的一部分,但你可以下载pfSense(基于FreeBSD)的ISO镜像,在虚拟机里运行,pfSense官方下载地址可在其官网获取,如果你需要直接在Linux上使用类似PF的语法,可以安装nftables,它已包含在大多数现代发行版的软件源中,直接用apt install nftables或yum install nftables即可。


无论你选择哪种方式,在Linux上实现PF式包过滤,核心都是理解你的网络结构和安全需求,规则写完后,记得用nmap或hping3从外部测试,别让防火墙成了摆设。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/linux-pf%e6%98%af%e4%bb%80%e4%b9%88%e6%84%8f%e6%80%9d%ef%bc%8clinux%e5%8c%85%e8%bf%87%e6%bb%a4%e6%80%8e%e4%b9%88%e8%ae%be%e7%bd%ae%ef%bc%9f/

赞 (0)
CDN加速架构是什么?,CDN加速架构如何搭建
上一篇 2026年7月18日 01:39
服务器主机怎么搭建网站,需要什么配置和步骤?
下一篇 2026年7月18日 01:43

相关推荐

  • 火影忍者到底有多少个服务器,哪个区最火爆?

    火影忍者服务器没有官方固定数量,不同版本的游戏、不同运营阶段、不同渠道的区服划分规则完全不同,目前主流讨论的是火影忍者手游的微信区、手Q区和渠道服体系,整体服务器总量在数百个量级,历史累计开服数早已破千,要从根源上搞清楚这个问题,先得看“火影忍者”四个字背后对应的产品形态,市面上叫“火影忍者”的游戏不止一款,最……

    相关资讯 2026年10月21日
    000
  • 42U服务器机柜实际功率是多少,一个机柜一般多少千瓦

    42U服务器机柜的功率没有统一数值,常见部署范围从3kW到15kW甚至更高,核心取决于服务器类型、上架数量、配电回路和机房散热能力,而不是机柜本身耗电,42U机柜的功率到底指什么42U是机柜内部可用高度单位,1U等于44.45毫米,42U约为1866.9毫米,但42U不代表能放42台服务器,因为交换机、配线架……

    2026年9月18日
    000
  • linux怎么安装rails?linux安装ruby on rails详细教程

    在Linux环境下安装Rails,推荐使用RVM或rbenv管理Ruby版本,并通过Gem安装Rails框架,这是目前业界公认最稳定且易于维护的开发环境配置方案,很多开发者在初次接触Linux服务器时,面对终端界面往往会感到无从下手,相比于Windows下的图形化安装,Linux环境下的Rails搭建更像是一场……

    2026年7月10日
    12600
  • 建立服务器究竟需要多少钱,服务器租用一年多少钱?

    建立服务器要多少钱,答案不是一个固定数字:租一台入门云服务器一年常见在几百到几千元,独立服务器租用一年常见几千到几万元,服务器托管一年常见几千到几万元,自建机房一次性投入常见几万到几十万元, 真正决定预算的,不是“服务器”三个字,而是带宽、电力、防护、备案和运维这几项组合,建立服务器要多少钱:先把成本拆开看服务……

    相关资讯 2026年11月4日
    000
  • 如何查看服务器root密码,服务器root密码忘了怎么找回

    服务器的root密码无法直接查看,因为系统以不可逆加密形式存储密码摘要,最可靠的做法是直接重置root密码,无论你是租用云服务器还是托管物理机,只要拥有控制台或物理访问权限,按本文的步骤操作,10分钟内即可重新掌控服务器,为什么root密码不能直接查看,只能重置很多人第一次接触Linux服务器时,都会产生“查看……

    2026年10月16日
    100
  • 百度服务器多少钱一台,最新报价是多少?

    百度服务器目前不对外零售,但通过百度智能云租用一台云服务器实例,入门级配置每月仅需几十元;若需自建服务器,物理机均价在数千元至上万元,还需考虑托管费用,为什么百度服务器没有“统一售价”百度数据中心使用的是自研硬件和定制化网络方案,这些设备不面向个人或中小企业出售,你看到的“百度服务器”报价,通常指百度智能云平台……

    2026年8月18日
    500
  • 北斗NTP校时服务器多少钱,性价比怎么样?

    北斗NTP校时服务器的价格并没有一个固定答案,一台标准配置的设备市场价通常在2800元到3.8万元之间,具体取决于授时精度、信号通道数和冗余备份级别,建议先根据自身业务场景圈定档位,再逐项比对硬件参数,避免为用不上的功能多付预算,先给价格定个刻度:三类档位对应不同预算综合近两年国内时统设备公开报价和采购行情,按……

    2026年10月10日
    100
  • 天租服务器一天大概多少钱,租用价格贵不贵?

    天租服务器多少钱?单台物理服务器按天租赁的市场行情在50元至500元之间,具体取决于CPU型号、内存容量、带宽大小和机房等级,核心配置(如高频CPU+64G内存+独享带宽)的日租价格通常在200元到400元区间,天租服务器价格构成与市场行情天租服务器并非简单把月租价格除以30,其定价逻辑包含资源单价、运维成本和……

    相关资讯 2026年11月4日
    000
  • 服务器域名需要多少钱,哪里购买最便宜?

    域名几十元到上百元一年,服务器则从每年几百元到数千元不等,具体取决于配置与带宽需求,按年付费的入门级云服务器加域名,总预算控制在千元以内完全可以实现,价格构成拆解:域名与服务器是两个独立账单很多初次搭建网站的用户容易把域名和服务器混为一谈,实际上它们是两项独立计费的互联网基础服务,域名相当于你在互联网上的门牌号……

    相关资讯 2026年11月4日
    000
  • 湖北广电的DNS服务器地址是多少,怎么设置?

    湖北广电的公共DNS服务器地址为119.96.126.114和119.96.138.242,宽带用户通常无需手动设置,由光猫自动下发;但遇到网页打不开、视频卡顿或游戏掉线时,手动填入这两个地址往往能解决大部分解析异常,下面从地址清单、具体配置、故障排查到替代方案,把湖北广电DNS这件事一次讲透,湖北广电DNS服……

    2026年9月26日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注