首页 > 其他 > 详细

iptables防火墙

时间:2017-02-23 23:11:05      阅读:262      评论:0      收藏:0      [点我收藏+]

企业通过架设各种应用程序提供各种网络访服务。有web网站,电子邮件系统,ftp服务器,数据库系统

        linux中的防火墙---netfilter和iptables

      linux防火墙基础

                主要工作在网络层,针对TCP/IP数据包实现过滤和限制,属于典型的包过滤防火墙,linux系统的防火墙基于内核编码实现,其具有稳定的性能和高效率。

            netilter:指的是linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态,又称为内核空间”的防火墙功能体系

            iptables:指的是用来管理linux防火墙的命令程序,通常位于/sbin/iptables目录下,属于“用户态,又称为用户空间”的防火墙功能体系

    iptables的表,链结构

            iptables的作用是为包过滤机制实现提供规则,通过各种不同的规则,告诉netfilter对来自某些源,前往某些目的或具有某些协议的数据包应该如何处理,为了更加方便地组织和管理防火墙规则,iptables采用了“表”和“链”的分层结构

            每个规则“表”相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表;每个表容器内包括不同的规则链。根据处理数据包的不同时机划分为五种链,而决定师傅过滤或处理数据包的各种规则,按先后顺序存放在各规则链中。

        规则表

            iptables管理这四个不同的规则表,其功能分别由独立的内核模块实现。

                    filter表:filter表用来对数据包进行过滤,根据具体的规则要求决定如何处理一个数据包,filter表对应的内核模块为iptable_filter,表内包含三个链,即INPUT,FORWARD,OUTPUT. 

                    nat表网络地址转换表主要用来修改数据包的ip地址,端口号信息,nat表对应的内核模块为iptable_nat,表内包含三个链,即PREROUTING,POSTROUTING,OUTPUT。

                    mangle表:mangle表用来修改数据包的TOS服务类型,TTL生存周期,或者为数据包设置Mark标记,实现流量整形,策略路由等应用。mangle表对应的内核模块为iptable_mangle,表内包含五个链,即PREROUTING,POSAROUATING,INPUT,OUTPUT,FORWARD。

                    raw表:是1.2.9版本以后新增的表,主要用来决定是否对数据包进行状态跟踪,raw表对应的内核模块为iptable_raw,表内包含两个链,即OUTPUT,PREROUTING。

        规则链

            iptables默认划分为五中不同的规则链,五种链的名称,各自的介入时机

                INPUT链:当收到访问防火墙本机地址的数据包入站时

                OUTPUT链:当防火墙本机向外发送数据包时

                FORWARD链:当接受到需要通过防火墙中转发送给其他地址的数据包时

                PREROUTING链:对数据包做路由选择之前

                POSTROUTING链:对数据包做路由选择之后

                INPUT,OUTPUT链主要用于主机型防火墙中,即主要针对服务器本机进行保护的防火墙,而FORWARD,PREROUTING,POSTROUTING链多用在网络型防火墙中

        数据包过滤的匹配流程

            规则表之间的顺序

                当数据包抵达防火墙是,将依次应用raw表,mangle表,nat表和filter表对应链内的规则,应用顺序raw>mangle>nat>filter

            规则链之间的顺序

                根据规则链的划分原则,不同链的处理时机是比较固定,因此规则链之间的顺序取决于数据包的流向

                    入站数据流向:外界的数据包到达防火后,首先被PREROUTING链处理,然后进行路由选择;如果数据包的目标地址是防火墙本机,那么内核将其传递给INPUT链进行处理,通过以后在交给系统上层的应用程序进行响应。

                    转发数据流向:来自外界数据包到达防火墙后,首先被PREROUTING链处理,然后再进行路由选择;如果数据包的目标地址是其他外部地址,则内核将其传递给FORWARD链进行出出力,最后交给POSTROUTING链进行处理

                    出站数据流向:防火墙本机向外部地址发送的数据包,首先被OUTPUT链处理,然后进行路由选择,再交给POSTROUTING链进行处理

              规则链内部各种防火墙规则之间的顺序

                    当数据包经过每条规则链是,依次按第一条规则,第二条规则。。。的顺序进行匹配和处理链内的过滤遵循“匹配即停止”的原则,一旦找到一条相匹配的规则,则不再检查本链内后续的其他规则。

