Linux下防火墙工具的研究与实现
2014-07-24张炜刘国芳
张炜++刘国芳
摘要:利用Linux系统提供的Hook机制和LKM机制,将第三方防火墙,包含包过滤功能和NAT功能,无缝连接到Linux内核的TCP/IP协议栈上,并且具有较强的可伸缩性。
关键词:防火墙;包过滤;NAT;内核
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)15-3504-02
当前网络安全环境面临的形势比较严峻,为了保护内部网的安全,安装防火墙是通行的做法。Linux的稳定性和开源所带来的可信赖性使其成为国内一些中小安全企业乐于采用的平台。该文对在Linux下开发防火墙做一些探索和研究。
1 系统构成
本系统主要由下面几个模块构成:检查过滤模块、NAT模块、透明代理模块、规则维护模块、管理工具。检查过滤模块是本系统的核心,该模块依据规则表中的匹配规则检查出入防火墙的IP分组,并采取的相应对策(丢弃或允许通过),以实现访问控制这一主要功能。NAT模块依据规则表中的地址端口映射关系,对出入防火墙的IP分组修改其IP地址和端口,实现地址转换的功能。透明代理模块可对IP分组进行重定向,将该功能与应用代理搭配使用,可实现可选的透明代理功能。规则维护模块实现对过滤规则、NAT规则和重定向规则的维护功能,如添加、删除、列表等,本模块维护着一个优化的规则表,该优化的规则表和相应的算法使本系统的规则匹配效率较高,因而使整个系统的效率提高。这四个模块被编译链接成一个内核模块,工作在Linux的内核模式下,成为Linux内核的延伸。管理工具以命令行方式或窗口界面方式提供管理员对防火墙内核模块进行管理的功能,用户可以通过它打开或者关闭过滤功能、NAT功能、重定向功能,可增加、删除或修改过滤规则、NAT规则和重定向规则等。管理工具工作时是独立的进程,通过与内核通信来实现对防火墙内核模块和规则的管理。基本构成如图1所示。
2 基本实现技术
要实现本系统需要对Linux内核中TCP/IP协议栈的IP层进行修改,难度和工作量大。通过仔细分析Linux源代码,对Linux的TCP/IP协议栈的实现、Hook机制和LKM(Loadable Kernel Module)机制进行了研究,采用了一种实现本系统功能的简单方法。该方法利用系统的Hook机制和LKM机制,只需编写一个具有过滤功能和NAT功能的源程序模块,独立编译成一个内核可装载模块,利用LKM机制动态集成到系统内核中,加载时执行初始化工作,利用Hook机制完成TCP/IP协议栈的IP层对该模块功能的调用,这样不需修改Linux的TCP/IP协议栈。
3 Hook机制及功能连接点
深入分析Linux内核中TCP/IP协议栈的网络层部分的源代码,该部分代码主要在ip_input.c、ip_forward.c、ip_output.c和firewall.c几个文件中,主要函数有ip_rcv、call_in_firewall、ip_route_input、ip_local_deliver、ip_fw_demasquerade、raw_rcv、ip_forward、call_fw_firewall、ip_fw_masquerade、call_out_firewall、ip_send、ip_build_and_send_pkt等。通过对上面几个IP层主要函数的功能及其相互间的关系的分析,可以总结出Linux内核处理IP分组的流程如图2所示。
Linux内核在处理IP分组的过程中,预留了5个调用点I、F、O、d和m,作为与第三方防火墙模块进行功能调用的连接点。这些连接点的作用是:I、F、O连接点分别对IP层接收、转发、发送的IP分组进
行检查过滤,m、d连接点分别用于对转发的IP分组进行NAT和反向NAT。通过Linux源代码分析,发现只有I 、F、O连接点可实现动态连接(通过系统调用register_firewall来完成),具有较强的灵活性。而m、d连接点没有此机制,开发者只能通过将具有NAT功能的源代码模块与Linux内核静态连接在一起的的方式完成功能调用。如此需要重新编译内核,将NAT功能模块直接编译进内核中,而不是像检查过滤功能那样是可动态装载的,这与NAT功能的可选功能模块的定位不符。于是采用一种变通的做法,将NAT功能改在本来是为检查过滤提供的连接点完成,即:I实现对接收IP分组的检查过滤;F实现对转发IP分组的检查过滤;O完成对发送IP分组的检查过滤;舍弃连接点d 、m;反向NAT安排在I完成;NAT安排在O完成;重定向也安排在I完成;等效的流程如图3所示。
4 规则表
本系统使用逻辑、文件和内核三个规则表,逻辑规则表是面向用户的,其他两个是面向计算机的,他们的“出”和“入”的概念有差异,对计算机而言“出”和“入”是针对网络接口的,而对用户而言是针对外部网和内部网的。系统特意引入逻辑规则表,它是规则表在用户大脑中的概念存在形式,是为了方便普通用户理解并配置规则,。文件规则表是将逻辑规则表转化为面向计算机的形式后,在磁盘文件上的物理存在形式,可长期保存用户定制
的规则,当系统重启后,可以从文件规则表中重新载入这些规则。内核规则表是规则表在内存中的存在形式,内核防火墙模块执行任务时直接依据的就是内核规则表,它与逻辑和文件规则表的关系如图4所示。
检查过滤规则、NAT规则和重定向规则共存于一个文件规则表中,用文件中的不同节来区分。而在内核中,检查过滤规则、NAT规则和重定向规则是分别组织成独立的数据结构的,并且为了提高效率,使用了带hash索引的多级链表结构。过滤规则要使用源IP地址、目的IP地址、传输层协议(TCP、UDP等)、源端口、目的端口,有时要涉及到TCP的一些标志如ACK位等。
5 其他考虑
内核防火墙模块作为内核可装载模块动态加载,不需要重新编译Linux内核。该模块装载时执行初始化,可以只注册基本的检查过滤模块,即只将检查过滤模块挂在连接点上工作,而NAT模块和重定向模块可以在管理工具的控制下,在需要的时候才注册。甚至可以将NAT模块和重定向模块单独编译成独立的内核可装载模块,在需要时才动态加载并注册。
6 总结
利用Linux的Hook机制和LKM机制,通过一个具有包过滤功能和NAT功能的内核可装载模块来实现本系统的功能,而不用对Linux的TCP/IP协议栈本身进行修改,具有较强的可伸缩性和灵活性。
参考文献:
[1] 金鑫.基于linux包过滤的防火墙的设计和实现[J].电脑知识与技术,2012(2).
[2] 张炜.基于Linux的防火墙工具箱的设计和实现[D].成都:四川大学,2001.endprint
摘要:利用Linux系统提供的Hook机制和LKM机制,将第三方防火墙,包含包过滤功能和NAT功能,无缝连接到Linux内核的TCP/IP协议栈上,并且具有较强的可伸缩性。
关键词:防火墙;包过滤;NAT;内核
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)15-3504-02
当前网络安全环境面临的形势比较严峻,为了保护内部网的安全,安装防火墙是通行的做法。Linux的稳定性和开源所带来的可信赖性使其成为国内一些中小安全企业乐于采用的平台。该文对在Linux下开发防火墙做一些探索和研究。
1 系统构成
本系统主要由下面几个模块构成:检查过滤模块、NAT模块、透明代理模块、规则维护模块、管理工具。检查过滤模块是本系统的核心,该模块依据规则表中的匹配规则检查出入防火墙的IP分组,并采取的相应对策(丢弃或允许通过),以实现访问控制这一主要功能。NAT模块依据规则表中的地址端口映射关系,对出入防火墙的IP分组修改其IP地址和端口,实现地址转换的功能。透明代理模块可对IP分组进行重定向,将该功能与应用代理搭配使用,可实现可选的透明代理功能。规则维护模块实现对过滤规则、NAT规则和重定向规则的维护功能,如添加、删除、列表等,本模块维护着一个优化的规则表,该优化的规则表和相应的算法使本系统的规则匹配效率较高,因而使整个系统的效率提高。这四个模块被编译链接成一个内核模块,工作在Linux的内核模式下,成为Linux内核的延伸。管理工具以命令行方式或窗口界面方式提供管理员对防火墙内核模块进行管理的功能,用户可以通过它打开或者关闭过滤功能、NAT功能、重定向功能,可增加、删除或修改过滤规则、NAT规则和重定向规则等。管理工具工作时是独立的进程,通过与内核通信来实现对防火墙内核模块和规则的管理。基本构成如图1所示。
2 基本实现技术
要实现本系统需要对Linux内核中TCP/IP协议栈的IP层进行修改,难度和工作量大。通过仔细分析Linux源代码,对Linux的TCP/IP协议栈的实现、Hook机制和LKM(Loadable Kernel Module)机制进行了研究,采用了一种实现本系统功能的简单方法。该方法利用系统的Hook机制和LKM机制,只需编写一个具有过滤功能和NAT功能的源程序模块,独立编译成一个内核可装载模块,利用LKM机制动态集成到系统内核中,加载时执行初始化工作,利用Hook机制完成TCP/IP协议栈的IP层对该模块功能的调用,这样不需修改Linux的TCP/IP协议栈。
3 Hook机制及功能连接点
深入分析Linux内核中TCP/IP协议栈的网络层部分的源代码,该部分代码主要在ip_input.c、ip_forward.c、ip_output.c和firewall.c几个文件中,主要函数有ip_rcv、call_in_firewall、ip_route_input、ip_local_deliver、ip_fw_demasquerade、raw_rcv、ip_forward、call_fw_firewall、ip_fw_masquerade、call_out_firewall、ip_send、ip_build_and_send_pkt等。通过对上面几个IP层主要函数的功能及其相互间的关系的分析,可以总结出Linux内核处理IP分组的流程如图2所示。
Linux内核在处理IP分组的过程中,预留了5个调用点I、F、O、d和m,作为与第三方防火墙模块进行功能调用的连接点。这些连接点的作用是:I、F、O连接点分别对IP层接收、转发、发送的IP分组进
行检查过滤,m、d连接点分别用于对转发的IP分组进行NAT和反向NAT。通过Linux源代码分析,发现只有I 、F、O连接点可实现动态连接(通过系统调用register_firewall来完成),具有较强的灵活性。而m、d连接点没有此机制,开发者只能通过将具有NAT功能的源代码模块与Linux内核静态连接在一起的的方式完成功能调用。如此需要重新编译内核,将NAT功能模块直接编译进内核中,而不是像检查过滤功能那样是可动态装载的,这与NAT功能的可选功能模块的定位不符。于是采用一种变通的做法,将NAT功能改在本来是为检查过滤提供的连接点完成,即:I实现对接收IP分组的检查过滤;F实现对转发IP分组的检查过滤;O完成对发送IP分组的检查过滤;舍弃连接点d 、m;反向NAT安排在I完成;NAT安排在O完成;重定向也安排在I完成;等效的流程如图3所示。
4 规则表
本系统使用逻辑、文件和内核三个规则表,逻辑规则表是面向用户的,其他两个是面向计算机的,他们的“出”和“入”的概念有差异,对计算机而言“出”和“入”是针对网络接口的,而对用户而言是针对外部网和内部网的。系统特意引入逻辑规则表,它是规则表在用户大脑中的概念存在形式,是为了方便普通用户理解并配置规则,。文件规则表是将逻辑规则表转化为面向计算机的形式后,在磁盘文件上的物理存在形式,可长期保存用户定制
的规则,当系统重启后,可以从文件规则表中重新载入这些规则。内核规则表是规则表在内存中的存在形式,内核防火墙模块执行任务时直接依据的就是内核规则表,它与逻辑和文件规则表的关系如图4所示。
检查过滤规则、NAT规则和重定向规则共存于一个文件规则表中,用文件中的不同节来区分。而在内核中,检查过滤规则、NAT规则和重定向规则是分别组织成独立的数据结构的,并且为了提高效率,使用了带hash索引的多级链表结构。过滤规则要使用源IP地址、目的IP地址、传输层协议(TCP、UDP等)、源端口、目的端口,有时要涉及到TCP的一些标志如ACK位等。
5 其他考虑
内核防火墙模块作为内核可装载模块动态加载,不需要重新编译Linux内核。该模块装载时执行初始化,可以只注册基本的检查过滤模块,即只将检查过滤模块挂在连接点上工作,而NAT模块和重定向模块可以在管理工具的控制下,在需要的时候才注册。甚至可以将NAT模块和重定向模块单独编译成独立的内核可装载模块,在需要时才动态加载并注册。
6 总结
利用Linux的Hook机制和LKM机制,通过一个具有包过滤功能和NAT功能的内核可装载模块来实现本系统的功能,而不用对Linux的TCP/IP协议栈本身进行修改,具有较强的可伸缩性和灵活性。
参考文献:
[1] 金鑫.基于linux包过滤的防火墙的设计和实现[J].电脑知识与技术,2012(2).
[2] 张炜.基于Linux的防火墙工具箱的设计和实现[D].成都:四川大学,2001.endprint
摘要:利用Linux系统提供的Hook机制和LKM机制,将第三方防火墙,包含包过滤功能和NAT功能,无缝连接到Linux内核的TCP/IP协议栈上,并且具有较强的可伸缩性。
关键词:防火墙;包过滤;NAT;内核
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)15-3504-02
当前网络安全环境面临的形势比较严峻,为了保护内部网的安全,安装防火墙是通行的做法。Linux的稳定性和开源所带来的可信赖性使其成为国内一些中小安全企业乐于采用的平台。该文对在Linux下开发防火墙做一些探索和研究。
1 系统构成
本系统主要由下面几个模块构成:检查过滤模块、NAT模块、透明代理模块、规则维护模块、管理工具。检查过滤模块是本系统的核心,该模块依据规则表中的匹配规则检查出入防火墙的IP分组,并采取的相应对策(丢弃或允许通过),以实现访问控制这一主要功能。NAT模块依据规则表中的地址端口映射关系,对出入防火墙的IP分组修改其IP地址和端口,实现地址转换的功能。透明代理模块可对IP分组进行重定向,将该功能与应用代理搭配使用,可实现可选的透明代理功能。规则维护模块实现对过滤规则、NAT规则和重定向规则的维护功能,如添加、删除、列表等,本模块维护着一个优化的规则表,该优化的规则表和相应的算法使本系统的规则匹配效率较高,因而使整个系统的效率提高。这四个模块被编译链接成一个内核模块,工作在Linux的内核模式下,成为Linux内核的延伸。管理工具以命令行方式或窗口界面方式提供管理员对防火墙内核模块进行管理的功能,用户可以通过它打开或者关闭过滤功能、NAT功能、重定向功能,可增加、删除或修改过滤规则、NAT规则和重定向规则等。管理工具工作时是独立的进程,通过与内核通信来实现对防火墙内核模块和规则的管理。基本构成如图1所示。
2 基本实现技术
要实现本系统需要对Linux内核中TCP/IP协议栈的IP层进行修改,难度和工作量大。通过仔细分析Linux源代码,对Linux的TCP/IP协议栈的实现、Hook机制和LKM(Loadable Kernel Module)机制进行了研究,采用了一种实现本系统功能的简单方法。该方法利用系统的Hook机制和LKM机制,只需编写一个具有过滤功能和NAT功能的源程序模块,独立编译成一个内核可装载模块,利用LKM机制动态集成到系统内核中,加载时执行初始化工作,利用Hook机制完成TCP/IP协议栈的IP层对该模块功能的调用,这样不需修改Linux的TCP/IP协议栈。
3 Hook机制及功能连接点
深入分析Linux内核中TCP/IP协议栈的网络层部分的源代码,该部分代码主要在ip_input.c、ip_forward.c、ip_output.c和firewall.c几个文件中,主要函数有ip_rcv、call_in_firewall、ip_route_input、ip_local_deliver、ip_fw_demasquerade、raw_rcv、ip_forward、call_fw_firewall、ip_fw_masquerade、call_out_firewall、ip_send、ip_build_and_send_pkt等。通过对上面几个IP层主要函数的功能及其相互间的关系的分析,可以总结出Linux内核处理IP分组的流程如图2所示。
Linux内核在处理IP分组的过程中,预留了5个调用点I、F、O、d和m,作为与第三方防火墙模块进行功能调用的连接点。这些连接点的作用是:I、F、O连接点分别对IP层接收、转发、发送的IP分组进
行检查过滤,m、d连接点分别用于对转发的IP分组进行NAT和反向NAT。通过Linux源代码分析,发现只有I 、F、O连接点可实现动态连接(通过系统调用register_firewall来完成),具有较强的灵活性。而m、d连接点没有此机制,开发者只能通过将具有NAT功能的源代码模块与Linux内核静态连接在一起的的方式完成功能调用。如此需要重新编译内核,将NAT功能模块直接编译进内核中,而不是像检查过滤功能那样是可动态装载的,这与NAT功能的可选功能模块的定位不符。于是采用一种变通的做法,将NAT功能改在本来是为检查过滤提供的连接点完成,即:I实现对接收IP分组的检查过滤;F实现对转发IP分组的检查过滤;O完成对发送IP分组的检查过滤;舍弃连接点d 、m;反向NAT安排在I完成;NAT安排在O完成;重定向也安排在I完成;等效的流程如图3所示。
4 规则表
本系统使用逻辑、文件和内核三个规则表,逻辑规则表是面向用户的,其他两个是面向计算机的,他们的“出”和“入”的概念有差异,对计算机而言“出”和“入”是针对网络接口的,而对用户而言是针对外部网和内部网的。系统特意引入逻辑规则表,它是规则表在用户大脑中的概念存在形式,是为了方便普通用户理解并配置规则,。文件规则表是将逻辑规则表转化为面向计算机的形式后,在磁盘文件上的物理存在形式,可长期保存用户定制
的规则,当系统重启后,可以从文件规则表中重新载入这些规则。内核规则表是规则表在内存中的存在形式,内核防火墙模块执行任务时直接依据的就是内核规则表,它与逻辑和文件规则表的关系如图4所示。
检查过滤规则、NAT规则和重定向规则共存于一个文件规则表中,用文件中的不同节来区分。而在内核中,检查过滤规则、NAT规则和重定向规则是分别组织成独立的数据结构的,并且为了提高效率,使用了带hash索引的多级链表结构。过滤规则要使用源IP地址、目的IP地址、传输层协议(TCP、UDP等)、源端口、目的端口,有时要涉及到TCP的一些标志如ACK位等。
5 其他考虑
内核防火墙模块作为内核可装载模块动态加载,不需要重新编译Linux内核。该模块装载时执行初始化,可以只注册基本的检查过滤模块,即只将检查过滤模块挂在连接点上工作,而NAT模块和重定向模块可以在管理工具的控制下,在需要的时候才注册。甚至可以将NAT模块和重定向模块单独编译成独立的内核可装载模块,在需要时才动态加载并注册。
6 总结
利用Linux的Hook机制和LKM机制,通过一个具有包过滤功能和NAT功能的内核可装载模块来实现本系统的功能,而不用对Linux的TCP/IP协议栈本身进行修改,具有较强的可伸缩性和灵活性。
参考文献:
[1] 金鑫.基于linux包过滤的防火墙的设计和实现[J].电脑知识与技术,2012(2).
[2] 张炜.基于Linux的防火墙工具箱的设计和实现[D].成都:四川大学,2001.endprint