CentOS防火墙定制个性化策略指南(基于firewalld)
CentOS 7及以上版本默认使用firewalld作为防火墙管理工具,其支持区域(Zone)、服务(Service)、**富规则(Rich Rules)**等特性,可实现从基础到高级的个性化策略配置。以下是具体步骤:
若系统未安装firewalld,需先通过以下命令安装:
sudo yum install firewalld -y
安装完成后,启动服务并设置为开机自启:
sudo systemctl start firewalld
sudo systemctl enable firewalld
验证防火墙状态:
sudo firewall-cmd --state # 输出"running"表示运行中
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
sudo firewall-cmd --permanent --zone=public --add-port=53/udp
sudo firewall-cmd --permanent --zone=public --remove-port=9001/tcp
sudo firewall-cmd --reload
firewalld内置了常见服务(如SSH、HTTP、HTTPS)的规则,可直接添加:
sudo firewall-cmd --permanent --zone=public --add-service=ssh
sudo firewall-cmd --permanent --zone=public --remove-service=ftp
firewall-cmd --get-services
富规则支持IP地址、端口范围、协议类型、时间条件等复杂匹配,适用于精细化控制。
例如,仅允许192.168.1.100访问3306端口(MySQL):
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept'
例如,拒绝192.168.2.0/24网段的所有访问:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.2.0/24" reject'
例如,仅允许192.168.1.100在工作日(周一至周五)的8:00-18:00访问22端口:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept; rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" reject; rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" time="Mon-Fri 08:00-18:00" accept'
例如,将外部8080端口转发到内部80端口(适用于Web服务):
sudo firewall-cmd --permanent --zone=public --add-forward-port=port=8080:proto=tcp:toport=80
firewalld预定义了9个区域(如public、home、trusted),每个区域对应不同的信任级别。可根据网络环境调整区域策略:
sudo firewall-cmd --get-active-zones # 查看活动区域及绑定的接口
sudo firewall-cmd --get-default-zone # 查看默认区域
例如,将eth0接口绑定到home区域(适用于家庭网络,信任度更高):
sudo firewall-cmd --permanent --change-interface=eth0 --zone=home
若系统主要面向内部网络,可将默认区域改为trusted(允许所有流量,需谨慎使用):
sudo firewall-cmd --permanent --set-default-zone=trusted
启用防火墙日志可帮助排查问题或检测攻击:
编辑/etc/firewalld/firewalld.conf文件,修改以下参数:
LogDenied=all # 记录所有拒绝的流量
LogLevel=info # 日志级别(info/debug)
重启firewalld使配置生效:
sudo systemctl restart firewalld
sudo tail -f /var/log/messages | grep firewalld
--permanent参数的命令都会保存到/etc/firewalld/zones/下的区域配置文件中,重启后仍有效。sudo cp -r /etc/firewalld /etc/firewalld.bak
sudo cp -r /etc/firewalld.bak /etc/firewalld
sudo firewall-cmd --reload
reject:拒绝规则会直接断开连接,可能导致合法用户无法访问,建议优先使用drop(静默丢弃)。通过以上步骤,可根据业务需求定制个性化的CentOS防火墙策略,平衡安全性与可用性。