首页主机资讯Debian LNMP如何安全设置

Debian LNMP如何安全设置

时间2025-10-21 15:32:03发布访客分类主机资讯浏览661
导读:1. 系统基础安全加固 更新系统及软件:定期运行sudo apt update && sudo apt upgrade -y,确保Linux内核、Nginx、MySQL、PHP等组件为最新版本,修补已知安全漏洞。 设置强密...

1. 系统基础安全加固

  • 更新系统及软件:定期运行sudo apt update & & sudo apt upgrade -y,确保Linux内核、Nginx、MySQL、PHP等组件为最新版本,修补已知安全漏洞。
  • 设置强密码策略:安装libpam-pwquality工具,编辑/etc/security/pwquality.conf,调整minlen=12(密码最小长度)、dcredit=-1(至少1个小写字母)、ucredit=-1(至少1个大写字母)等参数,强制用户使用复杂密码。
  • 禁用不必要的服务:通过systemctl list-units --type service --state running查看运行中的服务,禁用未使用的服务(如telnetftp),减少攻击面。

2. 防火墙配置(UFW)

  • 安装与启用UFW:运行sudo apt install ufw & & sudo ufw enable,默认拒绝所有入站连接、允许所有出站连接。
  • 允许必要端口:仅开放LNMP必需的端口,命令如下:
    sudo ufw allow ssh  # 远程管理
    sudo ufw allow http  # HTTP(80端口)
    sudo ufw allow https  # HTTPS(443端口)
    sudo ufw allow mysql  # MySQL(3306端口,默认仅本地访问)
    
  • 限制SSH访问:若需远程管理,修改/etc/ufw/before.rules,在*filter部分添加规则,仅允许特定IP访问SSH(如sudo ufw allow from 192.168.1.100 to any port 22),降低暴力破解风险。

3. SSH安全优化

  • 修改默认端口:编辑/etc/ssh/sshd_config,将Port 22改为Port 2222(或其他非标准端口),减少自动化扫描攻击。
  • 禁用Root登录:在sshd_config中设置PermitRootLogin no,禁止直接以root用户登录,使用普通用户+sudo提升权限。
  • 启用密钥认证:生成SSH密钥对(ssh-keygen -t rsa -b 4096),将公钥(id_rsa.pub)复制到服务器~/.ssh/authorized_keys,关闭密码认证(PasswordAuthentication no),提升登录安全性。

4. Nginx安全加固

  • 禁用不必要的模块:编译Nginx时通过--without-http_autoindex_module--without-http_geo_module等参数禁用不常用模块(如自动索引、地理模块),减少潜在攻击点。
  • 配置SSL/TLS:使用Let’s Encrypt免费证书(sudo apt install certbot python3-certbot-nginx),运行sudo certbot --nginx -d yourdomain.com自动配置HTTPS,强制HTTP跳转HTTPS(在server块中添加return 301 https://$host$request_uri; )。优化SSL参数:编辑/etc/nginx/nginx.conf,添加ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ,启用前向保密(PFS)。
  • 限制请求大小:在serverlocation块中设置client_max_body_size 20M; ,防止恶意用户上传超大文件导致DDoS攻击。
  • 隐藏Nginx版本:在nginx.confserver_tokens指令中设置为offserver_tokens off; ),避免泄露Nginx版本信息。

5. MySQL/MariaDB安全配置

  • 运行安全脚本:安装完成后执行sudo mysql_secure_installation,设置root密码、移除匿名用户、禁止root远程登录、删除测试数据库。
  • 限制远程访问:编辑/etc/mysql/mysql.conf.d/mysqld.cnf,将bind-address设置为127.0.0.1,仅允许本地连接;若需远程访问,通过GRANT语句限制特定IP(如GRANT ALL PRIVILEGES ON database.* TO 'user'@'192.168.1.100' IDENTIFIED BY 'StrongPassword'; )。
  • 使用SSL连接:生成MySQL SSL证书(sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/mysql/ssl/mysql-key.pem -out /etc/mysql/ssl/mysql-cert.pem),编辑mysqld.cnf添加SSL配置(ssl-ca=/etc/mysql/ssl/mysql-cert.pem; ssl-cert=/etc/mysql/ssl/mysql-cert.pem; ssl-key=/etc/mysql/ssl/mysql-key.pem; ),重启MySQL服务(sudo systemctl restart mysql),要求客户端使用SSL连接(mysql --ssl-ca=/etc/mysql/ssl/mysql-cert.pem -u user -p)。
  • 定期更新密码:设置MySQL密码过期策略(ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword' PASSWORD EXPIRE INTERVAL 90 DAY; ),强制定期更换密码。

6. PHP安全设置

  • 禁用危险函数:编辑/etc/php/7.4/fpm/php.ini(根据PHP版本调整),找到disable_functions,添加exec,passthru,shell_exec,system等危险函数,防止代码执行攻击。
  • 限制资源使用:在/etc/php/7.4/fpm/pool.d/www.conf中调整pm.max_children(如pm.max_children = 20,根据服务器内存调整)、pm.start_servers(如pm.start_servers = 5),防止PHP进程占用过多资源导致服务器崩溃;设置request_terminate_timeout = 30s,限制脚本执行时间,避免长时间运行。
  • 隐藏PHP版本:编辑/etc/php/7.4/fpm/php.ini,设置expose_php = Off,避免泄露PHP版本信息。
  • 设置错误报告级别:在php.ini中设置display_errors = Off(生产环境),log_errors = On,将错误信息记录到/var/log/php_errors.log,防止敏感信息泄露。

7. 日志监控与自动防护

  • 安装Fail2Ban:运行sudo apt install fail2ban,创建/etc/fail2ban/jail.local,添加以下配置针对SSH和Nginx的暴力破解防护:
    [sshd]
    enabled = true
    maxretry = 3
    bantime = 3600
    [nginx-http-auth]
    enabled = true
    maxretry = 3
    bantime = 3600
    
    重启Fail2Ban(sudo systemctl restart fail2ban),自动封禁多次尝试失败的IP。
  • 定期审查日志:使用Logwatchsudo apt install logwatch)每日生成系统日志报告,或通过sudo tail -f /var/log/nginx/error.logsudo tail -f /var/log/mysql/error.log实时监控Nginx和MySQL的错误日志,及时发现异常行为。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Debian LNMP如何安全设置
本文地址: https://pptw.com/jishu/731221.html
如何确保Filebeat的稳定性 如何用Filebeat监控Docker容器

游客 回复需填写必要信息