linux防火墙白名单必须先设默认策略为drop,再按顺序添加允许规则,否则因匹配顺序或策略未设导致不生效;iptables需-p input drop后加规则,firewalld须用--add-rich-rule精准控制ip+端口,ufw必须先执行ufw default deny incoming。

直接加一条允许规则不生效,八成是默认策略没设或规则顺序错了。Linux防火墙白名单不是“放行某个IP”,而是“先拒所有、再放指定”,顺序和默认策略必须同步调对。
iptables 白名单必须先设 POLICY DROP 再插规则
规则匹配是自上而下,一旦遇到 -j DROP 或默认策略为 DROP,后续的 ACCEPT 就永远不会执行。
- 先查当前 INPUT 链状态:
iptables -nL INPUT --line-numbers,重点看最后一行是不是policy DROP - 如果不是,立刻设默认拒绝:
iptables -P INPUT DROP(这是全局策略,不是某条规则) - 然后插入允许规则,比如只放
203.0.113.45的 SSH:iptables -A INPUT -s 203.0.113.45 -p tcp --dport 22 -j ACCEPT - 别漏掉已建立连接:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT,否则 SSH 会立刻断开 - 本地回环也得显式放行:
iptables -A INPUT -i lo -j ACCEPT,否则curl localhost或 systemd 通信可能失败 - 规则不持久——重启就丢,保存命令因系统而异:
iptables-save > /etc/iptables/rules.v4(Debian/Ubuntu),service iptables save(CentOS 6)
firewalld 白名单必须用 --add-rich-rule,不能只 --add-source
--add-source 只是把 IP 划进 zone,不是限制端口;真正精准控制「IP + 端口」,必须用 rich rule,否则可能意外放开所有服务。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 错误做法:
firewall-cmd --permanent --add-source=192.168.1.100→ 这只是把该 IP 归入 public zone,而 public zone 默认允许 ssh、dhcpv6-client 等,白名单形同虚设 - 正确写法(只允
192.168.1.100访问8080):firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="8080" protocol="tcp" accept' - 如果之前用
--add-port=8080/tcp全局开放过,得先删掉:firewall-cmd --permanent --remove-port=8080/tcp,否则 rich rule 被绕过 - 执行后必须重载:
firewall-cmd --reload,否则不生效 - 验证是否写进去了:
firewall-cmd --list-rich-rules,输出里要有accept,不能是reject或空 - 注意空格:
source address="1.1.2.4 "(末尾多空格)会导致规则不生效,firewall-cmd --permanent --list-all查不到该条
ufw 白名单最容易踩坑的是没设 default deny incoming
ufw 默认策略宽松,不显式设拒绝,白名单就等于没设。而且它对 CIDR 表达要求严格,/32 不能省。
- 第一步必须做:
ufw default deny incoming(别跳过这步) - 加单 IP 白名单(如只放
123.123.123.123的 SSH):ufw allow from 123.123.123.123/32 to any port 22 proto tcp——/32不能省,否则可能误匹配整个网段 - 启用前务必确认当前 SSH 连接 IP 不在被拒范围内,否则连自己都断掉
- 查看规则是否生效:
ufw status verbose - ufw 在 Debian/Ubuntu 上最省事,但一旦出错,
ufw disable是唯一快速回退方式
复杂点在于:云服务器还要额外配安全组,本地防火墙再严也没用;nftables 已成新默认,语法和 iptables 不兼容;而 firewalld 的 rich rule 顺序就是匹配顺序,reload 是原子操作,错一条可能直接锁死 SSH。










