tools

firewalld 与 iptables 对比

·9 分钟阅读·3340 字
📋 目录

firewalld 与 iptables 对比

一、如何选择

系统版本默认防火墙
CentOS 7/8/9、Rocky、AlmaLinuxfirewalld
CentOS 6、Debian/Ubuntu 旧版iptables

注意:firewalld 底层依然调用 iptables 内核模块,只是上层管理工具不同。


第一部分:firewalld(主流,重点)

1. 基础启停 & 开机自启

# 查看状态
systemctl status firewalld

# 启动/停止/重启
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld

# 开机自启 / 开机禁用
systemctl enable firewalld
systemctl disable firewalld

2. 查看规则与区域

# 查看防火墙整体状态、默认区域
firewall-cmd --state
firewall-cmd --get-default-zone

# 查看当前所有放行规则(常用)
firewall-cmd --list-all

# 仅查看放行端口
firewall-cmd --list-ports

3. 放行端口(临时 + 永久)

临时规则(重启防火墙失效)

# 放行单个端口 80
firewall-cmd --add-port=80/tcp

# 放行端口段 30000-32767(K8s NodePort 常用)
firewall-cmd --add-port=30000-32767/tcp

永久规则(生产必加 --permanent,需重载生效)

# 永久放行 22、80、443
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp

# 重载配置(永久规则生效)
firewall-cmd --reload

4. 关闭/删除端口规则

# 临时关闭
firewall-cmd --remove-port=80/tcp

# 永久删除(重载生效)
firewall-cmd --permanent --remove-port=80/tcp
firewall-cmd --reload

5. 放行指定 IP

# 永久放行 192.168.1.100 所有访问
firewall-cmd --permanent --add-source=192.168.1.100/32

# 永久放行某 IP 只访问指定端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'

6. ICMP(ping)控制

# 禁止 ping
firewall-cmd --permanent --add-icmp-block=echo-request
# 允许 ping
firewall-cmd --permanent --remove-icmp-block=echo-request
firewall-cmd --reload

7. 伪装 & 端口转发(SNAT/DNAT)

# 开启 IP 伪装(内网机器上网)
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload

# 端口转发(本机 8080 转发到 192.168.1.200:80)
firewall-cmd --permanent --add-forward-port=port=8080:proto=tcp:toaddr=192.168.1.200:toport=80
firewall-cmd --reload

8. 常用快捷方案

# 放行整个内网段
firewall-cmd --permanent --add-source=192.168.0.0/16 && firewall-cmd --reload

# 直接关闭防火墙(测试环境常用)
systemctl stop firewalld && systemctl disable firewalld

第二部分:iptables(CentOS 6 / 传统方案)

1. 启停 & 自启

service iptables status
service iptables start
service iptables stop
service iptables restart

chkconfig iptables on    # 开机启动
chkconfig iptables off   # 开机不启动

2. 查看规则

iptables -L -n --line-numbers
# -n 不解析域名;--line-numbers 显示行号,方便删除规则

3. 常用规则

# 放行 tcp 22 端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 放行 80、443
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 放行端口段
iptables -A INPUT -p tcp --dport 30000:32767 -j ACCEPT

# 放行指定 IP
iptables -A INPUT -s 192.168.1.100/32 -j ACCEPT

# 允许本机回环(必须保留)
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立/相关连接(必备)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# 默认拒绝所有入站(放在最后一条)
iptables -P INPUT DROP

4. 删除规则

# 先查行号
iptables -L -n --line-numbers
# 删除第 3 行规则
iptables -D INPUT 3

5. 保存规则(重启不丢失)

# CentOS 6
service iptables save

# 通用写法
/etc/init.d/iptables save

6. 清空所有规则(谨慎)

iptables -F
iptables -X
iptables -Z

三、选型小结

场景推荐
CentOS 7+ 生产环境firewalld,规则动态加载、区域管理更友好
老系统、容器/传统网络iptables,兼容性强
测试/临时环境直接关闭防火墙最省事
云服务器操作系统防火墙 + 云平台安全组两层都要放行

四、面试/运维高频命令速记

firewalld 速记

  • 看规则:firewall-cmd --list-all
  • 永久放行端口:--permanent + --add-port + --reload
  • 关闭防火墙:systemctl stop && disable firewalld

iptables 速记

  • 查看带行号:iptables -L -n --line-numbers
  • 删规则:按行号 iptables -D INPUT 编号
  • 保存:service iptables save

关联文档

  • ../../linux/system/Linux — 防火墙是 Linux 系统管理的一部分
  • ../../kubernetes/core/K8s 核心概念#kube-proxy — kube-proxy 依赖 iptables/IPVS
  • ../../linux/system/SSH 认证原理与配置 — SSH 安全与防火墙联动