LNMP(Linux + Nginx + MySQL + PHP)环境是常见的Web服务器架构,以下是针对LNMP环境的全面安全防护措施:
系统更新与补丁管理
yum update 或 apt-get update && apt-get upgrade用户与权限管理
/etc/ssh/sshd_config中PermitRootLogin no防火墙配置
# 启用防火墙
systemctl start firewalld # CentOS
systemctl start ufw # Ubuntu
# 只开放必要端口(如80,443,22)
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --reload
SELinux/AppArmor
基础安全设置
server_tokens off; # 隐藏Nginx版本信息
client_max_body_size 10m; # 限制上传文件大小
SSL/TLS配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384...';
ssl_prefer_server_ciphers on;
防止常见Web攻击
# 防止点击劫持
add_header X-Frame-Options "SAMEORIGIN";
# XSS防护
add_header X-XSS-Protection "1; mode=block";
# 内容安全策略
add_header Content-Security-Policy "default-src 'self'";
限制访问
# 限制HTTP方法
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}
# 禁止访问敏感文件
location ~* \.(ini|conf|sql|bak|swp)$ {
deny all;
}
基础安全设置
-- 删除匿名用户
DELETE FROM mysql.user WHERE User='';
-- 修改root用户名
RENAME USER 'root'@'localhost' TO 'admin'@'localhost';
-- 为每个应用创建独立数据库用户
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
配置文件优化
[mysqld]
skip-networking # 如果不需远程访问
bind-address = 127.0.0.1
local-infile=0
symbolic-links=0
定期维护
mysql_secure_installation脚本加固php.ini安全设置
expose_php = Off
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
open_basedir = /var/www/html:/tmp
allow_url_fopen = Off
allow_url_include = Off
display_errors = Off
log_errors = On
PHP版本管理
应用层防护
Web应用防火墙(WAF)
入侵检测系统
定期安全审计
备份策略
通过以上多层次的防护措施,可以显著提高LNMP环境的安全性,有效抵御各类网络攻击。