openEuler(CentOS8)防火墙firewall与Selinux实战配置指南
1. 防火墙firewalld基础操作指南
刚接触openEuler或CentOS8系统的朋友,经常会遇到服务端口无法访问的问题。这十有八九是防火墙在"作怪"。别担心,今天我就带大家彻底搞定这个安全卫士。
firewalld是新一代动态防火墙管理工具,相比传统的iptables,它最大的特点就是配置实时生效,不用重启服务。我刚开始用的时候总习惯性敲service iptables save,后来才发现firewalld根本不需要这套操作。下面这些命令是我在运维工作中每天都会用到的:
# 查看防火墙状态(这个命令我一天要敲几十遍) systemctl status firewalld # 启停防火墙的正确姿势 systemctl start firewalld # 启动 systemctl stop firewalld # 停止 systemctl restart firewalld # 重启有个细节特别容易踩坑:systemctl enable firewalld这个命令会让防火墙开机自启。很多新手在测试环境关闭防火墙后,重启服务器发现又自动打开了,就是这个原因。建议生产环境务必开启,测试环境可以根据需要禁用。
2. 端口管理实战技巧
管理端口就像给房子开门窗,既要保证通行便利,又要防范安全隐患。我在配置服务器时,通常会先放行这些必备端口:
# 放行常用服务端口(记得加--permanent参数) firewall-cmd --add-port=22/tcp --permanent # SSH远程管理 firewall-cmd --add-port=80/tcp --permanent # Web服务 firewall-cmd --add-port=443/tcp --permanent # HTTPS firewall-cmd --add-port=3306/tcp --permanent # MySQL配置完成后,必须执行firewall-cmd --reload才能使永久规则生效。这个步骤我见过太多人忘记,包括我自己早期也经常犯这个错误。有一次排查了半小时的端口不通问题,最后发现是没reload配置,现在想起来都觉得好笑。
查看当前开放的端口列表可以用:
firewall-cmd --list-ports如果需要关闭某个端口,比如临时禁用MySQL远程访问:
firewall-cmd --remove-port=3306/tcp --permanent firewall-cmd --reload3. 高级防火墙配置
除了基础端口管理,firewalld还有一些实用功能值得掌握:
区域(zone)管理是firewalld的特色功能。默认情况下,新网卡会加入public区域。我有次给服务器加新网卡后,发现服务无法访问,就是因为没把网卡加入正确的zone。可以通过以下命令管理:
# 查看所有可用区域 firewall-cmd --get-zones # 查看默认区域 firewall-cmd --get-default-zone # 修改网卡所属区域 firewall-cmd --zone=work --change-interface=eth1 --permanent**富规则(Rich Rules)**可以实现更精细的控制。比如只允许特定IP访问SSH:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept' --permanent4. SELinux基础概念
SELinux堪称Linux系统的"钢铁侠战衣",它通过强制访问控制(MAC)机制,给每个进程和文件都上了锁。虽然刚开始会觉得它很烦人,但熟悉后就会发现它的强大之处。
SELinux有三种工作模式:
- Enforcing:强制执行安全策略(生产环境推荐)
- Permissive:仅记录不阻止(调试时使用)
- Disabled:完全禁用(不建议)
查看当前状态:
getenforce临时切换模式(重启后失效):
setenforce 0 # 切换到Permissive模式 setenforce 1 # 切换回Enforcing模式5. SELinux实战配置
永久修改SELinux状态需要编辑配置文件:
vim /etc/selinux/config将SELINUX=后面的值改为需要的模式。修改后必须重启系统才能生效。这里有个血泪教训:有次我在生产环境直接改成disabled,结果忘记重启,排查了半天为什么策略还在生效。
处理SELinux相关问题时,这几个命令能帮大忙:
# 查看SELinux拒绝日志 ausearch -m avc -ts recent # 查看文件/目录的安全上下文 ls -Z /var/www/html # 修改安全上下文 chcon -t httpd_sys_content_t /var/www/html6. 防火墙与SELinux协同工作
防火墙和SELinux就像门口的保安和房间的智能锁。即使通过了防火墙(保安),还需要SELinux(智能锁)的授权才能访问资源。
常见问题排查步骤:
- 先用
systemctl status firewalld确认防火墙状态 - 用
firewall-cmd --list-ports确认端口已开放 - 用
getenforce确认SELinux模式 - 检查
/var/log/audit/audit.log中的拒绝记录
遇到权限问题时,可以临时将SELinux设为Permissive模式测试是否是SELinux导致的问题。确认后再针对性调整策略,而不是简单粗暴地完全禁用SELinux。
7. 生产环境最佳实践
根据我在金融行业的运维经验,推荐以下配置方案:
防火墙配置:
- 保持firewalld常开
- 只开放必要的业务端口
- 对管理端口(如SSH)实施IP白名单限制
- 定期审计端口开放情况
SELinux配置:
- 生产环境保持Enforcing模式
- 针对定制服务创建专属安全策略
- 使用audit2allow工具生成自定义策略模块
- 定期分析安全日志
日常维护:
# 每周检查一次异常放行记录 firewall-cmd --list-all ausearch -m avc -ts this-week
记住,安全性和便利性需要平衡。刚开始可能会觉得这些安全措施很麻烦,但养成习惯后,它们会成为你系统最可靠的守护者。
