Linux系统内核中的一个功能强大的框架Netfilter,为其他内核模块提供数据包过滤、网络地址转换(NAT)和负载均衡的功能。我们常用的iptables和firewalld服务都依赖于Netfilter来过滤数据包,不同之处在于iptables基于“过滤规则链”,firewalld基于区域。
三表五链
三表:
- filter:对数据包进行过滤
- nat:地址转换、端口转发
- mangle:对数据包进行修改
此外,还有raw表,一般用于不让iptables对数据包进行跟踪,以提高性能。优先级:raw>mangle>nat>filter
五链:
- PREROUTING:路由之前的数据包
- INPUT:输入数据包
- FORWARD:转发路由
- POSTROUTING:路由之后数据包
- OUTPUT:输出数据包
数据流程:
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 | 拒绝流入的数据包,除非与输出流量数据包相关。 |