LNMP(Linux + Nginx + MySQL + PHP)作为常见的Web服务架构,其安全防护需要从系统层、服务层、应用层多维度加固。以下是详细的安全防护措施:
系统更新与补丁管理
yum update
或 apt-get upgrade
更新系统和软件包。unattended-upgrades
on Debian)。用户与权限控制
/etc/ssh/sshd_config
设置 PermitRootLogin no
。PasswordAuthentication no
。www-data
)。防火墙配置
ufw
或 firewalld
),仅开放必要端口(80, 443, 22)。ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 22/tcp --limit 3/minute # 限制SSH暴力破解
入侵检测与日志监控
apt install fail2ban
systemctl enable fail2ban
logrotate
)和集中监控(如ELK)。版本隐藏与基础配置
server_tokens off;
if ($request_method !~ ^(GET|POST|HEAD)$) { return 444; }
HTTPS加密
certbot --nginx -d example.com
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
防DDoS与请求限制
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
limit_req zone=one burst=20;
文件目录防护
location ~* /(\.git|config|backup) { deny all; }
autoindex off;
基础加固
mysql_secure_installation
脚本移除测试数据库和匿名用户。[mysqld]
bind-address = 127.0.0.1
port = 3307
权限管理
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword!';
GRANT SELECT,INSERT ON appdb.* TO 'appuser'@'localhost';
日志与审计
[mysqld]
general_log = 1
slow_query_log = 1
php.ini关键配置
disable_functions = exec,passthru,shell_exec,system
upload_max_filesize = 2M
post_max_size = 3M
运行环境隔离
[www-example.com]
user = www-example
group = www-example
listen = /run/php/php7.4-fpm-example.sock
防护PHP漏洞
代码安全
filter_var()
或ORM防止SQL注入)。WAF(Web应用防火墙)
定期扫描
nikto -h https://example.com
自动化备份
mysqldump -u root -p --all-databases | gzip > /backup/mysql_$(date +%F).sql.gz
rsync
)。异地备份
通过以上措施,LNMP架构的安全性将显著提升,但需注意安全是持续过程,需定期审计和更新策略。