Debian下LNMP安全配置指南
小樊
37
2025-11-15 03:58:28
Debian 下 LNMP 安全配置指南
一 基础加固
保持系统最新:执行 sudo apt update && sudo apt upgrade -y ,及时获取安全补丁。
创建非 root 运维用户:避免直接使用 root ,为日常操作创建普通用户并加入 sudo 组。
启用防火墙:使用 UFW 仅放行必要端口(如 22/80/443 ),示例:
sudo apt install ufw -y
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
SSH 安全:优先使用 SSH 密钥 登录,禁用 root 远程登录,必要时更改默认端口(如 2222 ),示例:
sudo nano /etc/ssh/sshd_config
Port 2222
PermitRootLogin no
PasswordAuthentication no
修改后执行:sudo systemctl restart ssh。
二 Nginx 安全配置
只暴露必要端口与服务:确保仅开放 80/443 ,Nginx 进程以最小权限运行。
隐藏版本信息:在 /etc/nginx/nginx.conf 的 http 块添加:
server_tokens off;
强制 HTTPS 与 HSTS :在 server 块配置重定向与 HSTS(示例):
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security “max-age=63072000; includeSubDomains; preload” always;
}
限制请求方法与目录访问:
location / {
limit_except GET POST HEAD { deny all; }
}
location ~ /.ht { deny all; }
location ~ /.git { deny all; }
正确解析 PHP:在 /etc/nginx/sites-available/default 的 server 块中仅保留必要 location ~ .php$ 配置,示例:
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 按实际 PHP 版本调整
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
修改后执行:sudo nginx -t && sudo systemctl reload nginx。
三 PHP-FPM 与 PHP 安全
禁用危险函数:在 /etc/php/7.4/fpm/php.ini (按实际版本)设置:
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,eval,assert,`
关闭路径信息泄露:设置 cgi.fix_pathinfo=0 。
限制资源与进程:在 /etc/php/7.4/fpm/pool.d/www.conf 合理设置:
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
request_terminate_timeout = 30
仅启用必要扩展:如 php-fpm php-mysql php-gd php-curl php-mbstring php-zip php-opcache php-xml php-mysqli 。
重启生效:sudo systemctl restart php7.4-fpm。
四 MariaDB MySQL 安全
运行安全向导:sudo mysql_secure_installation(设置 root 强密码、移除匿名用户、禁止远程 root、删除测试库)。
限制远程访问:在 /etc/mysql/mariadb.conf.d/50-server.cnf 设置:
bind-address = 127.0.0.1
创建最小权限数据库用户(示例):
CREATE DATABASE dbname;
CREATE USER ‘username’@‘localhost’ IDENTIFIED BY ‘StrongPassword!’;
GRANT ALL PRIVILEGES ON dbname.* TO ‘username’@‘localhost’;
FLUSH PRIVILEGES;
重启数据库:sudo systemctl restart mariadb。
五 入侵防护 日志与备份
入侵防护:部署 Fail2ban 监控 SSH/Nginx 暴力登录,示例:
sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
在 [sshd] 段落启用:enabled = true;在 [nginx-http-auth] 段落启用:enabled = true;
sudo systemctl enable --now fail2ban。
日志与审计:定期查看 /var/log/ (如 nginx/ 、mysql/ 、auth.log ),并使用 Logwatch 进行汇总报告。
备份与恢复:制定周期性备份(如每日全量、每小时增量),可使用 rsync/tar 或专业备份工具,保留 ≥30 天 并定期演练恢复流程。