Linux防火墙实战教程_iptablesfirewalld配置与优化

5次阅读

iptables 是底层规则工具,firewalld 是其上层抽象,支持动态更新与区域管理;二者不可共存,需统一管理方式,CentOS/RHEL 默认 firewalld,Debian/Ubuntu 长期用 iptables。

Linux 防火墙实战教程_iptablesfirewalld 配置与优化

Linux 系统中,iptables 和 firewalld 是最常用的 防火墙 工具,二者定位不同:iptables 是底层规则管理工具,firewalld 是其上层服务抽象,支持动态更新、区域(zone)管理和更友好的命令接口。实际使用中,选哪个取决于发行版默认配置和运维习惯——CentOS 7+/RHEL 8 默认启用 firewalld,但很多运维人员仍习惯用 iptables 直接操作;Debian/Ubuntu 则长期以 iptables 为主,直到较新版本才逐步引入 nftables。

iptables 基础配置与常用规则

iptables 规则按链(chain)组织,主要处理 INPUT(入站)、OUTPUT(出站)、FORWARD(转发)三类流量。每条规则匹配条件后执行动作(ACCEPT、DROP、REJECT 等)。关键点在于规则顺序决定匹配优先级,越靠前的规则越先生效。

  • 查看当前规则:sudo iptables -L -n -v(-n 禁用 DNS 解析,-v 显示详细统计)
  • 放行 SSH(端口 22):sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • 拒绝所有未匹配的入站连接:sudo iptables -P INPUT DROP(注意:执行前务必确保已有 SSH 规则,否则可能锁死)
  • 保存规则(不同系统方式不同):
      • CentOS/RHEL:sudo service iptables savesudo iptables-save > /etc/sysconfig/iptables
      • Debian/Ubuntu:sudo iptables-save > /etc/iptables/rules.v4,并配合 ifupdown 或 netfilter-persistent 服务自动加载

firewalld 区域管理与服务配置

firewalld 的核心是“区域(zone)”,每个 zone 定义一组默认行为和允许的服务。public 是默认区域,适合服务器外网接口;trusted 用于完全信任的内网环境;drop 则默认丢弃所有入站包(仅响应 ICMP ping)。

  • 查看当前状态:sudo firewall-cmd --state(运行中返回 running)
  • 列出默认区域开放的服务:sudo firewall-cmd --list-services
  • 临时开放 HTTP:sudo firewall-cmd --add-service=http
  • 永久开放 HTTPS:sudo firewall-cmd --add-service=https --permanent && sudo firewall-cmd --reload
  • 自定义端口(如 Redis 6379):sudo firewall-cmd --add-port=6379/tcp --permanent
  • 修改默认区域绑定的网卡:sudo firewall-cmd --zone=internal --change-interface=eth1 --permanent

iptables 与 firewalld 共存问题与切换策略

二者不能同时直接管理同一套内核规则。firewalld 底层仍调用 iptables(或 nftables),若手动用 iptables 修改规则,firewalld 可能无法感知,导致 reload 后规则丢失。生产环境中应统一管理方式。

  • 停用 firewalld 并启用 iptables:
      • sudo systemctl stop firewalld
      • sudo systemctl disable firewalld
      • 安装并启动 iptables-services(RHEL/CentOS)或相应包
  • 从 iptables 迁移至 firewalld:
      • 先导出当前规则:sudo iptables-save > /tmp/iptables.rules
      • 分析规则逻辑,映射为 zone + service/port 组合
      • 使用 firewall-cmd 逐条配置,最后 --reload
  • 检查冲突:运行 sudo iptables -L 后再执行 sudo firewall-cmd --reload,若规则清空说明 firewalld 已接管且旧 iptables 规则被覆盖

性能优化与安全加固建议

防火墙本身开销不大,但不当配置会影响连接建立速度和日志体积。重点不在“加更多规则”,而在“精准匹配”和“减少遍历”。

  • 将高频规则(如 SSH、HTTP)放在链开头,降低平均匹配跳数
  • 避免使用 -m state --state NEW 等过时模块,改用 -m conntrack --ctstate NEW(iptables v1.4.21+)
  • 限制连接速率防暴力扫描:sudo iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT
  • 记录可疑连接(慎用,避免日志刷爆):sudo iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "INVALID_PACKET:"
  • 定期审计规则:sudo iptables -S 查看原始规则语法,比 -L 更利于排查逻辑错误
星耀云
版权声明:本站原创文章,由 星耀云 2026-01-05发表,共计2188字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources