新装服务器必须按逻辑顺序初始化防火墙与SELinux:先确认firewalld运行状态及public区域规则,再验证SELinux为enforcing模式;firewalld应以服务为单位开放端口并reload生效;SELinux需结合audit日志、布尔值和上下文精准放行,二者协同验证缺一不可。

新装服务器系统后,防火墙和SELinux不是“配完就行”,而是必须按逻辑顺序初始化、校准、协同启用。跳过基础配置直接开服务,后面90%的连通性问题都源于这两层没打牢。
先确认状态再动手
刚装完系统,别急着加规则。先看默认状态是否符合预期:
- 运行 firewall-cmd --state 确认 firewalld 正在运行;用 firewall-cmd --list-all 查看 public 区域当前放行了哪些服务或端口(Minimal 安装通常为空)
- 运行 getenforce 和 sestatus -v,确认 SELinux 是 enforcing 模式且策略类型为 targeted;若显示 disabled 或 permissive,说明安全机制未真正生效
- 注意:firewalld 默认拒绝所有入站流量,SELinux 默认阻止非标准操作——这不是故障,是设计如此
firewalld 基础策略要按需开放
不要全开 trusted 区域,也不要用 --add-port=80/tcp --permanent 这类裸端口方式。推荐以“服务”为单位管理:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 对常用服务,优先使用内置 service:比如 firewall-cmd --zone=public --add-service=ssh --permanent、--add-service=http、--add-service=https
- 自定义服务(如 VNC 的 5901、vsFTP 被动端口段)需先定义 service 文件或用富规则:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="5901" protocol="tcp" accept'
- 所有 --permanent 操作后必须执行 firewall-cmd --reload 才生效
SELinux 不是关掉就安全,而是要精准放行
很多服务启动失败、文件写入被拒、端口绑定失败,表面看是权限或端口问题,实际常是 SELinux 上下文或布尔值限制:
- 查日志定位:用 ausearch -m avc -ts recent | audit2why 或 journalctl -t setroubleshoot 查具体拒绝原因
- 临时调试可用布尔值开关:比如 Samba 写入失败常因 setsebool -P samba_export_all_rw on;Apache 访问自定义目录需 setsebool -P httpd_read_user_content on
- 修改文件或目录上下文:例如将网站根目录设为 httpd_sys_content_t:semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?",再 restorecon -Rv /var/www/html
两者必须协同验证,不能只测单边
一个典型误区:firewalld 放开了 80 端口,浏览器却打不开页面。这时要分三步排查:
- 确认 Apache 进程在运行(systemctl status httpd)
- 确认 80 端口已被 httpd 监听(ss -tlnp | grep :80)
- 确认该监听行为被 SELinux 允许(sesearch -A -s httpd_t -t http_port_t -c tcp_socket -p name_bind;若无输出,说明需用 semanage port -a -t http_port_t -p tcp 8080 注册非标端口)
本质上,firewalld 决定“数据包能不能进来”,SELinux 决定“进来的数据包由哪个进程处理、能访问哪些资源”。缺一不可,也互不替代。

















