前言
最近工作上有参于一个网络SDK的开发与测试,测试过程中需要拦截某些IP的TCP/UDP的网络请求,便使用到了pfctl命令,觉得它是个很方便、小巧却功能强大的工具,所以写此篇文档作为一个学习笔记,同时跟大家分享相关的内容
ptctl的说明
pfctl命令是PF防火墙的配置命令,PF防火墙( 全称:Packet Filter )是UNIX LIKE系统上进行TCP/ip流量过滤和网络地址转换的软件系统。PF同样也能提供TCP/IP流量的整形和控制,并且提供带宽控制和数据包优先集控制。PF最早是由Daniel Hartmeier开发的,现在的开发和维护由Daniel和openBSD小组的其他成员负责。
示例
主机环境如下截图所示
使用方式示例
1、编辑规则文件,添加相关的网络处理规则
# 需要管理员权限才能编辑 /etc/pf.conf,可以使自己习惯的编辑器,如vim等
sudo emacs /etc/pf.conf
# 在/etc/pf.conf 文件最后面添加如下规则(丢弃发给175.6.128.23的upd数据包),并保存
block drop proto udp from any to 175.6.128.23
2、导入并执行网络处理规则
sudo pfctl -ef /etc/pf.conf
# 成功执行后一般出现如下提示
TIPS: 可以使用man pfctl查看pfctl的所有功能
ptctl的常用示例
# pfctl -f /etc/pf.conf 载入 pf.conf 文件
# pfctl -nf /etc/pf.conf 解析文件,但不载入
# pfctl -Nf /etc/pf.conf 只载入文件中的NAT规则
# pfctl -Rf /etc/pf.conf 只载入文件中的过滤规则
# pfctl -sn 显示当前的NAT规则
# pfctl -sr 显示当前的过滤规则
# pfctl -ss 显示当前的状态表
# pfctl -si 显示过滤状态和计数
# pfctl -sa 显示任何可显示的
pf.conf文件的说明
pf.conf文件有7个部分:
宏:用户定义的变量,包括IP地址,接口名称等等。
表:一种用来保存IP地址列表的结构。
选项:控制PF如何工作的变量。
整形:重新处理数据包,进行正常化和碎片整理。
排队:提供带宽控制和数据包优先级控制。
转换:控制网络地址转换和数据包重定向。
过滤规则:在数据包通过接口时允许进行选择性的过滤和阻止。
除去宏和表,其他的段在配置文件中也应该按照这个顺序出现,尽管对于一些特定的应用并不是所有的段都是必须的。
空行会被忽略,以#开头的行被认为是注释。
TIPS: 可以使用man pf.conf 查看pf.conf的所有功能