自己动手编写FreeBSD内核防火墙模块

1. 概述

ipfw是BSD系统中重要的防火墙和通信控制工具,防火墙和NAT都可以通过ipfw的相关指令来实现。

pf (包过滤Packet Filter) 是FreeBSD 系统上进行TCP/IP流量过滤和网络地址转换的软件系统。 PF 同样也能提供TCP/IP流量的整形和控制,并且提供带宽控制和数据包优先集控制。

本文不讲解pf和ipfw命令的用法,通过阅读FreeBSD内核协议栈源码,通过pf和ipfw探讨FreeBSD的防火墙实现原理

2. FreeBSD协议栈包过滤处理流程

 

熟悉Linux协议栈的朋友都知道,Linux的包过滤是通过Netfilter实现的,Netfilter5个关键节点巧妙的挂在了钩子,可以改变报文行为。

FreeBSD也有Netfilter的基本机制pfil,也有比Netfilter功能更强大的NetGraph,本文主要讲解pfilNetGraph后续会进行阐述。


FreeBSD协议栈IP报文收发包处理流程参考上图,一个数据包在几个内核变量的控制下,在协议栈的多个地方被防火墙检查。这些地方和变量如上图所示,记住包过滤的关键流程,对于理解和规划FreeBSD防火墙是很有帮助的。

在网卡注册设备时,会将ether_inputether_input函数挂在ifnet数据结构上,网卡中断会调用ether_input函数,接下来会分别被ether_demuxip_input处理,如果是需要转发的报文,会调用ip_tryforwardip_outputether_output_frame,最后调用ehter_output将报文发送至网卡。

input方向的报文,在ether_demuxip_input会调用pfipfw挂载的钩子函数,处理报文,处理的结果可以是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值