CentOS LNMP服务器安全加固策略
yum update -y && yum autoremove -y(CentOS)更新操作系统及所有软件包,及时修补Nginx、MySQL、PHP等组件的已知漏洞,避免因未修复漏洞被攻击。/etc/ssh/sshd_config中的PermitRootLogin no),创建普通用户并赋予sudo权限;设置强密码策略(包含大小写字母、数字、特殊字符,长度≥10位),定期更换密码;删除不必要的系统用户(如games、ftp),锁定长期不用的账户。Enforcing模式(getenforce查看状态),通过setsebool命令调整相关布尔值(如setsebool -P httpd_can_network_connect_db 1允许Nginx连接MySQL),强化系统访问控制。firewalld(推荐)或iptables限制访问。firewalld配置示例:firewall-cmd --permanent --add-service=http --add-service=https --remove-service=ssh(仅开放HTTP/HTTPS),然后firewall-cmd --reload;iptables配置:设置默认策略iptables -P INPUT DROP,允许已建立连接(-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT)、SSH(-A INPUT -p tcp --dport 22 -j ACCEPT)、HTTP/HTTPS(-A INPUT -p tcp --dport 80 -j ACCEPT、-A INPUT -p tcp --dport 443 -j ACCEPT),最后service iptables save保存规则。/etc/ssh/sshd_config,设置PasswordAuthentication no(禁用密码登录)、PubkeyAuthentication yes(启用密钥认证)、Port 2222(更改默认端口),重启SSH服务(systemctl restart sshd);使用fail2ban防范暴力破解,安装后配置/etc/fail2ban/jail.local,设置[sshd]部分的enabled = true、maxretry = 3(3次失败后封禁)。/etc/nginx/nginx.conf或站点配置)中添加server_tokens off;(隐藏Nginx版本),设置安全HTTP头部:add_header X-Frame-Options "SAMEORIGIN"(防点击劫持)、add_header X-Content-Type-Options "nosniff"(防MIME类型嗅探)、add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'"(防XSS)、add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"(强制HTTPS)。limit_conn_zone和limit_req_zone限制并发连接和请求速率,防止DoS攻击。示例:limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;(定义连接限制区域)、limit_conn conn_limit_per_ip 10;(单个IP最多10个并发连接);limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;(单个IP每秒最多5个请求)。/var/www/html)权限合理,设置chmod -R 755 /var/www/html(目录可读可执行)、chown -R www-data:www-data /var/www/html(属主属组为Nginx运行用户),禁止Nginx用户(如www-data)拥有写权限(除非必要)。mysql -u root -p -e "DELETE FROM mysql.user WHERE User='';"),禁用root远程登录(mysql -u root -p -e "REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%';"),仅为应用创建专用账号(如CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword123!'),并授予最小权限(GRANT SELECT, INSERT, UPDATE ON appdb.* TO 'appuser'@'localhost';)。/etc/my.cnf,添加ssl-ca=/path/to/ca.pem、ssl-cert=/path/to/server-cert.pem、ssl-key=/path/to/server-key.pem),强制应用使用加密连接;定期审计用户权限(mysql -u root -p -e "SELECT User, Host, plugin FROM mysql.user;"),检查是否有未使用的账号。eval、exec、system),修改/etc/php.ini中的disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec;设置open_basedir限制PHP访问目录(open_basedir = /var/www/html:/tmp/,防止跨目录文件访问);关闭错误显示(display_errors = Off),记录错误日志(log_errors = On、error_log = /var/log/php_errors.log),避免泄露敏感信息。rsync、tar或自动化工具(如cron+mysqldump)定期备份网站数据(/var/www/html)和数据库(mysqldump -u appuser -p appdb > /backup/appdb_$(date +%F).sql),备份文件存储在异地(如云存储)或加密存储(如gpg加密)。mysql -u root -p appdb < /backup/appdb_latest.sql),确保备份可用,避免因备份失效导致数据丢失。error_log /var/log/nginx/error.log warn;;MySQL:log_error = /var/log/mysql/error.log;PHP:error_log = /var/log/php_errors.log),使用Logwatch或ELK Stack(Elasticsearch+Logstash+Kibana)集中分析日志,及时发现异常(如大量404请求、SQL注入尝试)。Prometheus+Grafana监控服务器性能(CPU、内存、磁盘使用率)和安全指标(登录失败次数、异常进程),设置告警阈值(如CPU使用率超过80%时发送邮件告警),提前预警潜在攻击。filter_var函数过滤邮箱、URL)和清理(如htmlspecialchars转义HTML特殊字符),防止SQL注入(使用预处理语句$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");)、XSS(输出时转义)等攻击。