iptables只是管理包过滤规则的工具,可以添加或删除包过滤的规则,真正执行包过滤规则的是netfilter
netfilter是Linux核心中的一个通用架构,内部提供一些列的表,每个表由若干条链组成,每条链由一条或多条规则组成,也就是我们常说的四表五链
四表
filter表 负责包过滤
nat表 负责网络地址转换
mangle表 负责包的重构
raw表 负责数据跟踪处理
五链
INPUT链 负责进来的数据包的规则
OUTPUT链 负责外出的数据包的规则
FORWARD链 负责转发时的规则
PREROUTING链 负责路由前的规则,也就是数据包进来的时候处理
POSTROUTING链 负责路由后的规则,也就是数据包出来的时候再处理
iptables工作原理
当数据包进入系统时,系统首先会根据路由表决定将数据包发给哪一条链,常见的情况有3种
第1种,入站的数据包
从外界到达防火墙的数据包先被PREROUTING链处理,再经过INPUT链
如果匹配到规则,就发给相应的本地进程处理
如果没匹配到规则,就丢弃这个数据包
第2种,转发的数据包
从外界到达防火墙的数据包先走PREROUTING链,再走FORWARD链,最后再交给POSTROUTING链,匹配到规则就处理,匹配不到则丢弃
第3种,出站的数据包
防火墙本机向外部发送的数据包先走OUTPUT链,之后交给POSTROUTING链处理
防火墙配置
iptables -t 表名 -vnL -- 查看防火墙规则
-t 指定表名(默认filter表)
-v 详细信息
-n ip以数字形式展示
-L 列表形式
iptables -t 表名 -操作 链名 -对象 (协议 端口 源/目ip) -j 动作
操作:
-A 添加规则
-I 插入规则
-D 删除规则
对象:
-s 源ip
-d 目标ip
-sport 源端口
-dport 目标端口
动作:
ACCEPT 接受
REJECT 拒绝
DROP 丢弃
SNAT 源地址转换
DNAT 目标地址转换