一、iptables的表,链结构
1.规则表
表的作用:容纳各种规则链
划分依据:按照功能划分
raw :主要用来决定是否对数据进行状态跟踪。其中包含:OUTPUT、PREROUTING。
mangle:对数据包进行标记。包含:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD。
nat:用来修改IP地址和端口号。包含:PREROUTING、POSTROUTING、OUTPUT。
filter:对数据包进行过滤。包含:INPUT、FORWARD、OUTPUT。
规则表的顺序:raw— mangle—nat—filter
2.规则链
规则的作用:对数据包进行过滤
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包不同时机
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
PREROUTING:在路由前处理数据包
POSTROUTING:在路由后处理数据包
规则链的顺序
(1)入站数据流向
首先PREROUTING进行处理(是否修改数据包地址)
其次进行路由选择(判断数据包去处)
最后目标地址是防火墙本机,有INPUT进行处理(是否允许转发)
(2)转发数据流向
首先被PREROUTING进行处理,由路由进行选择。
其次目标地址是外部地址,传递给FORWARD(允许拦截转发,丢弃)
最后交给POSTROUTING(是否修改数据包地址)
(3)出站数据流向
首先进行路由选择,确定路径
其次由OUTPUT处理
最后经POSTROUTING处理(是否修改数据包)
二、iptables防火墙规则
iptables [-t 表名] 管理选项 [链名] [匹配条件] [ -j 控制类型]
备注:
表名,链名:iptables的表和链,默认式使用filter。
管理选项:插入,增加,删除
匹配条件:要处理的数据包特征
控制类型:允许ACCEPT,拒绝REJECT,丢弃DROP
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -j REJECT
语法解读:在filter表中INPUT链中添加(-I)一个规则,即拒绝(REJECT)ICMP的数据包
常用选项:
- -A 增加
- -D 删除
- -I 插入
- -R 修改,替换
- -L 列出
- -F 清空
- -P 指定链的默认策略
- -n 以数字方式显示结果
- -v 详细信息
- -line numbers 显示列表顺序号
1.添加
[root@localhost ~]# iptables -A INPUT -p tcp -j ACCEPT (在INPUT末尾追加)
[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT (在第二行添加)
[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT (默认第一行添加)
2.删除
[root@localhost ~]# iptables -F INPUT (清空)
[root@localhost ~]# iptables -D INPUT 10 (删除第10条规则)
三、规则匹配条件
匹配条件设置包括三大类:通用匹配,隐含匹配,显示匹配
1.通用匹配
(1)匹配协议
在iptables中使用 “-p” 协议名的形式指定,检查网络数据包使用的协议
[root@localhost ~]# iptables -I INPUT -p tcp -j ACCEPT
(2)地址匹配
使用“-s”源地址或者 “-d”目标地址。
[root@localhost ~]# iptables -A FORWARD -s 192.168.10.102 -j ACCEPT
(接受192.168.10.102的转发)
[root@localhost ~]# iptables -A FORWARD -s 192.168.10.0/24 -j REJECT
(拒绝192.168.10.0网段的转发)
(3)网络接口匹配
使用“-i”(--in-interface)和“-o”(--out-interface)接口的形式
[root@localhost ~]# iptables -A INPUT -i ens-33 -s192.168.10.0/24 -j REJECT
[root@localhost ~]# iptables -A INPUT -i ens-33 -s192.168.10.0/24 -j DROP
2.隐含匹配
(1)端口匹配
使用 “--sport”源端口和 “--dsport目标端口”,对UDP和TCP检查
[root@localhost ~]# iptables -A FORWARD -s 192.168.10.0/24 -p udp --dport 53 -j REJECT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
(2)ICMP类型匹配
使用 “--icmp-type”检查数据包,用数字或字符串表示Echo-Request请求,代码为8;Echo-Repy回显代码为0;Destination-Unreachable目标不可达代码为3,
3.显示匹配
以-m模块名称调用
(1)多端口匹配
“-m multiport --sport”源端口和“-m multiport --dport”目标端口
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 25,80,110 -j ACCEPT
(开放25,80,110端口)
(2)IP地址匹配
“-m iprange --src-range IP范围”检查源地址,“-m iprange --drc-range IP 范围”目标地址
[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.10.100-192.168.10.105 -j DROP
(禁止转发192.168.10.100-192.168.10.105数据包)
(3)MAC地址匹配
“-m mac --mac-source MAC地址”
(4)状态匹配
“-m state --state 连接状态”检查数据包连接状态。
常见状态:
NEW(任何连接无关)
ESTABLISHED(已建立连接)
RELATED(已有连接的相关性)