温馨提示×

Ubuntu中LNMP安全设置怎么做

小樊
40
2025-11-02 08:36:53
栏目: 智能运维

Ubuntu环境下LNMP(Linux+Nginx+MySQL+PHP)安全设置指南

一、系统基础安全加固

1. 更新系统与软件包

保持系统及所有软件包为最新版本,及时修复已知安全漏洞:

sudo apt update && sudo apt upgrade -y

2. 配置UFW防火墙

使用UFW(Uncomplicated Firewall)限制不必要的网络访问,仅开放必要端口(SSH、HTTP、HTTPS、MySQL等):

sudo apt install ufw -y
sudo ufw allow 22/tcp    # SSH(后续可修改为非标准端口)
sudo ufw allow 80/tcp    # HTTP
sudo ufw allow 443/tcp   # HTTPS
sudo ufw allow 3306/tcp  # MySQL(若需远程访问)
sudo ufw enable          # 启用防火墙
sudo ufw status          # 验证规则

3. 强化SSH登录安全

编辑/etc/ssh/sshd_config文件,进行以下关键设置:

  • 修改默认端口:避免使用22端口,降低自动扫描风险(如改为2222);
  • 禁用root远程登录:防止暴力破解root账户;
  • 启用公钥认证:替代密码认证,提升安全性。
Port 2222                   # 修改默认端口
PermitRootLogin no          # 禁止root远程登录
PubkeyAuthentication yes    # 启用公钥认证
PasswordAuthentication no   # 禁用密码认证(可选,需提前配置密钥)

保存后重启SSH服务:

sudo systemctl restart sshd

二、Nginx安全配置

1. 隐藏版本信息

编辑/etc/nginx/nginx.conf,在http块中添加:

server_tokens off;

此设置会隐藏Nginx版本号,减少攻击者针对性利用漏洞的风险。

2. 限制HTTP方法

server块中添加规则,仅允许必要的HTTP方法(GET、HEAD、POST),拒绝其他危险方法(如PUT、DELETE):

if ($request_method !~ ^(GET|HEAD|POST)$ ) {
    return 444;  # 直接关闭连接
}

3. 配置请求速率限制

防止CC攻击或资源耗尽,通过limit_req_zone限制单个IP的请求频率:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;  # 10个请求/秒
    server {
        location / {
            limit_req zone=one burst=20 nodelay;  # 允许突发20个请求
        }
    }
}

4. 强制HTTPS(可选但推荐)

使用Let’s Encrypt免费证书部署HTTPS,加密客户端与服务器之间的通信:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com  # 替换为你的域名

证书会自动续期,无需手动操作。

5. 限制资源使用

/etc/nginx/nginx.confevents块中调整连接数,避免单个IP占用过多资源:

events {
    worker_connections 1024;  # 每个worker的最大连接数
    use epoll;                # 高性能事件模型
}

三、MySQL/MariaDB安全设置

1. 运行安全脚本

安装完成后,执行mysql_secure_installation脚本,完成以下关键操作:

  • 设置root账户强密码;
  • 删除匿名用户;
  • 禁止root远程登录;
  • 删除测试数据库;
  • 重新加载权限表。

2. 创建专用数据库用户

避免使用root账户管理数据库,创建专用用户并授予最小必要权限:

CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON yourdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;

3. 配置SSL加密(可选)

若需加密数据库传输,可配置MySQL使用SSL证书:

  • 生成自签名证书(或使用CA颁发的证书);
  • 编辑/etc/mysql/mysql.conf.d/mysqld.cnf,添加SSL配置:
[mysqld]
ssl-ca=/path/to/ca.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem

重启MySQL服务使配置生效:

sudo systemctl restart mysql

4. 定期更新与维护

保持MySQL为最新版本,定期检查日志(如/var/log/mysql/error.log)排查异常:

sudo apt update && sudo apt upgrade mysql-server -y

四、PHP安全配置

1. 调整PHP错误报告

生产环境中关闭详细错误信息,避免泄露敏感路径或代码:
编辑/etc/php/7.4/fpm/php.ini(根据PHP版本调整路径):

display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED

2. 禁用危险函数

禁止执行可能被滥用的函数(如execsystemeval等):

disable_functions = eval,exec,system,passthru,shell_exec,popen,curl_exec,base64_decode

3. 限制文件上传

防止恶意文件上传(如PHP木马),设置上传文件大小限制并禁止执行上传目录中的脚本:

upload_max_filesize = 2M      # 最大上传文件大小
post_max_size = 8M            # 最大POST数据大小
file_uploads = On             # 允许文件上传

在Nginx配置中添加规则,拒绝上传目录中的PHP执行:

location ~* ^/uploads/.*\.(php|php5|phtml)$ {
    deny all;
}

4. 配置会话安全

增强会话安全性,防止会话劫持:

session.cookie_httponly = On    # 禁止JavaScript访问cookie
session.cookie_secure = On      # 仅通过HTTPS传输cookie
session.gc_maxlifetime = 1440   # 会话有效期(分钟)

5. 启用OPcache

提升PHP性能的同时,减少源代码暴露风险:

[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

6. 使用AppArmor限制PHP权限

通过AppArmor限制PHP-FPM进程的访问范围,防止越权操作:

sudo aa-status                  # 查看AppArmor状态
sudo aa-enforce /etc/apparmor.d/usr.sbin.php-fpm  # 启用PHP-FPM的AppArmor配置

五、日常安全维护

  • 定期备份:使用tarrsync备份Nginx配置、网站数据、数据库,存储到异地或云存储;
  • 监控日志:使用fail2ban防止暴力破解,监控/var/log/auth.log(SSH)、/var/log/nginx/error.log(Nginx)、/var/log/mysql/error.log(MySQL)等日志文件;
  • 最小权限原则:确保网站文件和目录的权限合理(如www-data:www-data用户组,目录权限755,文件权限644)。

通过以上步骤,可显著提升Ubuntu环境下LNMP架构的安全性,防范常见的网络攻击(如SQL注入、XSS、暴力破解等)。安全是持续过程,需定期审查配置并及时更新补丁。

0