编写防火墙规则

        基本语法,数据包控制类型

                使用iptable命令管理,编写防火墙规则是,基本格式

                    iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]

                其中表名,链名用来指定iptables命令所操作的表和链,未指定表名时将默认使用filter表;管理选项表示iptables规则的操作方式,如插入,增加,删除,查看;匹配条件用来指定要处理的数据包的特征。不符合指定条件的数据包将不会处理;控制类型指的是数据包的处理方式,如允许,拒绝,丢弃

            ACCEPT:允许数据包通过

            DROP:直接丢弃数据包,不给出任何回应信息

            REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息

            LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,防火墙规则的“匹配即停止”对于LOG操作来说是一个特例。

                在filter表(-t filter)的INPUT链中插入一条规则,拒绝(-j REJECT)发给本机的使用ICMP协议的数据包(-p icmp)

        添加,查看,删除规则等基本操作

                -A    指定链末尾添加一条新规则

                -D    删除指定链的某一天规则,可指定序号或内容

                -I    插入一条新规则,没指定序号时,默认作为第一条规则

                -R    修改,替换指定链中所有规则,未指定链名,则列出链名

                -L    列出指定链中的所有规则,若未指定链名,则列出表中所有链

                -F    清空指定链中的所有规则,若未指定链名,则清空表中的所有链

                -p    设置指定链的默认策略

                -n    使用数字形式显示输出结果,如显示ip地址而不是主机名

                -v    查看规则列表时显示详细的信息

                -h    查看命令帮助信息

                --line-numbers    查看规则列表是,同时显示规则在链中的顺序号

            规则的匹配条件

                    编写防火墙规则时,匹配条件的设置起着决定性的作用。匹配条件的设置包括三个大类:通用匹配,隐含匹配,显式匹配。

                通用匹配也称为常规匹配,这种匹配方式可以独立使用,不依赖于其他条件或扩展模块。常见的通用匹配包括协议匹配,地址匹配,网络借口匹配

                        协议匹配:-p 协议名 的形式指定,用来检查数据包所使用的网络协议。如tcp,udp,icmp和all。可用的协议类型存放于linux系统的/etc/procotols文件中。

                        地址匹配:-s 源地址或 -d 目标地址形指定,用来检查数据包的源地址或目标地址。ip地址,网段地址等都是可以接受的,不建议使用主机名,域名地址

                        网络借口匹配:-i 接口名和-o 接口名的形式,检查数据包从防火墙的哪一个借口进入和发出。

                隐含匹配要求可以指定的协议匹配作为前提条件,相当于子条件。常见的隐含匹配包括端口匹配,tcp标记匹配,ICMP类型匹配

                        端口匹配:使用--sport 源端口或--dport 目标端口的形式,针对的协议为tcp或udp,用来检查数据包的源端口或目标端口,单个端口好或者以冒号分隔的端口范围都可以,但 不连续的多个端口不能采用这种方式。

                        ICMP类型匹配:使用--ICMP-type  ICMP类型的形式,针对的协议为ICMP,用来检查ICMP数据包的类型,ICMP类型使用字符串或数字代码表示。关于可用的ICMP协议类型,可以执行iptables -p icmp -h命令

                        显式匹配:要求有额外的内核模块提供支持,必须手动以-m 模块名称形式调用相应的模块,然后方可设置匹配条件,添加了带显式匹配的规则以后,可以执行lsmod | grep xt_命令查看相关的内核扩展模块(xt_multiport,xt_iprange,xt_mac,xt_state)常见的显式匹配包括多端口匹配,ip范围匹配,MAC地址匹配,状态匹配

                         多端口匹配使用-m multiport --dports 端口列表,-m multiprot --sports端口列表的形式,用来检查数据包的源端口,目标端口,多个端口之间以逗号进行分隔

                         ip范围匹配

                            使用-m iprange --src-range ip范围,-m iprange --dst-range ip范围的形式,用来检查数据包的源地址,目标地址,其中ip范围采用起始地址-结束地址的形式表示。

                         MAC地址匹配

                            使用-m mac --mac-source MAC地址的形式,用来检查数据包的源MAC地址,由于MAC本身的局限性,此类匹配条件一般指适合用于内部网络

                         状态匹配

                            使用-m state --state 连接状态的形式,基于iptables的状态跟踪机制用来检查数据包的连接状态,常见的连接状态包括FEW(与任何连接无关的),ESTABLISHED(响应请求或者已建立连接的),RELATED(与已有连接有相关性)

本文出自 “11853028” 博客,请务必保留此出处http://tanhong.blog.51cto.com/11853028/1900573

iptables防火墙

原文:http://tanhong.blog.51cto.com/11853028/1900573

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!