温馨提示×

如何管理Debian防火墙

小樊
97
2026-07-18 05:35:48
栏目: 智能运维

在 Debian 系统中,防火墙管理主要依赖 iptables(传统方案)或 nftables(新一代方案),同时推荐使用 ufw(简单前端)或 firewalld(动态管理)简化操作。以下是详细的管理方法:

一、核心概念与工具选择

工具 特点 适用场景
iptables 传统防火墙工具,基于内核 netfilter,规则直接操作内核表/链 熟悉底层规则、复杂场景
nftables 替代 iptables 的新一代工具,语法更简洁,性能更好,支持动态更新 Debian 10+ 推荐,现代系统
ufw 基于 iptables/nftables 的简单前端,命令直观,适合新手 桌面/简单服务器
firewalld 动态防火墙管理,支持 zone 概念,规则可动态生效(无需重启服务) 服务器、需要灵活 zone 管理

二、使用 ufw 管理防火墙(推荐新手)

ufw(Uncomplicated Firewall)是 Debian 默认的简化防火墙工具,默认可能未安装,需先安装:

1. 安装 ufw

sudo apt update
sudo apt install ufw

2. 基本操作

  • 启用/禁用 ufw

    sudo ufw enable   # 启用(重启后自动生效)
    sudo ufw disable  # 禁用
    
  • 查看状态

    sudo ufw status          # 简洁状态
    sudo ufw status verbose  # 详细状态(含规则、默认策略)
    
  • 设置默认策略
    默认拒绝入站,允许出站(安全策略):

    sudo ufw default deny incoming  # 拒绝所有入站连接
    sudo ufw default allow outgoing # 允许所有出站连接
    
  • 允许/拒绝端口/服务

    • 允许 SSH(22 端口,远程管理必备):
      sudo ufw allow 22/tcp   # 允许 TCP 22 端口(SSH)
      # 或直接用服务名(需 /etc/services 存在对应条目)
      sudo ufw allow ssh
      
    • 允许 HTTP(80)和 HTTPS(443):
      sudo ufw allow 80/tcp
      sudo ufw allow 443/tcp
      
    • 拒绝特定端口(如 3306 MySQL 对外):
      sudo ufw deny 3306/tcp
      
  • 允许特定 IP 访问
    例如允许 IP 192.168.1.100 访问所有端口:

    sudo ufw allow from 192.168.1.100
    

    允许特定 IP 访问特定端口(如 192.168.1.100 访问 SSH):

    sudo ufw allow from 192.168.1.100 to any port 22
    
  • 删除规则
    先查看规则编号:

    sudo ufw status numbered
    

    再删除编号对应的规则(如删除第 2 条):

    sudo ufw delete 2
    
  • 重置 ufw
    清除所有规则并禁用:

    sudo ufw reset
    

三、使用 nftables 管理防火墙(Debian 10+ 推荐)

nftables 是 Debian 10(Buster)及以后版本的默认防火墙后端,替代了 iptables。

1. 安装 nftables

sudo apt install nftables

2. 基本操作

  • 启动并设置开机自启

    sudo systemctl start nftables
    sudo systemctl enable nftables
    
  • 查看当前规则

    sudo nft list ruleset  # 列出所有规则集
    
  • 创建简单规则
    例如:允许 SSH(22)、HTTP(80)、HTTPS(443),拒绝其他入站:

    # 添加表(ip 协议,表名 filter)
    sudo nft add table ip filter
    
    # 添加链(input 链,类型为 filter,优先级 0,policy drop 拒绝默认入站)
    sudo nft add chain ip filter input { type filter hook input priority 0 \; policy drop \; }
    
    # 允许本地回环(lo 接口)
    sudo nft add rule ip filter input iif lo accept
    
    # 允许已建立/相关的连接(如出站请求的回应)
    sudo nft add rule ip filter input ct state established,related accept
    
    # 允许 SSH(22/tcp)
    sudo nft add rule ip filter input tcp dport 22 accept
    
    # 允许 HTTP(80/tcp)和 HTTPS(443/tcp)
    sudo nft add rule ip filter input tcp dport { 80, 443 } accept
    
  • 保存规则(持久化)
    nftables 规则默认不持久化,需手动保存到配置文件:

    sudo nft list ruleset > /etc/nftables.conf
    

    编辑 /etc/nftables.conf 确保开机加载(Debian 默认已配置 systemd 服务读取该文件)。

  • 清除规则

    sudo nft flush ruleset  # 清除所有规则
    

四、使用 iptables 管理防火墙(传统方式)

iptables 是老牌工具,Debian 仍支持,但建议优先用 nftables 或 ufw。

1. 安装 iptables(若未安装)

sudo apt install iptables iptables-persistent

iptables-persistent 用于持久化规则(重启不丢失)。

2. 基本操作

  • 查看规则

    sudo iptables -L -n -v  # 列出所有规则(-n 不解析域名,-v 详细)
    
  • 设置默认策略

    sudo iptables -P INPUT DROP    # 入站默认拒绝
    sudo iptables -P FORWARD DROP  # 转发默认拒绝
    sudo iptables -P OUTPUT ACCEPT # 出站默认允许
    
  • 添加规则
    允许 SSH、HTTP、HTTPS:

    sudo iptables -A INPUT -i lo -j ACCEPT  # 允许本地回环
    sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT  # 允许已建立连接
    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # SSH
    sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT  # HTTP
    sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
    
  • 持久化规则
    使用 iptables-persistent 保存:

    sudo netfilter-persistent save  # 保存当前规则到 /etc/iptables/rules.v4(IPv4)
    sudo netfilter-persistent reload  # 重新加载规则
    

五、使用 firewalld 管理防火墙(动态 zone 管理)

firewalld 是红帽系常用的动态防火墙,Debian 也可安装,适合需要 zone 划分的场景。

1. 安装 firewalld

sudo apt install firewalld

2. 基本操作

  • 启动并设置开机自启

    sudo systemctl start firewalld
    sudo systemctl enable firewalld
    
  • 查看状态与 zone

    sudo firewall-cmd --state          # 查看服务状态
    sudo firewall-cmd --get-zones      # 列出所有 zone
    sudo firewall-cmd --get-active-zones # 查看活跃 zone
    
  • 管理 zone 规则
    默认 zone 是 public,可添加服务/端口:

    # 允许 SSH 服务(永久生效,需 reload)
    sudo firewall-cmd --zone=public --add-service=ssh --permanent
    # 允许 HTTP 端口(临时生效,重启后丢失)
    sudo firewall-cmd --zone=public --add-port=80/tcp
    # 重新加载规则(使永久规则生效)
    sudo firewall-cmd --reload
    
  • 删除规则

    sudo firewall-cmd --zone=public --remove-service=ssh --permanent
    sudo firewall-cmd --reload
    

六、注意事项

  1. 远程管理安全:修改防火墙规则时,务必先允许 SSH 端口(如 22),否则可能断开远程连接!
  2. 规则持久化:iptables/nftables 规则默认不持久化,需依赖 iptables-persistent 或手动保存配置;ufw/firewalld 会自动处理持久化。
  3. 优先级:若同时使用多个工具(如 ufw 和 nftables),可能导致规则冲突,建议只选一种工具管理。

根据你的需求选择工具:新手用 ufw,现代系统用 nftables,需要动态 zone 用 firewalld。

0 踩