1. 安装与启用Firewalld
CentOS 7及以上版本默认使用Firewalld作为防火墙管理工具,需先确保其安装并运行:
sudo yum install firewalld -y # 安装firewalld
sudo systemctl start firewalld # 启动服务
sudo systemctl enable firewalld # 设置开机自启
通过sudo firewall-cmd --state确认服务状态(显示“running”即为运行中)。
2. 配置默认区域策略
Firewalld通过“区域(Zone)”管理规则,默认区域为“public”(适用于公共网络)。可将默认区域设为更严格的“drop”(拒绝所有未明确允许的流量),降低未配置端口的风险:
sudo firewall-cmd --set-default-zone=drop # 设置默认区域为drop
若需临时调整(如测试),可使用--zone参数指定区域(如--zone=public)。
3. 精准开放必要端口与服务
遵循“最小权限原则”,仅开放业务必需的端口和服务。可通过以下命令操作:
sudo firewall-cmd --permanent --zone=public --add-service=http # 开放HTTP服务
sudo firewall-cmd --permanent --zone=public --add-service=https # 开放HTTPS服务
sudo firewall-cmd --permanent --zone=public --add-service=ssh # 开放SSH服务
sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp # 开放3306端口
修改后需执行sudo firewall-cmd --reload使配置生效。通过sudo firewall-cmd --list-all查看当前区域的开放规则。
4. 使用富规则(Rich Rules)实现精细化控制
富规则支持基于IP地址、协议、时间段等条件的复杂过滤,提升安全性:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="80" reject'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="80" accept time start="09:00" end="18:00"'
修改后需重新加载配置。
5. 配置IP白名单与接口绑定
sudo firewall-cmd --permanent --zone=trusted --add-source=192.168.1.0/24 # 添加白名单IP段
sudo firewall-cmd --permanent --zone=public --add-interface=eth0 # 绑定eth0接口到public区域
绑定后,该接口的流量将遵循对应区域的规则。
6. 启用日志记录与监控
开启防火墙日志,便于追踪异常流量和排查安全事件:
sudo firewall-cmd --set-log-denied=all # 记录所有被拒绝的流量
日志默认存储在/var/log/messages中,可通过以下命令实时查看:
sudo tail -f /var/log/messages | grep firewalld
此外,可结合ELK、Splunk等SIEM工具实现集中监控与告警。
7. 结合SELinux增强安全
SELinux是CentOS的安全增强模块,可与Firewalld协同工作,提供更细粒度的访问控制:
sudo setenforce 1 # 临时启用(立即生效)
/etc/selinux/config文件,将SELINUX=enforcing(强制模式)设置为默认值。8. 定期更新与审查规则
sudo yum update,修补防火墙软件漏洞:sudo yum update firewalld -y # 更新firewalld
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent # 移除8080端口
sudo firewall-cmd --reload # 重新加载配置
sudo cp /etc/firewalld/firewalld.conf /etc/firewalld/firewalld.conf.bak # 备份配置文件