温馨提示×

Debian防火墙定制化指南

小樊
42
2025-12-11 04:52:19
栏目: 智能运维

Debian防火墙定制化指南

一 工具选型与适用场景

  • UFW(Uncomplicated Firewall):基于 iptables 的前端,语法简洁,适合桌面与服务器快速上手,默认策略为拒绝入站、允许出站,便于快速放行常见服务(如 SSH/HTTP/HTTPS)。
  • firewalld:支持区域(zone)服务(service)概念,规则可运行时生效且可回滚,适合需要按网络环境(如 public/internal/trusted)做细粒度与动态管理的场景。
  • iptables:传统且灵活,适合精确控制复杂策略;需配合持久化方案(如 iptables-persistent 或手动保存/恢复脚本)。
  • nftables:新一代 Netfilter 框架,语法更现代,适合新项目或希望替代 iptables 的场景。

二 快速上手 UFW

  • 安装与启用
    • 安装:sudo apt update && sudo apt install ufw
    • 默认策略:sudo ufw default deny incomingsudo ufw default allow outgoing
    • 启用:sudo ufw enable(远程操作务必先放行 SSH,避免锁死)
  • 常用规则
    • 放行端口/服务:sudo ufw allow 22/tcpsudo ufw allow OpenSSH
    • 放行 HTTP/HTTPS:sudo ufw allow httpsudo ufw allow https
    • 按来源放行:sudo ufw allow from 203.0.113.10 to any port 22
    • 按接口放行:sudo ufw allow in on eth0 to any port 3306
    • 端口范围:sudo ufw allow 7100:7200/tcp
    • 协议区分:sudo ufw allow 101/tcpsudo ufw allow 101/udp
  • 管理与持久化
    • 查看状态:sudo ufw status verbose
    • 删除规则:sudo ufw delete allow 80/tcp
    • 重置:sudo ufw reset
    • 规则导出(便于备份/迁移):sudo ufw export > /etc/ufw/user.rules

三 使用 firewalld 做区域化与细粒度控制

  • 安装与启动
    • 安装:sudo apt install firewalld
    • 启动与开机自启:sudo systemctl start firewalldsudo systemctl enable firewalld
    • 查看状态:sudo firewall-cmd --state
  • 基础配置
    • 区域与默认区:sudo firewall-cmd --get-zonessudo firewall-cmd --set-default-zone=public
    • 放行端口/服务:sudo firewall-cmd --zone=public --add-port=80/tcp --permanentsudo firewall-cmd --add-service=ssh --permanent
    • 使配置生效:sudo firewall-cmd --reload
    • 运行时与永久规则:带 –permanent 为重启后保留;不带为运行时临时规则
  • 富规则与精细控制
    • 仅允许指定来源访问 SSH:sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100/32" service name="ssh" accept'
    • 查询端口:sudo firewall-cmd --query-port=60091/tcp

四 使用 iptables 与 nftables 精确控制

  • iptables 常用做法
    • 基本放行与状态控制
      • 回环与已建立连接: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);80/443(HTTP/HTTPS)
      • 按需放行 ICMP(ping):sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
    • 默认策略(谨慎):sudo iptables -P INPUT DROP(务必先确保已放行 SSH,避免失联)
    • 持久化与恢复
      • 保存:sudo iptables-save > /etc/iptables/rules.v4
      • 恢复:sudo iptables-restore < /etc/iptables/rules.v4
      • 使用 iptables-persistent:sudo apt install iptables-persistent(安装时选择保存当前规则;后续可用 sudo netfilter-persistent save|start 管理)
  • nftables 快速示例
    • 查看规则集:sudo nft list ruleset
    • 放行某来源访问 SSHsudo nft add rule inet filter input tcp dport 22 ip saddr 192.168.1.100 accept
    • 保存与自启
      • 导出规则:sudo nft list ruleset > /etc/nftables.conf
      • 开机加载(示例):创建 /etc/network/if-pre-up.d/nftables,内容 #!/bin/sh /sbin/nft -f /etc/nftables.conf,并 sudo chmod +x

五 实战案例与运维要点

  • 实战案例
    • 端口转发(DNAT)与出口源地址转换(SNAT)
      • 启用转发:sudo sysctl -w net.ipv4.ip_forward=1
      • DNAT 将公网 80/TCP 转发至内网 192.168.1.100:80sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
      • SNAT 将内网 192.168.1.0/24 出站源地址改为 203.0.113.5sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.5
    • 只允许指定来源访问 SSH
      • UFW:sudo ufw allow from 203.0.113.10 to any port 22
      • firewalld:sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" service name="ssh" accept'
      • iptables:sudo iptables -A INPUT -p tcp --dport 22 -s 203.0.113.10 -j ACCEPT
  • 运维要点
    • 变更前备份规则;变更后逐步验证;远程操作务必先放行 SSH 或使用带外管理
    • 区分运行时永久规则(firewalld 使用 –permanentreload
    • 保持最小暴露面:仅开放必要端口与服务;对管理口与敏感服务使用来源白名单
    • 建议启用日志以便审计与故障排查(如记录被拒绝的连接)

0