Linux防火墙的设置.docx
- 文档编号:12760439
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:14
- 大小:112.50KB
Linux防火墙的设置.docx
《Linux防火墙的设置.docx》由会员分享,可在线阅读,更多相关《Linux防火墙的设置.docx(14页珍藏版)》请在冰豆网上搜索。
Linux防火墙的设置
基于Linux的防火墙的配置
摘要:
介绍了防火墙的基本概念及其主要功能,分析了与Linux系统紧密集成的iptables防火墙的架构、构建工作原理、命令格式及其与内核的交互,最后给出了iptables构建防火墙的一个实例。
关键词:
防火墙;Linux;iptables
1引言
因特网的个人用户和集体用户正在快速增长,因特网在全世界范围内可共享的信息也越来越丰富,同时随之而来的是信息系统的安全性显得越来越重要。
特别是近来,黑客入侵和网络病毒大爆发时有发生,各国政府都在加强在网络安全技术方面的研究。
为了有效隔离来自Internet的外部入侵,防火墙(firewall)技术正在普及中。
除了信息加密技术外,防火墙是当前最重要的一种网络安全技术。
防火墙实际上是一种访问控制技术,主要作用是通过限制网络或某一特定区域的通信,阻止对信息资源的非法访问和防止保密信息从受保护网络上非法输出。
它是提供信息安全服务,实现网络和信息安全的基础设施。
1.1课程设计目的
在学习完计算机网络技术和Linux操作系统两门课程后,为了对所学的知识有一个全面的认识和系统的了解,通过此次课程设计的实际运用以便达到这些要求。
1.2Linux防火墙的简单介绍
netfilter/iptables是Linux系统提供的一个非常优秀的防火墙工具,它完全免费、功能强大、使用灵活、占用系统资源少,可以对经过的数据进行非常细致的控制。
本节首先介绍有关iptables防火墙的基本知识,包括netfilter框架、iptables防火墙结构与原理、iptables命令格式等内容。
2Linux防火墙的功能
目前市场上有许多商用防火墙软件出售,但它们大多价格高昂,使许多个人及小企业用户难以承受。
Linux的出现给了我们一个新的选择。
它提供了一套完全免费的解决方案,其内置防火墙功能非常强大,甚至超过了许多昂贵的商用软件。
1.1包过滤功能
根据数据包的包头中某些标志性的字段,对数据包进行过滤。
当数据包到达防火墙时,防火墙根据包头中的某些字段中的一些或全部进行判断,决定接受还是丢弃数据包。
包过滤可能发生在以下几个时刻:
接收到数据包时,发送数据包时以及转发数据包时。
Linux中过滤包的方法如下:
(1)将包头和过滤规则逐一进行匹配。
(2)第一条与包匹配的规则将决定以下采取的行动:
首先,此规则指定的策略将被应用到该包上。
应用在一个包的策略包括以下几种:
接受(Accept),即允许包通过该过滤器;抛弃(Reject),即丢掉该包并发一个“主机不可到达”的ICMP报文回发送者;拒绝(Deny),即丢掉该包且不发任何返回信息。
其次,修改此规则对应的包和字节计数器的值;再次,一些关于包的信息会有选择性地被写入日志中。
有的规则中可能含有参数来定义如何改写包头的服务类型(TOS)字段,用于确定不同包的优先级。
(3)如果没有与包相匹配的过滤规则,则将对该包采取缺省的过滤规则。
Linux的包过滤规则可包含如下一些信息:
●源地址和目的地址以及子网掩码,其中子网掩码中的0表示可以匹配任何地址;
●包的类型可以是TCP,UDP,ICMP或“any”;
●源和目的端口号,一条规则中可以指定10个以上的端口,也允许指定端口范围;
●ICMP报文类型;
●包中的ACK和SYN标志,这是为了防止在某个特定方向上建立新的链接;
●某块网卡的名字或IP地址,这样可以指定在特定的网卡上进出包;
●指定是否修改包头的TOS字段;
●用一个标志来确定包的一些基本信息是否要被写入日志中。
1.2代理服务功能
一个完整的防火墙解决方案不仅包括包过滤器,而且应该包括某种类型的应用层代理服务器。
所谓代理服务,是指在防火墙上运行某种软件(称为代理程序),如果内部网需要与外部网通信,首先要建立与防火墙上代理程序的连接,把请求发送到代理程序;代理程序接收该请求,建立与外部网相应主机的连接,然后把内部网的请求通过新连接发送到外部网相应主机。
反之亦然。
概括的说,就是内部网和外部网的主机之间不能建立直接的连接,而是要通过代理服务进行转发。
代理服务器具有用户级的身份验证,完备的日志记录和帐号管理等较包过滤器更加安全的功能。
然而,许多代理机制需要客户端修改软件或修改用户接口,使用户意识到正在使用代理服务器。
而Linux内核支持透明代理服务功能,透明代理用一种完全透明的方式,将一个经过本防火墙的连接重定向到本地代理服务器。
客户端(用户和软件)完全不知道他们的连接被一个代理进程处理,他们认为自已在直接和指定的服务器对话。
1.3包伪装功能
Linux核心提供了一个用于防火墙解决方案的附加功能:
IP包伪装。
IP包伪装是Linux中的一种网络功能,它只能用于TCP/UDP包,它能使没有Internet地址的主机通过有Internet地址的主机访问Internet。
如果一台Linux服务器用IP包伪装功能连接到Internet上,那私接上它的电脑即使没有获得正式指定的IP地址也可以接入Internet.这些电脑可以隐藏在Linux服务器后面存取Internet上的信息而不被发现,看起来就好象是服务器在使用Internet。
Linux服务器实现代理功能的方法如下:
当一个内部主机向外发包时,Linux服务器在转发此IP包之前,用自已IP地址替换此包的源IP地址,并临时产生一个本机端口号来替换此包的TCP/UDP头中的源端口号;同时,内核会记录下此替换。
当外部的返回包到来时(送往防火墙主机的临时端口),服务器能自动识别它,将此返回包的IP地址和端口号替换成内部主机的地址和端口号,发给内部主机。
分组过滤方式如下图2.1所示。
图2.1分组过滤示意图
通过这种IP包伪装方式,Linux方便地实现了“代理”功能。
从外部看来,所有包的收发都是针对此Linux主机的,所以具有很好的安全性。
3Linux防火墙的具体介绍
前面说过,netfilter/iptables是Linux系统提供的一个非常优秀的防火墙工具,它完全免费、功能强大、使用灵活、占用系统资源少,可以对经过的数据进行非常细致的控制。
本节首先介绍有关iptables防火墙的基本知识,包括netfilter框架、iptables防火墙结构与原理、iptables命令格式等内容。
下面就这些内容作一个比较具体的介绍。
3.1netfilter框架
Linux内核包含了一个强大的网络子系统,名为netfilter,它可以为iptables内核防火墙模块提供有状态或无状态的包过滤服务,如NAT、IP伪装等,也可以因高级路由或连接状态管理的需要而修改IP头信息。
netfilter位于Linux网络层和防火墙内核模块之间,如图3.1所示。
图3.1netfilter在内核中的位置
虽然防火墙模块构建在Linux内核,并且要对流经IP层的数据包进行处理,但它并没有改变IP协议栈的代码,而是通过netfilter模块将防火墙的功能引入IP层,从而实现防火墙代码和IP协议栈代码的完全分离。
netfilter模块的结构如图3.2所示。
图3.2netfilter结构框架图
对IPv4协议来说,netfilter在IP数据包处理流程的5个关键位置定义了5个钩子(hook)函数。
当数据包流经这些关键位置时,相应的钩子函数就被调用。
从图3.2中可以看到,数据包从左边进入IP协议栈,进行IP校验以后,数据包被第一个钩子函数PRE_ROUTING处理,然后就进入路由模块,由其决定该数据包是转发出去还是送给本机。
若该数据包是送给本机的,则要经过钩子函数LOCAL_IN处理后传递给本机的上层协议;若该数据包应该被转发,则它将被钩子函数FORWARD处理,然后还要经钩子函数POST_ROUTING处理后才能传输到网络。
本机进程产生的数据包要先经过钩子函数LOCAL_OUT处理后,再进行路由选择处理,然后经过钩子函数POST_ROUTING处理后再发送到网络。
3.2iptables防火墙内核模块
netfilter框架为内核模块参与IP层数据包处理提供了很大的方便,内核的防火墙模块正是通过把自己的函数注册到netfilter的钩子函数这种方式介入了对数据包的处理。
这些函数的功能非常强大,按照功能来分的话主要有4种,包括连接跟踪、数据包过滤、网络地址转换(NAT)和对数据包进行修改。
其中,NAT还分为SNAT和DNAT,分别表示源网络地址转换和目的网络地址转换,内核防火墙模块函数的具体分布情况如图3.3所示。
由图3.3可以看出,防火墙模块在netfilter的LOCAL_IN、FORWARD和LOCAL_OUT3个位置分别注册了数据包过滤函数,数据包经过这些位置时,防火墙模块要对数据包进行过滤。
这三个位置也称为三条链,名称分别为INPUT、FORWARD和OUTPUT,它们共同组成了一张过滤表,每条链可以包含各种规则,每一条规则都包含0个或多个匹配以及一个动作。
当数据包满足所有的匹配时,则过滤函数将执行设定的动作,以便对数据包进行过滤的。
图3.3ptables防火墙内核模块结构框架图
从图3.3中可以看出,除了过滤表以外,在PRE_ROUTING、LOCAL_OUT和POST_ROUTING3个位置各有一条有关NAT的链,名称分别为PREROUTING、OUTPUT和POSTROUTING,它们组成了NAT表。
NAT链里面也可以包含各种规则,它指出了如何对数据包的地址进行转换。
此外,5个钩子函数位置的mangle链还组成了一张mangle表,这个表的主要功能是根据规则修改数据包的一些标志位,例如TTL、TOS等,也可以在内核空间为数据包设置一些标志。
防火墙内的其他规则或程序(如tc等)可以利用这种标志对数据包进行过滤或高级路由。
以上介绍的是iptables防火墙的内部结构,Linux系统还提供了iptables防火墙的用户接口,它可以在上述各张表所包含的链中添加规则,或者修改、删除规则,从而可以根据需要构建自己的防火墙。
具体来说,用户是通过输入iptables命令来实现上述功能的。
3.3iptables命令格式
在RHEL中,iptables命令由iptables软件包提供,默认时,系统已经安装了该软件包,因此,用户可以直接输入iptables命令对防火墙中的规则进行管理。
iptables命令相当复杂,具体格式如下所示。
iptables[-t表名]<命令>[链名][规则号][规则][-j目标]
-t选项用于指定所使用的表,-j选项用于指定所使用的目标,iptables防火墙默认有filter、nat和mangle3张表,也可以是用户自定义的表。
表中包含了分布在各个位置的链,iptables命令所管理的规则就是存在于各种链中的。
该选项不是必需的,如果未指定一个具体的表,则默认使用的是filter表。
命令选项是必须要有的,它告诉iptables要做什么事情,是添加规则、修改规则还是删除规则。
有些命令选项后面要指定具体的链名称,而有些可以省略,此时,是对所有的链进行操作。
还有一些命令要指定规则号。
4Netfilter/Iptables的原理
Linux在其2.4内核中内置了一个基于网络层解决方案的防火墙系统—Netfilter/Iptables,它使得用户能够很方便地在网络边界定制对数据包的各种控制,如有状态或无状态的包过滤、各种类型的网络地址转换、流量控制及高级的包处理等。
Netfilter/Iptables系统采用模块化的架构方式,其主要模块有:
通用框架Netfilter、数据包选择系统、连接跟踪系统及NAT系统等等。
4.1Netfilter/Iptables系统工作原理
Netfilter/Iptables系统所提供的数据包控制能力(包过滤、网络地址转换、包处理等)都是由内核模块通过注册回调函数和“IP表”来实现的。
例如,iptable_filte模块通过注册filter表及3个回调函数(NF_IP_LOCAL_IN;NF_IP_FORWARD;NF_IP_LOCAL_OUT)来实现IPv4包的过滤功能。
下面以iptable_filter模块的工作流程为例简单介绍一下Netfilter/Iptables系统是如何工作的。
当数据包进入系统时,系统首先根据路由表决定数据包的流向(即将数据包发往那个关键点),则可能有三种情况:
(1)如果数据包的目的地址是其它主机或网络,则系统将该包发往forward关键点。
此时,回调函数NF_IP_FORWARD根据FORWARD链(在filter表中)中的规则对数据包进行检查,如果规则匹配,则回调函数按规则所指定的动作来处理该包,否则丢弃该包。
(2)如果数据包的目的地址是本机,则系统将数据包发往input关键点。
此时,回调函数NF_IP_LOCAL_IN根据INPUT链(在filter表中)中的规则对数据包进行检查,如果规则匹配,则回调函数就按规则所指定的动作来处理该包,否则丢弃该包。
(3)如果该数据包的源地址是本机,则系统将该包发往output关键点。
此时,回调函数NF_IP_LOCAL_OUT根据OUTPUT链(在filter表中)中的规则对数据包进行检查,如果规则匹配,则回调函数按规则所指定的动作来处理该包,否则丢弃该包。
4.2Netfilter内核框架
Netfilter是Linux2.4.x内核中用于包处理的抽象、通用化的框架,它为每种网络协议(IPv4、IPv6等)定义一套钩子函数(hook),其中IPv4定义了5个钩子函数。
内核的模块可以对每种协议注册多个钩子,这样当某个数据包通过Netfilter框架时,Netfilter检测是否有任何模块对该协议和钩子函数进行了注册。
若有,则将该数据包传给这些模块处理.Netfilter提供了数据包过滤(filter表),网络地址转换(NAT表)及数据包处理(mangle表)三种数据包处理能力。
4.3内核与用户的交互
防火墙除了内核里的机制外,还需要在应用层有相应的配置工具iptables,它是从三个默认的表Filter、Nat、Mangle而得名,每个表有几条链。
一条链就是发生在包L的一系列动作,例如Filter表就有INPUT、FORWARD、OUTPUT三个不同的默认链。
如果包过滤需要检查IP包,则netfilter框架在网络层截获IP包,这就需要与用户定义的规则做比较。
而这些规则的添加修改是通过内核和用户交互实现的,这就涉及一个如何与内核通信的问题。
内核模块有三种办法与进程打交道:
首先是系统调用;第二种办法是通过设备文件;第三个办法便是使用proc文件系统。
netfilter采用了第一种修改系统调用的办法。
ipables在应用层调用setsockopt进入内核,然后调用netfilter.c又件中nbetsockopt()实现交互,这样通过配置防火墙就可以按需要处理网络数据包。
只有熟悉了iptables提供的众多命令、选项等,在明白其工作原理的前提下,用户才能利用它未放心地创建大量的规则记录和策略去控制内核数据包,才能正确有效地使用防火墙。
这样即使在图形界而下使用防火墙,通过点击你也明明白白内核里发生了什么。
5防火墙配置实例
5.1使用命令方式进行配置
RHEL默认安装时,已经在系统中安装了iptables软件包,可以用以下命令查看。
[root@localhost~]#rpm-qa|grepiptables
一般情况下,iptable开机时都已经默认运行,但与其他一些服务不同,iptables的功能是管理内核中的防火墙规则,不需要常驻内存的进程。
如果对防火墙的配置做了修改,并且想保存已经配置的iptables规则,可以使用以下命令。
#/etc/rc.d/init.d/iptablessave
此时,所有正在使用的防火墙规则将保存到/etc/sysconfig/iptables文件中,可以用以下命令查看该文件的内容。
#more/etc/sysconfig/iptables
可以看到,/etc/sysconfig/iptables文件中包含了一些iptables规则,这些规则的形式与iptables命令类似,但也有区别。
还有一种保存iptables规则的方法是使用iptables-save命令,格式如下:
#iptables-save>abc
此时,正在使用的防火墙规则将保存到abc文件中。
如果希望再次运行iptables,可以使用以下命令。
#/etc/rc.d/init.d/iptablesstart
上述命令实际上是清空防火墙所有规则后,再按/etc/sysconfig/iptables文件的内容重新设定防火墙规则。
还有一种复原防火墙规则的命令如下:
#iptables-restore 此时,由iptables-save命令保存在abc文件中的规则将重新载入到防火墙中。 如果使用以下命令,将停止iptables的运行。 #/etc/rc.d/init.d/iptablesstop 上述命令实际上是清空防火墙中的规则,与“iptables–F”命令类似。 此外,/etc/sysconfig目录的iptables-config文件是iptables防火墙的配置文件,去掉注释后的初始内容和解释如下: 配置1: IPTABLES_MODULES="ip_conntrack_netbios_nsip_conntrack_ftp" 功能: 当iptables启动时,载入ip_conntrack_netbios_ns和ip_conntrack_ftp两个iptables模块。 配置2: IPTABLES_MODULES_UNLOAD="yes" 功能: 当iptables重启或停止时,是否卸载所载入的模块,yes表示是。 配置3: IPTABLES_SAVE_ON_STOP="no" 功能: 当停止iptables时,是否把规则和链保存到/etc/sysconfig/iptables文件,no表示否。 配置4: IPTABLES_SAVE_ON_RESTART="no" 功能: 当重启iptables时,是否把规则和链保存到/etc/sysconfig/iptables文件,no表示否。 配置5: IPTABLES_SAVE_COUNTER="no" 功能: 当保存规则和链时,是否同时保存计数值,no表示否。 配置6: IPTABLES_STATUS_NUMERIC="yes" 功能: 输出iptables状态时,是否以数字形式输出IP地址和端口号,yes表示是。 配置7: IPTABLES_STATUS_VERBOSE="no" 功能: 输出iptables状态时,是否包含输入输出设备,no表示否。 配置8: IPTABLES_STATUS_LINENUMBERS="yes" 功能: 输出iptables状态时,是否同时输出每条规则的匹配数,yes表示是。 通过以上各步骤的配置,可以建立一个基于Linux操作系统的包过滤防火墙。 它具有配置简单、安全性高和抵御能力强等优点。 5.2使用图形界面方式进行配置 为了使初学者也能构建iptables主机防火墙,在RHEL中,还为用户提供了配置主机防火墙的图形界面。 在RHEL桌面环境下,选择“系统”|“管理”|“安全级别和防火墙”命令后,将出现图5.1所示的对话框。 在图5.1中,名为“信任的服务”的列表框中列出了常见的网络服务名称,前面打勾的服务所对应的网络端口是开放的,允许外界的用户访问。 如果用户需要开放更多的端口,可以在列出的服务名称前的框内单击鼠标,打上勾后再单击“应用”按钮即可。 此外,窗口中还提供了启用或禁用防水墙的选择菜单,如图5.1所示。 还有,如果在图5.1中单击了“其他端口”标签,将在下面出现如图5.1所示的一个列表框和“添加”、“删除”按钮,用于添加和删除“信任的服务”列表框中未列出的端口。 图5.1防火墙设置对话框 图5.2展开后的防火墙设置对话框 在图5.2中,如果单击“添加”按钮,将出现图5.3所示的对话框。 此时,可以输入需要开放的端口号,并选择TCP或UDP协议,然后单击“确定”按钮,将返回到图5.2所示的防火墙设置对话框,然后在“其他端口”列表框中将出现所添加的端口号和协议名称。 单击“删除”按钮可以删除列表框中选中的端口。 为了使添加或删除端口生效,需要单击图5.2中的“应用”按钮,此时将出现图5.4所示的对话框,要求用户确认该操作。 图5.3添加端口 图5.4确认修改防火墙设置 以上是通过图形界面管理主机防火墙规则,实际的结果和命令方式是一样的。 6结束语 安全总是相对和无止境的,防火墙有其固有的局限性。 人们必须时刻保持高度警惕去防止新的攻击,动态跟踪系统的安全状况,开发新的功能和采取新的策略。 本文通过分析netfilter构建防火墙的机制与技术,利用实例讲解了利用netfilter框架编程实现新功能,这种分析有利于研究人员去开发新的好的功能用防火墙去努力保障主体的安全。 7参考文献 [1]Thenetfilterframeworkinlinux2.4[EB/OL].http: //www.gnumonks.org/ [2]Linux2.4netfilterhackingHOWTO[EB/OL].http: /netfilter.kernelnotes.org/ [3]徐辉,潘爱民,阳振坤.Linux防火墙的原理与实现[J].计算机应用,2002. [4]Linux操作系统实用教程[M].北京: 清华大学出版社,2010. [5]黄允聪,严望佳,防火墙的选型、配置、安装和维护[M].北京: 清华大学出版社,1999.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 防火墙 设置