iptables是Linux上常用的防火墙软件,也有一些新的防火墙是基于iptables,让它的操作更加简单。
iptables没那么复杂,只是它的命令长度有点长,其实逻辑很清晰,可以做的事情很多。
iptables一共有四表五链:就是有: filter、nat、mangle、raw 这五张表。
但是,不是每个表都有5条规则链的: filter 有 INPUT FORWARD OUTPUT nat 有PREROUTING INPUT OUTPUT POSTROUTING mangle 有PREROUTING INPUT FORWARD OUTPUT POSTROUTING raw 有PREROUTING OUTPUT
4张表的优先级:raw最大,其次mangle,然后nat,最后是filter。
就拿有完整5条链的mangle表来说,如果收到的数据包目的地不是本机,那就不经过INPUT链,进入FORWARD链。
4张表的优先级为:
raw -> mangle -> nat -> filter
实际处理过程(数据包目的地为本机):
raw(PREROUTING) -> mangle(PREROUTING) -> nat(PREROUTING) -
|
----------本地监听程序 <- filter(INPUT) <- mangle(INPUT) <-|
|
|-> 程序发出数据包 -> raw(OUTPUT) -> mangle(OUTPUT) --------
|
| mangle(POSTROUTING) <- filter(OUTPUT) <- nat(OUTPUT) <-|
|
|-> nat(POSTROUTING)
实际处理过程(数据包目的地不是本机):
raw(PREROUTING) -> mangle(PREROUTING) -> nat(PREROUTING) -
|
---------------- <- filter(FORWARD) <- mangle(FORWARD) <-|
|
|-> mangle(POSTROUTING) -> nat(POSTROUTING)
对于防火墙的使用场景主要集中在filter的INPUT链,所以iptables的默认操作表就是filter表。mangle表可以用于策略路由,nat表可以用于NAT操作,raw表用来加速某些操作。
CentOS默认装了iptables,但是开机不会自己启动。某些系统模版安装了firewalld防火墙,两者可以共存,但是不能同时用。想实现一些高级操作iptables会简单一些。