iptables 不是防火墙,而是一个客户端,通过执行命令将防火墙的配置放置在真正的防火墙框架中,位于用户空间,netfilter 才是真正的防火墙安全框架,位于内核空间。我们可以通过 iptables 对进入主机和从主机的 ip 以及端口进行限制,还可以进行网络转发。下面图片来源于博客 iptables详解:iptables 概念
链
如上图所示,”链“ 表示的是数据流经过的一个一个的关卡,一共有五个链:PREROUTING, INPUT, FORWORD, OUTPUT, POSTROUTING
- 到本机某进程的报文:PREROUTING -> INPUT
- 从本机某进程出去的报文:OUTPUT -> POSTROUTING
- 由本机转发的报文:PREROUTING -> FORWARD -> POSTROUTING
表
“表” 表示的是每个关卡上设置的规则的分类,一共有四类
- filter 表:负责过滤功能,防火墙;内核模块:iptable_filter
- nat 表:网络地址转换功能;内核模块:iptable_nat
- mangle 表:对报文进行拆分和修改;内核模块:iptable_mangle
- raw 表:关闭 nat 表上启用的连接追踪机制:iptable_raw
表和链的关系
并不是所有的链上都同时存在上面四个表,同时每个表也不会存在所有的链上:
- PREROUTING:raw,mangle,nat
- INPUT: mangle, filter
- FORWARD: mangle, filter
- OUTPUT: filter, nat, mangle, raw
- POSTROUTING: mangle, nat
同一个链中,表的优先级 raw -> mangle -> nat -> filter
规则
- 规则表示一条链上某个表的一些匹配条件,比如拒绝某个 IP 访问
- 一个链上某个表可以设置多条规则
- 规则的顺序很重要,一旦有一个规则匹配成功了,后面的规则将会被忽略
- 如果所有规则没有匹配,那么会有一个默认规则
- 修改规则的逻辑最好是先删除某条规则,再加入新的规则
- iptables 所有的规则都保存在 /etc/sysconfig/iptables
- 设置了新的规则后,必须使用 service iptables save 进行保存或者使用iptable-save > /etc/sysconfig/iptables,否则重启后,新设置的规则将失效
- 一个规则中存在多个匹配条件时,这些条件默认规则是与的关系,比如端口,IP必须满足才算匹配
- 默认的匹配规则有:
- -s: 指定源地址,可以匹配多个 ip 地址,用逗号隔开,也可以指定一个 ip 段
- -d: 指定目标地址
- -p: 指定协议类型,可以是 tcp/udp/icmp/sctp/esp 等
- -i: 表示指定从哪个网卡流入的,只能用于 INPUT,PREROUTING,FORWARD 链
- -o: 表示指定从哪个网卡留