LNMP服务器安全设置
导读:LNMP服务器安全设置指南 LNMP(Linux+Nginx+MySQL+PHP)架构是当前主流的Web服务组合,其安全性需从系统底层到应用层分层防护。以下是具体安全设置措施: 一、Linux系统安全加固 用户与权限管理:禁用root用户...
LNMP服务器安全设置指南
LNMP(Linux+Nginx+MySQL+PHP)架构是当前主流的Web服务组合,其安全性需从系统底层到应用层分层防护。以下是具体安全设置措施:
一、Linux系统安全加固
- 用户与权限管理:禁用root用户直接SSH登录,创建普通用户并赋予sudo权限;定期清理冗余账户,确保每个账户仅具备完成工作所需的最小权限。
- 密码策略:强制使用强密码(包含大小写字母、数字、特殊字符,长度≥8位),设置密码有效期(如90天),禁止空密码登录。
- 端口与服务控制:关闭不必要的系统服务(如Telnet、FTP),仅开放必需端口(SSH:22、HTTP:80、HTTPS:443);使用
systemctl disable
禁用未使用的服务。 - 内核参数优化:修改
/etc/sysctl.conf
增强系统抗攻击能力,例如启用地址空间布局随机化(kernel.randomize_va_space=2
)、限制SYN洪水攻击(net.ipv4.tcp_syncookies=1
),执行sysctl -p
使配置生效。
二、Nginx Web服务器安全配置
- 隐藏敏感信息:在
nginx.conf
中设置server_tokens off;
关闭版本号显示;使用more_clear_headers Server;
移除响应头中的“Server”标识,避免攻击者通过版本信息针对性攻击。 - 访问控制:通过
allow/deny
指令限制敏感目录(如/admin
)的IP访问;禁用自动目录列表(autoindex off;
)防止文件泄露;限制HTTP方法(仅允许GET、POST、HEAD),拒绝TRACE、DELETE等危险方法(limit_except GET POST { deny all; }
)。 - SSL/TLS加密:使用Let’s Encrypt获取免费SSL证书,配置强制HTTPS跳转(
return 301 https://$host$request_uri;
);启用HSTS头部(add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
);配置强加密套件(ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; ssl_prefer_server_ciphers on;
)。 - 请求防护:使用
limit_req_zone
限制单IP请求速率(如limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=1r/s;
),防止DDoS攻击;通过client_max_body_size 2M;
限制上传文件大小,避免大文件消耗服务器资源。
三、MySQL数据库安全加固
- 用户权限管理:遵循“最小权限原则”,仅为用户分配完成任务所需的权限(如
SELECT
、INSERT
),禁止授予ALL PRIVILEGES
、FILE
、SUPER
等高危权限;使用GRANT
语句精确授权(如GRANT SELECT, INSERT ON appdb.* TO 'appuser'@'localhost';
)。 - 访问控制:通过防火墙(如ufw)限制MySQL端口(3306)的访问,仅允许信任IP(如应用服务器IP)连接;修改默认端口(如3307)增加攻击难度。
- 数据安全:设置强密码(使用
mysql_secure_installation
工具初始化密码);删除匿名用户(DROP USER ''@'localhost';
)和测试数据库(DROP DATABASE IF EXISTS test;
);启用SSL加密连接(REQUIRE SSL
)保护数据传输。 - 日志与审计:开启通用日志(
general_log = ON
)记录所有查询,或使用MySQL Enterprise Audit插件进行细粒度审计,便于事后追溯异常行为。
四、PHP应用安全防护
- 安全配置:在
php.ini
中禁用危险函数(如exec
、system
、eval
,disable_functions = exec,system,eval
);设置open_basedir
限制PHP访问目录(如open_basedir = /var/www/html:/tmp/
),防止非法文件访问;关闭错误显示(display_errors = Off
),将错误日志记录到指定文件(error_log = /var/log/php_errors.log
),避免泄露敏感信息。 - 输入验证与过滤:使用
filter_var()
函数验证用户输入(如电子邮件:filter_var($email, FILTER_VALIDATE_EMAIL)
),过滤特殊字符(如htmlspecialchars()
转义输出,防止XSS攻击)。 - 防SQL注入:使用PDO或MySQLi的预处理语句(
prepare
+bind_param
),将SQL结构与数据分离(如$stmt = $pdo-> prepare('SELECT * FROM users WHERE username = :username'); $stmt-> bindParam(':username', $username);
),彻底杜绝SQL注入。 - 防CSRF攻击:为每个表单生成唯一CSRF令牌(
session_start(); $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
),提交时验证令牌(if ($_SESSION['csrf_token'] !== $_POST['csrf_token']) die('Invalid token');
)。 - 文件上传安全:验证上传文件类型(如仅允许图片:
in_array($_FILES['file']['type'], ['image/jpeg', 'image/png'])
)、大小(如≤2MB);将文件存储在非Web可访问目录(如/var/uploads/
),避免直接通过URL访问。
五、持续维护与监控
- 软件更新:定期检查并更新Linux内核、Nginx、MySQL、PHP至最新稳定版本,及时修补已知漏洞;使用
apt update & & apt upgrade
(Ubuntu)或yum update
(CentOS)进行更新。 - 日志审计:每日检查Nginx(
access.log
、error.log
)、MySQL(error.log
)、PHP(php_errors.log
)日志,使用grep
、awk
等工具分析异常请求(如大量404错误、SQL错误)。 - 备份策略:定期备份网站数据(如
/var/www/html
)和数据库(使用mysqldump
),将备份文件加密(如gpg -c backup.sql
)并存储到异地(如云存储),测试恢复流程确保有效性。 - 安全扫描:使用漏洞扫描工具(如OpenVAS、Nessus)定期扫描服务器,检测未修复的漏洞;使用Fail2Ban防止SSH暴力破解(配置
/etc/fail2ban/jail.local
限制失败次数)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: LNMP服务器安全设置
本文地址: https://pptw.com/jishu/725405.html