转发规则图解:
PREROUTING(raw conntrack mangle nat(DNAT)) 注意这个nat是在路由决策之前
|
+---------------------------------------路由决策-------------------------------+
| |
INPUT(mangle filter) FORWARD(managle filter)
| |
本地进程 |
| |
路由决策 |
| |
OUTPUT(raw conntrack mangle nat(DNAT) filter) |
| |
+-------------------------------------------------------------------------------+
|
POSTROUTING(mangle nat(SNAT)) 注意这个nat是在路由决策之后
|
network
注意:
对于nat表,属于一个流的包只经过这个表一次,而不是每个包都一次次的被NAT,其余自动完成而不再经过NAT表。
所以不在这个表中做任何过滤。
iptables转发场景过程:
目的为本机
1.从网络进入网卡
2.在路由之前做PREROUTEING(raw、conntrack、mangle再nat(DNAT))
即:
raw
conntrack 表示连接跟踪模块,通过内核中连接跟踪表(即哈希表),记录网络连接的状态,是iptables状态过滤(-m state)和NAT的实现基础
mangle PREROUTING(这个链用来mangle数据包,比如改变TOS等)
nat PREROUTING(这个链主要用来做DNAT。不要在这个链做过滤操作。某些情况下包会溜出去。)
3.路由判断(判断是发往本地还是要转发的)
4.判断是本地(注意和被转发的包做对比)
5.做INPUT(mangle再filter)
即:
mangle INPUT(判断路由之后,被送往本地程序之前,mangle数据包)
fileter INPUT(所有以本地为目的的包都要经过这个链,不管它们从哪里来,对这些包的过滤条件都设在这)
6.到达本地程序
本机发往internet(本地为源)
1.本地程序发出数据
2.路由判断,使用源地址 外出接口 还有其他信息
3.之后OUTPUT(raw、conntrack、mangle、nat(DNAT)、filter)
即:
raw
conntrack 表示连接跟踪模块,通过内核中连接跟踪表(即哈希表),记录网络连接的状态,是iptables状态过滤(-m state)和NAT的实现基础
mangle OUTPUT(建议不要在这儿做过滤,可能有副作用)
nat OUTPUT(对主机发出的包做DNAT)
filter OUTPUT(对本地发出的包过滤)
4.之后做POSTROUTING(mangle、nat(SNAT))
即:
mangle POSTROUTING(在包DNAT之后,离开本地之前对包mangle)
nat POSTROUTING(做SNAT,不要在这里过滤,因为有副作用,而且有些包会溜过去,即便做了DROP策略)
5.离开网卡到因特网
被转发的包
1.网络进入网卡
2.做PREROUTING(mangle、nat(DNAT))
即:
mangle PREROUTING(mangle数据包,比如改变TOS)
nat PREROUTING(主要做DNAT,不要在这里做过滤操作,某些情况下包会溜过去,稍后会做SNAT)
3.路由判断 比如是发往本地还是要转发的
4.判断不是本地
5.做FORWARD(mangle、filter)
即:
mangle FORWARD(这是非常特殊的情况下才会用到。在这里,包被mangle,这次mangle在最初的路由判断之后,在最后一次更改包的目的之前)
filter FORWARD(只有需要转发的包才会走到这里,并且针对这些包的所有过滤在这进行,注意所有要转发的包都要经过这里,不管内网到外网还是外网到内网)
6.做POSTROUTING(mangle、nat(SNAT))
即:
mangle POSTROUTING(这个链也是针对一些特殊类型的包,是在更改所有目的地址的操作完成之后做的,这时包还在本地上)
nat POSTROUTING(这个链用来做SNAT的,包括Masquerade,不要在这个链做过滤,即使某些包不满足条件也会通过)
相关表作用:
mangle: 所有的链
filter: INPUT OUTPUT FORWARD
nat: PREROUTING OUTPUT POSTROUTING(SNAT、Masquerade)
mangle:
TOS 用来设置或改变数据包的服务类型域 常被用来设置网络上数据包被如何路由等策略
TTL 可以改变生存时间 可以欺骗ISP 如不给共享 可以设置这个值
MARK 给包设置特殊的标记
并没有真正改动数据包,只是在内核空间为包设置了一个标记
防火墙内的其他规则或程序可以使用这种标记对包进行过滤或高级路由
nat:
DNAT 改变目的地址 能使包重路由到某台主机
SNAT 改变包的源地址 可以隐藏本地网络或DMZ(隔离区) 可以将内网地址转化为外网地址
MARSQUERED 对每个匹配的包MASQUERADE都要查找可用的IP地址 而不是像SNAT用的IP是配置好的 这个好处是可以使用PPP PPPOE SLIP等拨号得到的地址 这些地址是由ISP的DHCP随机分配的
filter:
DROP
ACCEPT
LOG
REJECT