标签:iptables
Netfilter组件运行在内核空间,集成在linux内核中,扩展各种网络服务的结构化底层框架。
在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户开放。
而我们常说iptables(Centos 6)和firewalld(Centos 7)只是配置Netfilter的前端工具。
iptables由四个表和五个链以及一些规则组成
四个表
表 (tables) | 链 (chains) |
filter | 这是默认表,过滤规则表,根据预定义的规则过滤符合条件的数据包 应用场景:主机防火墙 |
INPUT | 过滤所有目标是本机地址的数据包 |
FORWARD | 转发流经本机的数据包。起到转发的作用 |
OUTPUT | 处理所有源地址是本机地址的数据包,就是处理从主机发出的数据包 |
nat | 负责网络地址转换 应用场景:局域网共享上网 |
FREROUTING | 在数据包到达防火墙时,进行路由判断之前执行的规则, 作用是改变数据包的目的地址、目的端口等 |
OUTPUT | 与主机流出去的数据包有关,改变主机发出数据包的目的地址 |
POSTROUTING | 在数据包离开防火墙时进行路由判断之后执行的规则, 作用改变数据包的源地址,源端口等。 |
mangle | 这个表专门用于改变数据包的结构(一般改变数据包首部格式) 修改数据标记位规则表 |
INPUT | 进入到设备本身的包 |
FORWARD | 对路由后的数据包信息进行修改 |
FREROUTING | 在路由之前更改传入的包 |
OUTPUT | 本地创建的数据包在路由之前改变 |
POSTROUTING | 在数据包即将离开时更改数据包信息 |
raw | 关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度 |
PREROUTING | for packets arriving via any network interface |
OUTPUT | for packets generated by local processes |
五个内置链chain
Centos 6
表(tables) | 链(chains) |
INPUT | FORWARD | OUTPUT | PREROUTING | POSTROUTING |
filter | O | O | O | × | × |
nat | × | × | O | O | O |
mangle | O | O | O | O | O |
raw | × | × | O | O | × |
说明:O 表示有,× 表示无。 |
Centos 7
表(tables) | 链(chains) |
INPUT | FORWARD | OUTPUT | PREROUTING | POSTROUTING |
filter | O | O | O | × | × |
nat | O | × | O | O | O |
manale | O | O | O | O | O |
raw | × | × | O | O | × |
说明:O 表示有,× 表示无。 |
iptables工作流程
内核中数据包的传输过程
?当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转发出去
?如果数据包就是进入本机的,数据包就会沿着图向上移动,到达INPUT链。数据包到达INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达POSTROUTING链输出
?如果数据包是要转发出去的,且内核允许转发(net.ipv4.ip_forward=1),数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出
1、iptables主要工作在OSI七层的2.3.4层。
2、防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。所有顺序 很重要。
3、如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。
4、如果所有规则中没有匹配规则,则向下进行匹配,直到匹配默认规则。一般最后的默认规则是拒绝所有。
5、防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。
6、生产中根据具体情况启用服务。大并发的情况不能开iptables,影响性能,iptables是要消耗CPU的,大并发的情况下,使用硬件防火墙。
7、规则要添加在链chain上,才生效;添加在自定义上不会自动生效。只有Hook钩子调用自定义链时才生效。
iptables添加要点
iptables规则添加时考量点
? 要实现哪种功能:判断添加在哪张表上
? 报文流经的路径:判断添加在哪个链上
? 报文的流向:判断源和目的地址
? 匹配规则:根据业务需要
链上规则的次序,即为检查的次序,因此隐含一定的法则
?同类规则(访问同一应用),匹配范围小的放上面
?不同类规则(访问不同应用),匹配到报文频率较大的放上面
?将那些可由一条规则描述的多个规则合并为一个
?设置默认策略
在Centos7上,iptables和firewalld只能2选一
iptables工具
iptables v1.4.7 (Centos 6)
iptables v1.4.21 (Centos 7)
参数 | 参数说明 |
显示相关参数 |
-n | 以数字的方式显示地址或端口信息 |
-L | 列出一个链或所有链中的规则信息 |
-S | 以iptables-save 命令格式显示链上规则 |
--line-number | 显示规则的序号 |
-v 或 -vv | 显示详细信息 |
-x | 显示计数器结果的精确值,而非单位转换后的易读值 |
链管理相关参数 |
iptables -X | 删除自定义的空的规则链 |
iptables -Z | 链的计数器清零(数据包计数器与数据包字节计数器) |
iptables -N | 创建新的用户定义链 |
iptables -P | 设置默认策略;对filter表中的链而言,其默认策略有: ACCEPT:接受 DROP:丢弃 |
iptables -E | 重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除 |
规则管理常用参数(在前面加感叹号,表示是取反) |
-t 表名称 | 指定配置哪个表(4表),指定配置表名称。 |
-A 链名称 | 追加到指定链(链名称必须大写),默认将配置的规则插入到当前规则最后一条。 |
-I 链名称 | 插入相应规则策略,到指定链上,默认将配置的规则插入到第一条 (可以根据规则序号插入到指定位置) |
-D 链名称 | 删除指定的规则(可以根据以下方法删除 (1) 指明规则序号 (2) 指明规则本身) |
-R 链名称 规则编号 | 替换指定链上的指定规则编号 例:iptables -R INPUT 2 |
-C | 检查规则是否存在 |
-F | 清除所有规则,不会处理默认的规则 |
-Z | 置零计数器 iptables的每条规则都有两个计数器 (1) 匹配到的报文的个数 (2) 匹配到的所有报文的大小之和 |
[!] -p 协议名称 | 指定规则的协议名称,可以使用协议代表的数字表示 常见值为all ,tcp, udp, icmp, 参看:/etc/protocols |
-j 动作 | 匹配数据包后的动作 |
ACCEPT | 允许 |
DROP | 丢弃(没有响应)推荐使用 |
REJECT | 拒绝(回应请求者明确的拒绝) |
MASQUERADE | 伪装上网时使用 |
SNAT | 共享地址上网 |
DNAT | 目的地址改写 |
[!] -i | 报文流入的接口;只能应用于数据报文流入环节, 只应用于INPUT、FORWARD、PREROUTING链 |
[!] -o | 报文流出的接口;只能应用于数据报文流出的环节, 只应用于FORWARD、OUTPUT、POSTROUTING链 |
[!] -s | 指定源IP地址或源网段信息 address[/mask][,...] |
[!] -d | 指定目标IP地址或目标网段信息 address[/mask][,...] |
扩展参数 需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效 查看帮助 man iptables-extensions |
隐式扩展 在使用 -p 选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制, 不需要手动加载扩展模块 |
tcp协议的扩展选项 |
--dport | 匹配报文目标端口,可为端口范围 |
--sport | 匹配报文源端口,可为端口范围 |
显式扩展 必须使用-m选项指明要调用的扩展模块的扩展机制 要手动加载扩展模块 |
-m 模块 | 表示加载扩展功能的参数(可以加载扩展参数) |
multiport | 以离散方式定义多端口匹配, 最多指定15个端口 |
iprange | 指明连续的ip地址范围 (但一般不是整个网络) |
icmp | 使用icmp的扩展 |
mac | 指明源MAC地址 |
time | 根据将报文到达的时间与指定的时间范围 进行匹配 |
string | 对报文中的应用层数据做字符串模式匹配检测 |
connlimit | 根据每客户端IP做并发连接数数量匹配 可防止CC(Challenge Collapsar挑战黑洞)攻击 |
limit | 基于收发报文的速率做匹配 |
state | 根据”连接追踪机制“去检查连接的状态, 较耗资源 |
更多说明:
man 8 iptables iptables-extensions(8) (Centos 7才有)
iptables (一)
标签:iptables
原文地址:http://blog.51cto.com/191226139/2088108