Netfilter介绍
Linux内核防火墙基于netfilter框架实现,通过在内核网络协议栈中嵌入钩子点(链),来允许内核模块在数据包处理的关键阶段对其进行检查、修改、拦截或转发
链
- NF_IP_PRE_ROUTING 数据包进入网络层后,路由决策前DNAT
- NF_IP_LOCAL_IN 数据包被路由到本地主机
- NF_IP_FORWARD 数据包要转发到其他主机
- NF_IP_LOCAL_OUT 本地主机生成的数据包SNAT
- NF_IP_POST_ROUTING 路由后,数据包即将离开本机SNAT
表
为了阻止复杂的过滤逻辑,netfilter定义了不同表:
- filter表:用于数据包过滤(允许/拒绝),包含了INPUT、FORWARD、OUTPUT链
- nat表:用于网络地址转换,包含PREROUTING、POSTROUTING、OUTPUT链
- mangle表:用于修改数据包的TOS服务类型、TTL等标记,支持更加精细的流量调整
- raw表:用于跳过内核连接跟踪机制,提高特定场景的性能
动作
规则对数据包的处理结果通过动作定义,常见动作包括:
- ACCEPT 允许数据包继续传输
- DROP 丢弃数据包,不进行回应
- REJECT 拒绝数据包并返回错误信息
- SNAT/DNAT 修改数据包源目IP地址
- RETRUN 结束当前链的处理,返回上一级链
只要能定义netfilter的行为,就能对流经内核的数据进行处理,所以不同的操作netfilter的工具就成为了不同linux软件防火墙的软件

软件防火墙种类介绍
iptables(最经典
iptables是linux上最常用的防火墙工具,基于表-链-规则的结构,主要包含filter过滤,nat地址转换、mangle数据包修改、raw连接跟踪等表
同时支持复杂的匹配条件,适应各种场景,但iptables语法较为复杂,规则较多时难以管理
对ipv6需要单独使用ip6tables,对arp需要单独使用arptables
ip6tables
专为ipv6设计的工具,功能和用法与ipv4类似
arptables
专门用于管理arp协议数据包,支持创建规则,允许、拒绝或修改流入、流出和转发的arp数据包
ebtables
用于在linux桥接设备上建立过滤规则,当你的linux主机充当网桥或交换机时。
ebtables工作在TCP/IP的第二层,因此可以查看和修改以太网帧头部的所有信息。主要用于虚拟网络隔离,早期容器网络的隔离,mac地址过滤,vlan过滤
nftables(新一代防火墙工具
是为替代iptables开发的新一代工具,同样基于netfilter框架
预发更简洁统一,支持ipv4 ipv6 arp等协议。支持批量规则管理、变量、集合等高级功能
firewalld(红帽发行版linux默认的防火墙管理工具
基于iptables/nftables,支持动态更新规则,使用zone的概念,可以根据网络环境快速切换
使用firewall-cmd命令行或图形工具firewall-config配置,并且可以切换iptables或nftables为底层
ufw(uncomplicated firewall——ubuntu/debian使用防火墙管理工具
也是基于iptables/nftables粉装的,提供更简单的命令接口,适合新手和简单场景
屏蔽了复杂的表链结构,通过简单的允许、拒绝端口、服务命令的配置,比如ufw allow 80/tcp
启用支持/禁用,默认velvet设置
底层依赖iptables,比较新的版本已经切换成了nftables