iptables详解
Iptabels是与Linux内核集成的包过滤防火墙系统,几乎所有的linux发行版本都会包含Iptables的功能。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则Iptables有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
netfilter/iptables过滤防火墙系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信 息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。
优点: netfilter/iptables的最大优点是它可以配置有状态的防火墙。有状态的防火墙能够指定并记住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的连接跟踪状态获得该信 息。在决定新的信息包过滤时,防火墙所使用的这些状态信息可以增加其效率和速度。这里有四种有效状态,名称分别为 ESTABLISHED 、 INVALID 、 NEW 和 RELATED 。状态 ESTABLISHED指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。 INVALID 状态指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。状态 NEW 意味着该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。最后, RELATED 表示该信息包正在启动新连接,以及它与已建立的连接相关联。
netfilter/iptables的另一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。您可以定制自己的规则来满足您的特定需求,从而只允许您想要的网络流量进入系统。
组成:iptables由五个表和五个链以及一些规则组成。
一:五个表table:filter、nat、mangle、raw、security和内置链。
1.Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:
INPUT链 – 处理来自外部的数据。 OUTPUT链 – 处理向外发送的数据。 FORWARD链 – 将数据转发到本机的其他网卡设备上。 2.NAT表有三种内建链: PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。 POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。 OUTPUT链 – 处理本机产生的数据包。 3. Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链: PREROUTING OUTPUT FORWARD INPUT POSTROUTING 4. Raw表用于处理异常,它具有2个内建链: PREROUTING chain OUTPUT chain5.用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现优先级由高到低的顺序为:security -->raw-->mangle-->nat-->filter 6. 链chain:内置链:每个内置链对应于一个钩子函数
自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有Hook钩子调用自定义链时,才生效二:iptables规则(rules):根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理
以下三要素: Rules包括一个条件和一个动作(target) 如果满足条件,就执行动作(target)中的规则或者特定值。 如果不满足条件,就判断下一条Rules。1:匹配条件
基本匹配:IP,端口,TCP的Flags(SYN,ACK等)
扩展匹配:通过复杂高级功能匹配2:处理动作:
内建处理动作:
ACCEPT – 允许防火墙接收数据包DROP – 防火墙丢弃包REJECT– 拒绝防火墙接收数据包SNAT,DNATMASQUERADE等等 自定义处理动作:自定义chain,利用分类管理复杂情形 一个filter表中的input规则如下图:
iptables的命令:iptables 【-t 选中的表】 链的控制 链 【-m 调用模块】 -j 处理动作 1:链控制命令-N:new, 自定义一条新的规则链-X:delete,删除自定义的空的规则链-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:ACCEPT:接受DROP:丢弃-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除
例如:
生成一条新的zk链
2:查看命令-L:list, 列出指定鏈上的所有规则,本选项须置后-n:numberic,以数字格式显示地址和端口号-v:verbose,详细信息-vv 更详细-x:exactly,显示计数器结果的精确值,而非单位转换后的易读值--line-numbers:显示规则的序号常用组合:-vnL-vvnxL --line-numbers-S selected,以iptables-save 命令格式显示链上规则例如:
3、规则管理:-A:append,追加-I:insert, 插入,要指明插入至的规则编号,默认为第一条-D:delete,删除(1) 指明规则序号(2) 指明规则本身-R:replace,替换指定链上的指定规则编号-F:flush,清空指定的规则链-Z:zero,置零iptables的每条规则都有两个计数器(1) 匹配到的报文的个数(2) 匹配到的所有报文的大小之和chain:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
例如:
在生成的zk链上添加了一个规则。4.匹配条件基本:通用的,PARAMETERS扩展:需加载模块,MATCH EXTENTIONS(通过-m 指定)
1.基本匹配条件-s 源IP地址或范围-d 目标IP地址或范围-p 指定协议,可使用数字如0(all)protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or“all“-i 报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链-o :报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链