iptables命令 是Linux上常用的防火墙软件,是netfilter项目的一部分
一、iptables工作流程
iptables 采用数据包过滤机制工作的,通过对请求的数据包头进行分析,并根据预先设定的规则进行匹配来决定如何处理数据包
1.如果匹配上规则,数据包就不再向下匹配规则了
2.如果没有匹配上规则,按照默认策略进行处理
二、iptables四表五链
五链
- INPUT 链:处理输入数据包
- OUTPUT链 :处理输出数据包
- FORWARD链 :处理转发数据包
- PREROUTING链 :用于目标地址转换(DNAT)
- POSTOUTING链 :用于源地址转换(SNAT)
四表
- raw :高级功能,如:网址过滤,基本不用,只能2个链 PREROUTING ,OUTPUT
- mangle :数据包修改(QOS),用于实现服务质量。5个链都可以
- nat :地址转换,用于网关路由器。只能3个链PREROUTING ,OUTPUT ,POSTROUTING
- filter :包过滤,用于防火墙规则, 只能3个链 INPUT ,FORWARD ,OUTPUT
表优先级 raw > mangle > nat > filter
三、iptables选项参数
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
-
选项参数
-A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则
-I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。
-D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。
-R num:Replays替换/修改第几条规则
-t, --table , table 必须是 raw, nat,filter,mangle 中的一个。不指定此选项,默认的是 filter 表。
-p:指定要匹配的数据包协议类型,有tcp,udp和icmp
-s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。
-d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。
-i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。
-o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。
--dport num 匹配目标端口号
--sport num 匹配来源端口号
-L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。
-j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如ACCEPT
,DROP
,REDIRECT(重定向、映射、透明代理)
,SNAT源地址转换
,DNAT目标地址转换
,MASQUERADE IP伪装(NAT),用于ADSL
,LOG日志记录
,也可以是用户自定义的链
。 -
链管理命令
-P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。
-F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
-N, --new-chain chain 用指定的名字创建一个新的链。
-X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部造成任何影响。
-Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。
-h:显示帮助信息;
规则查看
iptables -nvL #列出filter表上面所有规则
iptables -nvL -t nat --line-numbers # 列出nat表的所有规则 且带编号
iptables -nvL INPUT #列出filter表中INPUT链的规则
规则添加
#在filter表中INPUT链头部(第一行)插入规则
iptables -I INPUT -p tcp --dport 80 -s 172.16.0.0/24 -j ACCEPT;
#在filter表中INPUT链头第二行插入规则
iptables -I INPUT 2 -p tcp --dport 80 -s 172.16.0.0/24 -j ACCEPT;
#在filter表中INPUT链尾加规则
iptables -A INPUT -p tcp --dport 80 -s 172.16.0.0/24 -j ACCEPT;
规则删除
#删除filter表IPUT链的第二条规则
iptables -D INPUT 2
#删除指定规则
iptables -D INPUT -p tcp --dport 80 -s 172.16.0.0/24 -j ACCEPT;
规则持久化
cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # 任何改动之前先备份,请保持这一优秀的习惯
iptables-save > /etc/sysconfig/iptables
cat /etc/sysconfig/iptables
iptables 服务不启动默认也是生效的
清理规则
iptables -F # 清空所有的防火墙规则
iptables -F INPUT # 清空指定链 INPUT 上面的所有规则
iptables -X # 删除用户自定义的空链
iptables -X INPUT # 删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。# 如果没有指定链名,则会删除该表中所有非内置的链。
iptables -Z # 清空计数
四、自定义链
自定义链是为了将iptables规则进行分类管理
#新增自定义链
iptables -N TEST
#删除定义链
iptables -X TEST
网友评论