扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
摘 要: 本文主要介绍在Linux内核中实现IP包过滤的基本流程,同时对IP伪装和网络地址转换(NAT)的实现作简要的介绍。
关键词: 包过滤 防火墙 网络地址转换(NAT) IP伪装
随着因特网的迅猛发展,信息安全、网络安全已经成为人们日益关注的焦点。越来越多的企业和机关已经开始利用防火墙技术来保障网络不受外部黑客的入侵。包过滤技术是防火墙技术的技术核心,更好的理解包过滤的机制有助于我们更深刻的理解和应用防火墙来保障网络信息的安全。
一、 Linux网络部分代码分析
Linux网络层采用统一的缓冲区结构skbuff,一个个单独的skbuff被组织成双向链表的形式。网卡接收到数据帧后,系统内核为接收到的数据帧分配一块内存,然后将数据整理成skbuff的结构.在网络协议处理的时候,数据均以skbuff的形式在各层之间传递、处理。
skbuff的强大功能在于它提供了众多指针,可以快速的定位协议头位置;它也同时保留了许多数据包信息(如使用的网络设备等),以便协议层根据需要灵活应用.
在IP协议层有三个关键函数:ip_rcv( )、ip_forward( )、ip_output( ),分别处理IP层的接收、转发和发送工作。防火墙的功能函数将在此三个函数中调用。
二、 包过滤
包过滤主要工作于IP层。Linux在应用层利用ipchains( )来实现对包过滤的实现。可以用该函数实现过滤规则的添加、删除、设置、更改,在对包过滤规则进行设置的同时,还可以指定对数据包进行IP伪装。在Linux 内核中有三条内置的规则链(input chain, forward chain, output chain),分别对应接收检测,转发检测和发送检测(内置链不可删除),每一条chain 包含一系列过滤规则及链的缺省策略.利用各规则链可以对输入、转发、和输出的数据包进行过滤。
其实现过程如下:
*在不同检测点进入相应过滤链。
*顺序检查每一条过滤规则,找出与之匹配的规则(ACCEPT, REJECT, DENY, MASQ,REDICT,RETURN).
*当遇到第一条匹配的规则时采取以下行动:
a. 将规则应用于此数据包;
b. 每条规则都包含有packet和byte数的计数器;
c. 如果设置记录功能,则记录。
*当没有规则匹配时,采用链的缺省策略。
具体流程结合代码来说:
三种内置规则链分别作用于对应的三个函数ip_rcv( )、ip_forward( )和ip_output( )。
1、ip_rcv()是IP层的接收函数,由它来处理网卡接收到的数据包,它首先检查:
a.长度是否正确;
b..版本号是否正确(是IPV4还是IPV6?);
c.校验和是否正确。
在确定这些信息无误后,则调用包过滤检测:
fwres = call_in_firewall(PF_INET, dev, iph, &rport, &skb);
call_in_firewall 会对输入的数据包进行规则检查,fwres返回的便是匹配出来的规则.如果对应的规则为不接受该数据包,则立即将此数据包丢弃:
|
如果规则允许接受则查找路由表,对输入的数据包进行路由:
|
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者