温馨提示×

LNMP在Debian上如何防止攻击

小樊
51
2025-08-30 00:48:40
栏目: 网络安全

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.logerror_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-datamysql)运行,网站目录权限设为750(所有者可读写执行,组可读执行,其他无权限);
  • 安全编码规范:开发时对用户输入进行过滤(如htmlspecialchars防XSS)、使用预处理语句(PDO::prepare)防SQL注入;
  • 数据备份与恢复:定期备份网站数据(如/var/www/html/)和配置文件(如/etc/nginx//etc/mysql/),测试备份恢复流程;
  • 安全审计:定期进行渗透测试(如使用OpenVAS),修复发现的高危漏洞。

0