阅读量:96
1. 系统与软件持续更新
定期更新Debian系统及LNMP组件(Nginx、MySQL、PHP),及时修补已知安全漏洞。使用sudo apt update && sudo apt upgrade命令更新系统,通过官方源或可信第三方源升级LNMP组件至最新稳定版。
2. 防火墙严格管控
使用ufw(Uncomplicated Firewall)配置防火墙规则,限制入站流量:
- 允许必要端口:
sudo ufw allow 80/tcp(HTTP)、sudo ufw allow 443/tcp(HTTPS)、sudo ufw allow 3306/tcp(MySQL,建议替换为特定IP)、sudo ufw allow ssh(远程管理); - 设置默认策略:
sudo ufw default deny incoming(拒绝所有入站)、sudo ufw default allow outgoing(允许所有出站); - 启用并验证:
sudo ufw enable,通过sudo ufw status查看规则。
3. SSH服务安全强化
- 禁用root远程登录:编辑
/etc/ssh/sshd_config,设置PermitRootLogin no; - 改用密钥认证:生成SSH密钥对(
ssh-keygen -t rsa),将公钥添加至~/.ssh/authorized_keys,关闭密码认证(PasswordAuthentication no); - 更改默认端口:修改
Port 22为其他端口(如2222),减少自动扫描风险; - 重启SSH服务:
sudo systemctl restart sshd。
4. Nginx配置安全优化
- 禁用不必要的模块:编译Nginx时移除不常用模块(如
http_autoindex_module),减少攻击面; - 限制请求速率:使用
limit_req_zone模块防止暴力破解,例如limit_req_zone $binary_remote_addr zone=req_per_ip:10m rate=10r/s;; - 隐藏版本信息:在
nginx.conf中添加server_tokens off;,避免泄露Nginx版本; - 强制HTTPS:通过
return 301 https://$host$request_uri;将HTTP请求重定向至HTTPS,配置SSL/TLS证书(如Let’s Encrypt)。
5. MySQL数据库安全加固
- 运行安全脚本:安装MySQL后执行
sudo mysql_secure_installation,移除匿名用户、禁止root远程登录、移除测试数据库; - 限制访问权限:修改
bind-address为服务器IP(0.0.0.0仅允许多IP访问),创建专用数据库用户并授予最小权限(如GRANT SELECT, INSERT ON db.* TO 'user'@'特定IP';); - 定期备份:使用
mysqldump或工具(如Percona XtraBackup)备份数据库,测试恢复流程。
6. PHP安全配置限制
- 禁用危险函数:编辑
/etc/php/7.x/fpm/php.ini(根据版本调整),设置disable_functions = system, exec, passthru, shell_exec; - 限制文件访问:使用
open_basedir将PHP访问限制在网站目录(如open_basedir = /var/www/html/:/tmp/); - 关闭错误显示:设置
display_errors = Off,将错误日志记录到/var/log/php_errors.log(error_log = /var/log/php_errors.log); - 限制进程资源:调整
pm.max_children(如pm.max_children = 50)防止资源耗尽。
7. 日志监控与入侵检测
- 启用详细日志:配置Nginx(
access_log/error_log)、MySQL(general_log/slow_query_log)、PHP(error_log)记录所有活动; - 使用监控工具:安装
fail2ban防范暴力破解(如针对SSH、Nginx的多次失败登录),配置logwatch每日发送日志摘要; - 定期审查日志:检查
/var/log/nginx/、/var/log/mysql/、/var/log/php/中的异常记录(如大量404请求、SQL错误)。
8. 其他关键安全措施
- 最小权限原则:Nginx、MySQL、PHP-FPM以专用用户(如
www-data、mysql)运行,网站目录权限设为750(所有者可读写执行,组可读执行,其他无权限); - 安全编码规范:开发时对用户输入进行过滤(如
htmlspecialchars防XSS)、使用预处理语句(PDO::prepare)防SQL注入; - 数据备份与恢复:定期备份网站数据(如
/var/www/html/)和配置文件(如/etc/nginx/、/etc/mysql/),测试备份恢复流程; - 安全审计:定期进行渗透测试(如使用OpenVAS),修复发现的高危漏洞。