温馨提示×

Debian防火墙连接问题

小樊
42
2026-01-01 18:44:18
栏目: 智能运维

Debian 防火墙连接问题排查与修复

一、快速判断与最小验证

  • 确认防火墙类型与状态
    • UFW:执行 sudo ufw status verbose,若显示 Status: active,说明防火墙已启用。
    • nftables:执行 sudo nft list ruleset,若能看到规则,说明在使用 nftables。
    • firewalld:执行 sudo systemctl is-active firewalld,返回 active 表示正在运行。
  • 先放行当前会话使用的端口(避免被断开),例如 SSH 为 22/tcp
    • UFW:sudo ufw allow 22/tcp
    • nftables:sudo nft add rule ip filter input tcp dport 22 accept
    • firewalld:sudo firewall-cmd --add-port=22/tcp --permanent && sudo firewall-cmd --reload
  • 从本机验证服务是否监听正确地址与端口:
    • ss -tulpen | grep :<端口>,若看到 127.0.0.1:<端口>::1:<端口>,说明仅本地监听;远程访问需要 0.0.0.0:<端口>(或 *:端口)。
  • 从外部验证连通性:
    • nc -vz <服务器IP> <端口>telnet <服务器IP> <端口>;也可用 nmap -p <端口> <服务器IP>
  • 若使用云服务器,务必在控制台同时检查安全组/防火墙是否放行对应端口与来源网段。

二、按工具定位与修复

  • UFW
    • 查看状态与规则:sudo ufw status verbosesudo ufw status numbered(便于按编号删除冲突规则)。
    • 放行端口:sudo ufw allow <端口>/tcp;删除规则:sudo ufw delete <编号>sudo ufw delete allow <端口>/tcp
    • 启用日志:sudo ufw logging on,日志路径 /var/log/ufw.log
    • 若提示命令未找到,先安装:sudo apt update && sudo apt install ufw
  • nftables
    • 查看规则:sudo nft list ruleset
    • 放行端口:sudo nft add rule ip filter input tcp dport <端口> accept(IPv6 用 ip6 家族)。
    • 持久化:将当前规则写入 /etc/nftables.conf,重启后 sudo nft -f /etc/nftables.conf 加载。
  • firewalld(若系统误装了 firewalld)
    • 查看与放行:sudo firewall-cmd --statesudo firewall-cmd --list-portssudo firewall-cmd --add-port=<端口>/tcp --permanent && sudo firewall-cmd --reload
    • 与 UFW/iptables 同时运行会造成规则冲突,建议只保留一种防火墙后端。

三、服务监听与中间环节检查

  • 服务监听是否正确
    • 使用 ss -tulpen | grep :<端口> 确认监听地址为 0.0.0.0(或 *:端口),而非仅 127.0.0.1
    • 常见服务的默认绑定限制:
      • MySQL:默认 bind-address=127.0.0.1,需改为 0.0.0.0 并授权远程用户。
      • Redis:默认 protected-mode yes,远程连不上可先临时关闭测试。
      • MongoDB:默认 bindIp: 127.0.0.1,需改为 0.0.0.0 或加入内网 IP。
  • 云环境与中间环节
    • 云服务器需在控制台放行对应端口的安全组/防火墙,并尽量限制为可信 源 IP
    • 检查 NAT 网关/负载均衡是否转发该端口,健康检查是否通过。
    • 若启用 SELinux,用 getenforce 查看,必要时 setenforce 0 做临时排除测试。

四、常见错误与修复清单

  • 规则冲突或顺序不当:用 sudo ufw status numbered 查看并按编号调整/删除;nftables 用 list ruleset 检查优先级与覆盖关系。
  • 规则未持久化:
    • UFW 通常自动持久化;
    • iptables 用 sudo iptables-save > /etc/iptables/rules.v4,并在启动时恢复;
    • nftables 将规则写入 /etc/nftables.conf 并开机加载。
  • 多防火墙服务并存导致覆盖:检查 sudo systemctl status firewalld ufw iptables,只保留一种并在重启后验证规则是否按预期加载。
  • 启用 UFW 前未放行 SSH:先执行 sudo ufw allow 22/tcpsudo ufw enable,避免被断开。
  • 监听地址错误:服务仅绑定 127.0.0.1 会导致外网访问超时,需改为 0.0.0.0 并重启服务。

五、最小化临时放行与回滚方案

  • 临时放行(验证用,验证后请收紧为精确来源与必要端口):
    • UFW:sudo ufw allow <端口>/tcp
    • nftables:sudo nft add rule ip filter input tcp dport <端口> accept
    • firewalld:sudo firewall-cmd --add-port=<端口>/tcp --permanent && sudo firewall-cmd --reload
  • 快速回滚到全放行(紧急恢复连通性,随后应立即恢复最小规则):
    • UFW:echo "y" | sudo ufw reset
    • nftables:sudo nft flush ruleset
    • firewalld:sudo firewall-cmd --complete-reload(或 sudo systemctl restart firewalld
  • 验证无误后,务必恢复为“仅放行必要端口与来源网段”的最小策略,并再次从外部连通性测试。

0