文章目录防火墙管理1. Linux 防火墙管理1.1 防火墙是什么2. Netfilter 子系统Nftables 子系统3. 静态防火墙和动态防火墙4. Firewalld 防火墙5. Firewalld 区域 Zone6. Firewalld 规则匹配优先级7. Firewalld 配置方式两个基本概念8. firewall-cmd 核心命令与反馈8.1 zone 管理8.2 service 管理8.3 port 管理8.4 masquerade 管理8.5 forward-port 管理9. 命令速查表10. 易错点与复习自测易错点自测题自测题防火墙管理1. Linux 防火墙管理1.1 防火墙是什么防火墙工作在网络或主机边缘对进出网络或主机的数据包基于规则进行检查匹配规则后按规则定义行为处理。基本思路默认关闭所有通过型访问只开放允许访问的策略。希望外网访问的主机通常放在 DMZ隔离区网络中。按保护范围划分主机防火墙服务范围为当前一台主机。网络防火墙服务范围为防火墙一侧的局域网。按实现方式划分硬件防火墙专用硬件级别实现如华为、华三、天融信等。软件防火墙运行在通用硬件平台上的防火墙软件如iptables、firewalld。按网络协议划分网络层防火墙工作在 OSI 下四层又称包过滤防火墙。依据 ACL 检查源地址、目的地址、端口号、协议状态等。优点对用户透明、处理速度快、易于维护。缺点无法检查应用层数据如病毒等。应用层防火墙 / 代理服务器工作在 OSI 七层或承担 proxy 代理网关。优点提供应用层保护。缺点处理速度慢。2. Netfilter 子系统Netfilter 是 Linux 内核中强大的网络过滤子系统。对进入系统的每个数据包在到达用户空间组件或应用之前进行检查可通过编程方式修改、丢弃或路由数据包。Netfilter 工作在内核态用户使用以下命令配置防火墙规则iptables过滤 IPv4 协议数据包。ip6tables过滤 IPv6 协议数据包。arptables过滤 arp 协议数据包。ebtables过滤数据链路层数据包。命令反馈[rootcentos7 ~]# ls -1 /sbin/*tables-rwxr-xr-x1root root5987211月62016/sbin/arptables -rwxr-xr-x.1root root70164月112018/sbin/ebtables lrwxrwxrwx.1root root138月115:45 /sbin/ip6tables -xtables-multi lrwxrwxrwx.1root root138月115:45 /sbin/iptables -xtables-multiNftables 子系统Nftables 是 netfilter 的增强版保留了 netfilter 架构。优点更快的数据包处理更快的规则集更新使用单个nft用户空间实用程序管理所有协议3. 静态防火墙和动态防火墙类型特点例子静态防火墙修改规则时需要重新加载所有防火墙规则会导致网络连接丢失iptables动态防火墙只将变更部分保存并更新到运行中的 iptables不需要重新加载整个规则列表firewalld4. Firewalld 防火墙Firewalld 是 Red Hat 开发的防火墙软件默认后端为nftables。在 CentOS 7 中firewalld取代iptables成为默认防火墙软件。Firewalld 和 iptables 的关系firewalld提供了 daemon 和 service还有命令行和图形界面配置工具。它仅替代了iptables service部分。底层还是使用iptables作为防火墙规则管理入口。真正干活的是内核的netfilter。5. Firewalld 区域 ZoneFirewalld 将所有网络流量分为多个区域zone每个 zone 就是一套过滤规则集。常用 zonezone说明trusted允许所有传入流量public允许与 ssh 或 dhcpv6-client 预定义服务匹配的传入流量其余拒绝。新添加网络接口的默认区域external允许与 ssh 预定义服务匹配的传入流量其余拒绝。默认将通过此区域转发的 IPv4 传出流量进行地址伪装home允许与 ssh、mdns、samba-client 或 dhcpv6-client 预定义服务匹配的传入流量其余拒绝internal默认与 home 区域相同work允许与 ssh、dhcpv6-client 预定义服务匹配的传入流量其余拒绝dmz允许与 ssh 预定义服务匹配的传入流量其余拒绝block拒绝所有传入流量drop丢弃所有传入流量并且不产生包含 ICMP 的错误响应数据包与 zone 匹配规则该源地址被分配给特定区域则应用该区域规则。如果数据包未匹配源地址则分配给与传入网络接口关联的区域并应用该区域规则。如果以上都未匹配firewalld 将数据包分配给默认区域。注意事项firewalld默认指定public区域为默认区域。将lo回环接口映射至trusted区域。如果流量不与允许的端口、协议或服务匹配通常会被拒绝。6. Firewalld 规则匹配优先级区域内规则匹配优先级首先匹配为该区域设置的任何端口转发和伪装原则。其次匹配该区域设置的任何允许规则。最后匹配该区域设置的任何拒绝规则。还可以同时为以上 3 类规则设置记录和审计规则可以同时生效。富规则中的规则优先级高于区域中其他规则。如果区域中所有规则都不匹配通常会拒绝该包trusted例外。7. Firewalld 配置方式配置方法直接编辑/etc/firewalld/中的配置文件。firewall-cmd命令行工具。firewall-config图形工具。不建议直接修改配置文件推荐使用firewall-cmd。两个基本概念runtime运行态立刻生效。permanent永久态写入配置文件需要--reload才生效。配置规则必须在一个区域内。如果不使用--zone选项则使用默认区域public。建议配置防火墙时一次性写两条规则第一条使用--permanent永久生效。第二条不使用--permanent立刻生效。8. firewall-cmd 核心命令与反馈8.1 zone 管理# 查看 zone 清单[rootcentos7 ~]# firewall-cmd --get-zonesblock dmz drop external home internal public trusted work# 查看激活的 zone 清单[rootcentos7 ~]# firewall-cmd --get-active-zonespublic interfaces: ens32# 查看默认 zone[rootcentos7 ~]# firewall-cmd --get-default-zonepublic# 设置默认 zone[rootcentos7 ~]# firewall-cmd --set-default-zonetrusted# 查看默认 zone 中的规则[rootcentos7 ~]# firewall-cmd --list-allpublic(active)target: default icmp-block-inversion: no interfaces: ens32 sources: services: cockpit dhcpv6-clientsshports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:复习提示--list-all不加--zone时显示默认/活动区域信息示例输出可能因 runtime/permanent 和当前激活区域不同而变化实际以你的环境为准。8.2 service 管理# 查看系统中预定义了哪些服务[rootcentos7 ~]# firewall-cmd --get-services# 添加放行服务[rootcentos7 ~]# firewall-cmd --add-servicehttp# 查看放行服务列表[rootcentos7 ~]# firewall-cmd --list-servicescockpit dhcpv6-client httpssh# 查看服务是否放行[rootcentos7 ~]# firewall-cmd --query-servicehttpyes# 删除服务[rootcentos7 ~]# firewall-cmd --remove-servicehttp8.3 port 管理# 添加放行端口[rootcentos7 ~]# firewall-cmd --add-port5900/tcp# 查看端口放行列表[rootcentos7 ~]# firewall-cmd --list-ports5900/tcp# 删除端口[rootcentos7 ~]# firewall-cmd --remove-port5900/tcp8.4 masquerade 管理masquerade 用于 SNAT让内网主机通过本机访问外网。# 查看 masquerade 是否启动[rootcentos7 ~]# firewall-cmd --query-masqueradeno# 启动 masquerade[rootcentos7 ~]# firewall-cmd --add-masquerade# 禁用 masquerade[rootcentos7 ~]# firewall-cmd --remove-masquerade8.5 forward-port 管理使用 port forward 前确保对应 zone 启用 masquerade 功能。# 访问本机端口 8000 转发到本机 80[rootcentos7 ~]# firewall-cmd --add-forward-portport8000:prototcp:toport80# 访问本机端口 1022 转发到 10.1.1.11:22[rootcentos7 ~]# firewall-cmd --add-forward-portport1022:prototcp:toport22:toaddr10.1.1.11# 查询端口转发清单[rootcentos7 ~]# firewall-cmd --list-forward-portsport8000:prototcp:toport80:toaddrport1022:prototcp:toport22:toaddr10.1.1.119. 命令速查表操作命令查看所有 zonefirewall-cmd --get-zones查看激活 zonefirewall-cmd --get-active-zones查看默认 zonefirewall-cmd --get-default-zone设置默认 zonefirewall-cmd --set-default-zonetrusted查看当前区域规则firewall-cmd --list-all查看预定义服务firewall-cmd --get-services添加服务firewall-cmd --add-servicehttp查看服务列表firewall-cmd --list-services查询服务firewall-cmd --query-servicehttp删除服务firewall-cmd --remove-servicehttp添加端口firewall-cmd --add-port5900/tcp查看端口firewall-cmd --list-ports删除端口firewall-cmd --remove-port5900/tcp查询伪装firewall-cmd --query-masquerade开启伪装firewall-cmd --add-masquerade关闭伪装firewall-cmd --remove-masquerade添加端口转发firewall-cmd --add-forward-portport8000:prototcp:toport80查看端口转发firewall-cmd --list-forward-ports10. 易错点与复习自测易错点runtime和permanent不分不加--permanent的命令立刻生效但重启或--reload后可能丢失。加--permanent的命令不会立刻生效需要--reload。忘记指定--zone默认使用public区域。区域匹配顺序源地址 → 入接口关联区域 → 默认区域。规则优先级端口转发/伪装 允许规则 拒绝规则富规则优先级高于区域其他规则。forward-port前要确认对应 zone 已启用masquerade。默认publiclo映射到trusted。不建议直接编辑/etc/firewalld/推荐firewall-cmd。自测题如何查看当前默认 zone如何添加一个永久放行http服务并让它立刻生效firewall-cmd --add-port5900/tcp和加--permanent有什么区别端口转发前为什么要确认 masquerade→ 默认区域。规则优先级端口转发/伪装 允许规则 拒绝规则富规则优先级高于区域其他规则。forward-port前要确认对应 zone 已启用masquerade。默认publiclo映射到trusted。不建议直接编辑/etc/firewalld/推荐firewall-cmd。自测题如何查看当前默认 zone如何添加一个永久放行http服务并让它立刻生效firewall-cmd --add-port5900/tcp和加--permanent有什么区别端口转发前为什么要确认 masquerade数据包没有匹配任何源地址和接口时会进入哪个区域