Linux系统内核中的一个功能强大的框架Netfilter,为其他内核模块提供数据包过滤、网络地址转换(NAT)和负载均衡的功能。我们常用的iptables和firewalld服务都依赖于Netfilter来过滤数据包,不同之处在于iptables基于“过滤规则链”,firewalld基于区域。

三表五链

三表:

  • filter:对数据包进行过滤
  • nat:地址转换、端口转发
  • mangle:对数据包进行修改

此外,还有raw表,一般用于不让iptables对数据包进行跟踪,以提高性能。优先级:raw>mangle>nat>filter

防火墙QOS模块 防火墙track机制_防火墙QOS模块

五链:

  • PREROUTING:路由之前的数据包
  • INPUT:输入数据包
  • FORWARD:转发路由
  • POSTROUTING:路由之后数据包
  • OUTPUT:输出数据包

防火墙QOS模块 防火墙track机制_linux_02

数据流程: 
1. 数据包进入raw表的PREROUTING链,如果不进行连接跟踪,在此处理。 
2. 进入mangle表的 PREROUTING链,在此可以修改数据包等。 
3. 进入nat表的PREROUTING链,可以在此做目的地址转换,但不要做过滤。 
4. 对数据包进行路由,判断交给本地主机还是转发给其它主机。 
若数据包转发给其他主机:
5. 进入mangle表的FORWARD链,可以对数据包进行修改。 
6. 进入filter表的FORWARD链,对转发的数据包进行过滤。
7. 进入mangle表的POSTROUTING链,可以对数据包进行修改。
8. 进入nat表的POSTROUTING链,进行源地址转换并发出。 
若数据包发给当前主机的: 
5. 进入 mangle 表的 INPUT链,可以对数据包进行修改。 
6. 进入 filter 表的 INPUT链,对流入的数据包进行过滤。 
7. 交给本地主机的应用程序进行处理。 
8. 对数据包进行路由
9. 进入raw表的OUTPUT链,不对本地的数据包连接跟踪处理。  
10. 进入mangle表的OUTPUT链,修改数据包。 
11. 进入nat表的OUTPUT链,可以对防火墙自己发出的数据做网络地址转换。 
12. 进入filter 表的OUTPUT链,可以对本地出去的数据包进行过滤。 
13. 进入mangle表的POSTROUTING链,修改数据包。 
14. 进入nat表的POSTROUTING链,进行源地址转换并发出。 

Firewalld

Firewalld与iptables的区别:

  • iptables基于规则链,firewalld基于zone区域的方式
  • firewalld提供了图形化方式
  • firewalld支持动态更新规则
  • iptables无守护进程,不能算作真正的服务,firewalld存在守护进程

区域

默认规则

trusted

允许所有的数据包。

home

拒绝流入的数据包,除非与输出流量数据包相关或是ssh,mdns,ipp-client,samba-client与dhcpv6-client服务则允许。

internal

等同于home区域

work

拒绝流入的数据包,除非与输出流量数据包相关或是ssh,ipp-client与dhcpv6-client服务则允许。

public

拒绝流入的数据包,除非与输出流量数据包相关或是ssh,dhcpv6-client服务则允许。

external

拒绝流入的数据包,除非与输出流量数据包相关或是ssh服务则允许。

dmz

拒绝流入的数据包,除非与输出流量数据包相关或是ssh服务则允许。

block

拒绝流入的数据包,除非与输出流量数据包相关。

drop

拒绝流入的数据包,除非与输出流量数据包相关。