CentOS Apache防火墙配置技巧
CentOS 7及以上版本默认使用firewalld作为防火墙管理工具。首先确保其安装并运行:
sudo yum install firewalld -y # 安装firewalld
sudo systemctl start firewalld # 启动服务
sudo systemctl enable firewalld # 设置开机自启
Apache默认使用80(HTTP)和443(HTTPS)端口,需通过firewalld开放对应服务:
sudo firewall-cmd --permanent --zone=public --add-service=http # 开放HTTP
sudo firewall-cmd --permanent --zone=public --add-service=https # 开放HTTPS
sudo firewall-cmd --reload # 重新加载配置使更改生效
验证规则:sudo firewall-cmd --list-all,应能看到http和https在public区域的服务列表中。
若Apache监听非80/443端口(如8080),需单独添加端口规则:
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp # 开放8080端口
sudo firewall-cmd --reload
验证端口是否开放:sudo firewall-cmd --query-port=8080/tcp(返回yes表示成功)。
通过rich规则仅允许特定IP访问Apache,减少非法请求:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept' # 允许单个IP
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept' # 允许IP段
sudo firewall-cmd --reload
此配置可有效防止未授权IP扫描或攻击。
若系统启用SELinux(默认enforcing模式),需调整策略避免Apache被拦截:
sudo setsebool -P httpd_can_network_connect 1 # 允许HTTP服务连接网络
/data/www),需修改上下文:sudo chcon -Rt httpd_sys_content_t /data/www # 设置目录为HTTP内容类型
sudo semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?" # 永久生效
sudo restorecon -Rv /data/www # 恢复上下文
开启防火墙和Apache的详细日志,便于及时发现异常:
/var/log/firewalld目录下的日志文件(如firewalld),记录拒绝的流量。httpd.conf配置日志级别和路径,例如:LogLevel alert rewrite:trace3 # 提高日志详细度
ErrorLog ${APACHE_LOG_DIR}/error_log # 错误日志路径
CustomLog ${APACHE_LOG_DIR}/access_log combined # 访问日志格式
sudo yum update -y,修复已知安全漏洞。sudo cp /etc/firewalld/zones/public.xml /etc/firewalld/zones/public.xml.bak
sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
通过以上技巧,可实现CentOS环境下Apache防火墙的有效配置,平衡安全性与可用性。