Linux 防火墙配置指南:iptables 与 firewalld

一、工具概述
  1. iptables
    传统 Linux 防火墙工具,直接操作内核级 netfilter 框架,适用于所有主流发行版。

    • 优势:灵活性高,功能全面
    • 劣势:规则语法较复杂
  2. firewalld
    CentOS/RHEL 7+ 和 Fedora 的默认动态防火墙管理器,基于 iptables 但提供更友好的抽象层。

    • 优势:支持运行时动态更新,无需重启服务
    • 特性:使用区域(zone)和服务(service)概念管理规则

二、端口放行配置

iptables 方法

# 放行 TCP 80 端口(HTTP)
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 放行 UDP 53 端口(DNS)
$ sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT

firewalld 方法

# 永久放行 HTTP 服务(自动包含端口 80)
$ sudo firewall-cmd --permanent --add-service=http

# 直接放行自定义端口(如 TCP 8080)
$ sudo firewall-cmd --permanent --add-port=8080/tcp

# 重载配置生效
$ sudo firewall-cmd --reload


三、IP 黑白名单配置

iptables 黑名单(拒绝特定 IP)

# 拒绝 192.168.1.100 的所有访问
$ sudo iptables -A INPUT -s 192.168.1.100 -j DROP

# 拒绝某网段(如 10.0.0.0/24)
$ sudo iptables -A INPUT -s 10.0.0.0/24 -j REJECT

iptables 白名单(仅允许特定 IP)

# 先拒绝所有流量
$ sudo iptables -P INPUT DROP

# 仅允许 192.168.1.50 访问 SSH(端口 22)
$ sudo iptables -A INPUT -p tcp -s 192.168.1.50 --dport 22 -j ACCEPT

firewalld 黑名单

# 添加 IP 到黑名单(rich rule 语法)
$ sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.5" reject'

# 重载生效
$ sudo firewall-cmd --reload

firewalld 白名单

# 创建新区域 "trusted" 并添加白名单 IP
$ sudo firewall-cmd --permanent --new-zone=trusted
$ sudo firewall-cmd --permanent --zone=trusted --add-source=192.168.1.50

# 将默认区域设为 "public" 并限制访问
$ sudo firewall-cmd --set-default-zone=public


四、规则保存与持久化

iptables 规则保存

# 保存当前规则到文件(Debian/Ubuntu)
$ sudo iptables-save > /etc/iptables/rules.v4

# CentOS/RHEL 7 以下版本
$ sudo service iptables save

# 开机自动加载:安装 iptables-persistent
$ sudo apt install iptables-persistent  # Debian/Ubuntu

firewalld 规则持久化

# 所有 --permanent 参数的操作自动写入配置文件
$ sudo firewall-cmd --runtime-to-permanent  # 将临时规则转为永久

# 配置文件位置:/etc/firewalld/zones/


五、关键注意事项
  1. 操作顺序
    iptables 规则按顺序匹配,优先级:DROP/REJECT 规则应放在 ACCEPT 之后,避免封锁自己。

  2. SSH 安全
    修改防火墙前,确保放行当前 SSH 连接 IP:

    $ sudo iptables -A INPUT -p tcp -s $(who | awk '{print $5}') --dport 22 -j ACCEPT
    

  3. 规则检查

    • iptables:sudo iptables -L -v -n
    • firewalld:sudo firewall-cmd --list-all
  4. 故障恢复

    • 清空错误规则:sudo iptables -F
    • firewalld 重置:sudo firewall-cmd --reload

提示:生产环境建议先在测试机验证规则,避免触发服务器断连。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