谈到CentOS LAMP环境的安全加固,这实际上是一项系统工程,无法一蹴而就。从系统更新到日志监控,每个环节都潜藏着不少挑战。以下这份指南系统梳理了从基础到进阶的加固步骤,覆盖了Apache、MySQL、PHP以及操作系统层面的安全配置,旨在帮助你高效规避常见风险。
1. 系统及软件更新(基础且关键)
更新系统、Apache、MySQL、PHP及其依赖包,是堵住已知漏洞最直接的手段。别嫌麻烦,这一步省不了。执行下面命令就能一次性搞定:
sudo yum update -y # CentOS 7
# 或者(CentOS 8及以上)
sudo dnf update -y
不过动手之前,最好把数据库和重要配置文件备份一下。更新过程中万一出了幺蛾子,还能兜底。
2. Apache安全配置(Web服务防护)
- 砍掉多余模块:编辑
httpd.conf,把不用的模块(如mod_status、mod_info)注释掉,攻击面就能小一圈:sudo vi /etc/httpd/conf/httpd.conf # 找到 LoadModule status_module modules/mod_status.so 并在前面加# - 藏好版本信息:关闭Apache的版本号和服务器签名,不让攻击者轻易摸清你的底牌:
sudo sed -i 's/ServerSignature On/ServerSignature Off/' /etc/httpd/conf/httpd.conf sudo sed -i 's/ServerTokens OS/ServerTokens Prod/' /etc/httpd/conf/httpd.conf - 收紧端口,限制访问:用
firewalld只开放80和443端口,把非法IP挡在门外:sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload - 控制并发,别让资源被吃光:调整
MaxClients和MaxRequestsPerChild,避免连接风暴把进程池撑爆:
改完别忘了重启Apache:sudo sed -i 's/MaxClients 150/MaxClients 100/' /etc/httpd/conf/httpd.conf sudo sed -i 's/MaxRequestsPerChild 4000/MaxRequestsPerChild 2000/' /etc/httpd/conf/httpd.confsudo systemctl restart httpd
3. MySQL/MariaDB安全配置(数据库防护)
- 跑一遍安全脚本:
mysql_secure_installation能帮你一键完成设置root密码、删除匿名用户、禁止root远程登录等操作:sudo mysql_secure_installation - 强制用强密码:在
my.cnf(或/etc/mysql/mariadb.conf.d/50-server.cnf)里加入密码策略,让弱密码无处遁形:sudo vi /etc/my.cnf # 添加以下内容 [mysqld] validate_password_policy=STRONG validate_password_length=12 - 限制远程访问:只给应用服务器的IP授权,别把数据库直接暴露在公网上:
GRANT ALL PRIVILEGES ON *.* TO 'username'@'allowed_ip' IDENTIFIED BY 'strong_password'; FLUSH PRIVILEGES;
4. PHP安全配置(脚本环境防护)
- 禁用危险函数:在
php.ini里把exec、system、eval这些可能被恶意利用的函数拉黑:sudo vi /etc/php.ini # 找到 disable_functions 并添加 disable_functions = exec, system, eval, passthru, shell_exec - 关掉错误显示:把
display_errors设为Off,免得数据库路径、结构信息被直接怼到用户脸上:sudo sed -i 's/display_errors = On/display_errors = Off/' /etc/php.ini - 限制文件上传:设定好
upload_max_filesize和upload_tmp_dir,防止恶意文件混进服务器:
改完还是要重启Apache:sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 5M/' /etc/php.ini sudo sed -i 's/upload_tmp_dir = .*/upload_tmp_dir = \/var\/tmp/' /etc/php.inisudo systemctl restart httpd
5. 系统级安全加固(底层防护)
- SELinux别闲着:确认它处于
enforcing模式,给文件系统和进程权限再加一把锁:sudo getenforce # 检查状态 sudo sed -i 's/SELINUX=permissive/SELINUX=enforcing/' /etc/selinux/config - SSH加固三板斧:禁止root直接登录、改掉默认端口(比如从22改成2222)、用密钥认证替代密码:
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config sudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config ssh-keygen -t rsa -b 4096 # 生成密钥对 ssh-copy-id username@server_ip # 复制公钥到服务器 sudo systemctl restart sshd - 防火墙规则再细一点:用
firewalld的富规则,只让运维IP访问SSH端口:sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="2222" protocol="tcp" accept' sudo firewall-cmd --reload
6. 日志监控与应急响应
- 开启审计服务:装好
auditd,记录用户登录、文件修改等关键行为,方便事后追溯:sudo yum install audit -y sudo systemctl start auditd sudo systemctl enable auditd - 定期翻日志:重点关注
/var/log/secure(SSH登录日志)、/var/log/httpd/error_log(Apache错误日志)、/var/log/mariadb/mariadb.log(MySQL日志)。暴力破解、SQL注入的痕迹往往就藏在这里。 - 做好备份:数据库用
mysqldump定期导出,配置文件(httpd.conf、php.ini、my.cnf)打包存档,最好存到离线介质或异地云存储:sudo mysqldump -u root -p --all-databases > /backup/all_databases.sql sudo tar -czvf /backup/lamp_config_$(date +%F).tar.gz /etc/httpd /etc/php.ini /etc/my.cnf
7. 漏洞扫描与补丁管理
- 用工具摸个底:定期跑OpenVAS、Nessus这类扫描器,查出未修复的CVE漏洞,然后对症下药:
# 示例:启动OpenVAS扫描(需提前安装) sudo openvas-start - 盯紧安全公告:订阅CentOS官方邮件列表和安全公告(CentOS Security Advisories),第一时间拿到新漏洞及补丁信息。
整完这一套,CentOS LAMP环境的常见安全漏洞基本就能被堵得七七八八了。不过安全是持续博弈的过程——系统更新最好每周来一遍,日志也得月月查,才能及时应对新冒出来的威胁。
