本文简单描述了Linux下 iptables 的原理介绍 和 自己在使用过程中的小小总结。
欢迎转载,请注明作者、出处。
一、iptables基础:(封包过滤、封包重定向、NAT等功能)
->规则(rules)
->链(chains)
->表(tables)
->iptables传输数据包的过程
1.规则:
->规则一般的定义为:如果数据包头符合这样的条件,就这样处理这个数据包
->规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议和服务类型
->当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。
->配置防火墙的主要工作就是添加、修改、删除这些规则
2.链
->链是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。
->当数据包到达链时,会从链中的第一条规则开始检查。如果满足条件,就会根据该条规则所定义的方法处理该数据包,否则就继续检查下一条规则。如果数据包不符合链中任意一条规则,就会按照预先定义的默认策略来处理数据包。
3.表
a.filter表:包过滤(iptables的默认表)
包含:
->INPUT链(处理进入的数据包)
->FORWARD链(处理转发的数据包)
->OUTPUT链(处理本地生成的数据包)
filter表中,只允许对数据包进行接受、丢弃的操作,无法对数据包进行更改
b.nat表:网络地址转换
包含:
->PREROUTING链(修改即将到来的数据包)
->OUTPUT链(修改在路由之前本地生成的数据包)
->POSTROUTING链(修改即将出去的数据包)
c.mangle表:(对指定包进行修改,使用相对较少)
包含:
->PREROUTING链
->INPUT链
->FORWARD链
->OUTPUT链
->POSTROUTING链
二、数据包的传输过程:
__________________________________________________________
| |
| 进入的数据包 输出的数据包 |
| | ∧ |
| ∨ | |
| PREROUTING链 ------>FORWARD链条 ---> POSTROUTING链 |
| | ∧ |
| ∨ | |
| INPUT链 ------>内部处理过程 --> OUTPUT链条 |
|________________________________________________________|
1.当一个数据包进入网卡时,首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去
2.如果是进入本机的,数据包就会达到INPUT链,经过内部处理,然后经过OUTPUT链,最后到达POSTROUTING链输出
3.如果数据包是要转发出去的,且内核允许转发,数据包就会到达FORWARD链,然后到达POSTROUTING链输出
三、iptables命令格式
一般格式:iptables [ -t 表 ] -命令 匹配 [ -j 动作 ]
1.表选项
指定命令应用于哪个表:filter、nat、mangle
2.命令选项
-P(--policy) <链名> :定义默认策略
-L(--list) <链名> :查看iptables规则列表
-A(--append) <链名> :在规则列表的最后增加1条规则
-I(--insert) <链名> :在指定位置插入1条规则
-D(--delete) <链名> :从规则列表中删除1条规则
-R(--replace)<链名> :替换规则列表中的某条规则
-F(--flush) <链名> :删除表中所有规则
-Z(--zero) <链名> :将表中数据包计数器和流量计数器归零
3.匹配选项
-i <网络接口名> :指定数据包从哪个网络接口进入,如eth0、eth1等
-o <网络接口名> :指定数据包从哪个网络接口输出,如eth0、eth1等
-p <协议类型> :指定数据包匹配的协议,如TCP、UDP、ICMP等
-s <源地址或子网> :指定数据包匹配的源地址
--sport <源端口号> :执行数据包匹配的源端口号,可用"起始端口号:结束端口号"
-d <目标地址或子网> :指定数据包匹配的目标地址
--dport <目标端口号>:指定数据包匹配的目标端口号,可用"起始端口号:结束端口号"
4.动作选项
ACCEPT 接受数据包
DROP 丢弃数据包
REJECT 拒绝数据包
REDIRECT将数据包重新转到本机或另一台主机的某个端口
SNAT 源地址转换
DNAT 目标地址转换
MASQUERADE NAT技术
LOG 将符合规则的数据包的相关信息记录在日志中
四、iptables命令示范
1.filter表默认接收
iptables -P INPUT ACCEPT
(没有-t <表名> 则默认为filter表)
2.nat表默认丢弃
iptable -t nat -P OUTPUT DROP
3.查看规则
iptables [ -t 表名 ] -L [ 链名 ]
iptables -L
iptables -t nat
iptables -t mangle
4.禁止访问百度:
iptables -A INPUT -s www.baidu.com -j DROP
说明:
在访问百度网站的例子中
对于INPUT :www.baidu.com是(s)源地址,本机是(d)目的地址
对于OUTPUT:本机是(s)源地址,www.baidu.com是(d)目的地址
因此禁止访问百度网站的方法有两种:
iptables -A INPUT -s www.baidu.com -j DROP
iptables -A OUTPUT -d www.baidu.com -j DROP
修改防火墙的文件:/etc/sysconfig/iptables
================================================================
防火墙设置-案例