CentOS防火墙最佳实践
CentOS 7及以上版本默认使用firewalld(动态防火墙管理工具),相比传统iptables更易管理(支持动态更新规则、区域划分等功能)。若未安装,可通过sudo yum install firewalld安装;安装后启动服务并设置开机自启:sudo systemctl start firewalld、sudo systemctl enable firewalld。
仅开放业务必需的端口,减少攻击面。例如:
firewall-cmd --permanent --remove-port=端口号/协议移除。firewalld通过区域(如public、internal、dmz)定义不同网络环境的访问规则:
firewall-cmd --get-zones查看可用区域,firewall-cmd --set-default-zone=public设置默认区域。对于复杂需求(如特定IP访问、时间段限制),可使用rich rules:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' port protocol='tcp' port='22' accept";firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="80" protocol="tcp" time start="08:00" end="18:00" accept';firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='10.0.0.0/8' reject"。firewall-cmd --reload使规则生效。将防火墙默认策略设置为拒绝所有流量,仅允许明确放行的流量,提升安全性:
firewall-cmd --set-default-zone=drop将默认区域设为drop(拒绝所有入站、转发流量,允许所有出站流量);开启防火墙日志,便于审计异常行为:
firewall-cmd --set-log-denied=xml记录被拒绝的流量);/var/log/firewalld(或通过journalctl -u firewalld查看实时日志);grep、awk提取异常IP、端口),及时发现暴力破解、扫描等攻击。firewall-cmd --list-all查看当前规则),移除不再使用的端口或服务(如旧业务对应的端口);sudo yum update firewalld),修补安全漏洞。SSH是远程管理的关键服务,需通过防火墙配合强化安全:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='管理员IP' port protocol='tcp' port='22' accept";sudo vim /etc/ssh/sshd_config修改PermitRootLogin no),使用密钥认证(PubkeyAuthentication yes)。修改防火墙规则前,备份当前配置(sudo cp -r /etc/firewalld /etc/firewalld.bak);
若配置错误导致无法访问,可通过备份恢复(sudo cp -r /etc/firewalld.bak/* /etc/firewalld/),或使用firewall-cmd --reload重新加载默认规则。