参考链接:
http://www.zsythink.net/archives/1199
iptables 只是一个命令行工具,虽然有 service iptables start,但实际上 iptables 并没有一个守护进程,只是一个客户端代理,iptables 的实现实际是内核的 Netfilter 模块。
Netfilter 的功能有:
- 网络地址转换(NAT)
- 数据包内容修改
- 数据包过滤的防火墙功能
由于TCP/IP层的协议是内置在OS中的,所有的数据经过网卡之后,都会在内核空间处理之后才会传递给用户空间。Netfilter 就是内核空间处理包的一系列规则。
如下图总共有5条链:
prerouting、input、forward、postrouting、output
在不同场景中,数据包的流向为:
- 报文发向本机的某个进程:
prerouting-> input - 报文经过本机转发:
prerouting-> forward-> postrouting - 报文由本机的进程发出去
output-> postrouting
每一条链都有多个规则,每一个经过一条链的报文,需要把所有的规则都匹配一遍。
表是指相同功能的规则结合:总共有4张表:
filter: 负责过滤,防火墙。iptables_filter
nat: 网络地址转换。iptable_nat
mangle: 拆解报文,修改,重新封装。iptable_mangle
raw: 关闭nat表上企业的链接追踪机制,iptable_raw
同一个链上有不同的表,同一张表也可以出现在不同的链上。
处理动作:在 iptables中称为 target。有基本动作也有扩展动作。
ACCEPT:
DROP:
REJECT:
SNAT:
DNAT:
REDIRECT:
LOG: