Debian如何保障LNMP安全
小樊
45
2026-01-03 09:27:01
Debian 上 LNMP 的安全加固清单
一 系统层加固
- 保持系统与软件为最新:执行 apt update && apt full-upgrade -y && apt autoremove -y,及时修补漏洞。
- 最小暴露面:仅开启必要服务,使用 systemctl list-units --type=service --state=running 排查并禁用不需要的服务。
- 强口令与复杂度:安装 libpam-pwquality,在 /etc/security/pwquality.conf 中设置 minlen、dcredit、ucredit、lcredit、ocredit 等策略。
- 防火墙基线:使用 UFW 默认拒绝入站、放行出站,仅开放 SSH(22)、HTTP(80)、HTTPS(443);示例:ufw default deny incoming → ufw allow OpenSSH → ufw allow 80,443/tcp → ufw enable。
- 入侵防护:部署 Fail2ban,为 SSH/Nginx 配置拦截规则,启用服务并设为开机自启。
- SSH 安全:修改 /etc/ssh/sshd_config,设置 Port 2222(可选)、PermitRootLogin no、PasswordAuthentication no、PubkeyAuthentication yes,重启 ssh 服务生效。
- 持续监控与复核:定期查看日志、复核开放端口与运行服务,形成变更记录与回滚预案。
二 Nginx 加固
- 隐藏版本信息:在 nginx.conf 或 server 块中设置 server_tokens off;。
- 全站 HTTPS:使用 Certbot 自动申请与部署证书,启用 –redirect --hsts --staple-ocsp,强制 HTTP→HTTPS 并开启 HSTS 与 OCSP Stapling。
- 安全响应头:统一添加
- X-Frame-Options “SAMEORIGIN”
- X-Content-Type-Options “nosniff”
- Referrer-Policy “strict-origin-when-cross-origin”
- Permissions-Policy “accelerometer=(), camera=(), microphone=()”
- Content-Security-Policy “default-src ‘self’; script-src ‘self’; object-src ‘none’;”
- Strict-Transport-Security “max-age=63072000; includeSubDomains; preload”
- 请求与连接限制:设置 client_max_body_size 2M; client_body_timeout 10s; keepalive_timeout 15;,并使用 limit_conn/limit_req 对单 IP 的连接与请求速率进行限速,缓解 DoS/CC 风险。
- 运行与权限:以 www-data 运行,网站根目录建议 chmod 755 /var/www/html、chown -R www-data:www-data /var/www/html,避免 777 权限。
三 MySQL MariaDB 加固
- 安全初始化:执行 mysql_secure_installation,完成设置 root 强口令、移除匿名用户、删除 test 库、禁止 root 远程登录等。
- 绑定与解析:在 /etc/mysql/my.cnf 或 /etc/mysql/mariadb.conf.d/50-server.cnf 中设置 bind-address = 127.0.0.1、skip-name-resolve,减少暴露与解析延迟。
- 权限最小化:仅授予应用所需权限,例如
- CREATE USER ‘appuser’@‘localhost’ IDENTIFIED BY ‘StrongPass!’;
- GRANT SELECT, INSERT, UPDATE, DELETE ON yourdb.* TO ‘appuser’@‘localhost’;
- FLUSH PRIVILEGES;
- 日志与审计:启用通用查询日志/慢查询日志(按需),并定期审计异常查询与登录。
四 PHP 与 PHP-FPM 加固
- php.ini 关键项:
- expose_php = Off
- display_errors = Off; log_errors = On; error_log = /var/log/php_errors.log
- memory_limit = 128M; max_execution_time = 30; max_input_time = 60
- upload_max_filesize = 2M; post_max_size = 8M
- session.cookie_httponly = 1; session.cookie_secure = 1; session.use_strict_mode = 1
- 禁用危险函数:disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
- PHP-FPM 与目录隔离:在 /etc/php/8.x/fpm/pool.d/www.conf 中限制资源(如 pm.max_children、pm.start_servers 等),并通过 open_basedir 限制脚本读写范围,例如:
- fastcgi_param PHP_ADMIN_VALUE “open_basedir=/var/www/html:/tmp/”;
- 运行用户与权限:确保 PHP-FPM 以 www-data 运行,网站目录权限与属主保持一致,避免跨站读写。
五 运维与备份
- 持续监控与告警:部署 Fail2ban 拦截暴力破解,结合 Logwatch 或集中式日志平台定期审计 Nginx、PHP-FPM、MySQL 日志。
- 变更与回滚:变更前备份配置与数据库,变更后分阶段灰度并回滚预案验证。
- 备份与恢复:制定定期备份策略(配置、代码、数据库),并进行周期性恢复演练,确保 RPO/RTO 达标。
- 定期复核:例行检查系统更新、开放端口、运行服务、证书有效期与权限配置,保持最小权限与最小暴露面。