首页主机资讯Debian系统中LNMP安全设置指南

Debian系统中LNMP安全设置指南

时间2025-11-03 13:15:04发布访客分类主机资讯浏览787
导读:Debian系统中LNMP安全设置指南 1. 系统基础安全加固 更新系统与软件:定期运行sudo apt update && sudo apt upgrade -y,确保系统内核、Nginx、MySQL、PHP等组件为最新...

Debian系统中LNMP安全设置指南

1. 系统基础安全加固

  • 更新系统与软件:定期运行sudo apt update & & sudo apt upgrade -y,确保系统内核、Nginx、MySQL、PHP等组件为最新版本,修补已知安全漏洞。
  • 使用强密码策略:安装libpam-pwquality工具(sudo apt install libpam-pwquality),编辑/etc/security/pwquality.conf文件,设置minlen=12(密码最小长度)、dcredit=-1(至少1个小写字母)、ucredit=-1(至少1个大写字母)、ocredit=-1(至少1个特殊字符)等参数,强制用户使用复杂密码。
  • 禁用不必要的服务:通过systemctl list-units --type=service --state=running查看运行中的服务,禁用未使用的服务(如sudo systemctl disable bluetooth),减少攻击面。

2. 防火墙配置(UFW推荐)

  • 安装与启用UFW:运行sudo apt install ufw安装,sudo ufw enable启用防火墙。
  • 设置默认规则:默认拒绝所有入站连接(sudo ufw default deny incoming),允许所有出站连接(sudo ufw default allow outgoing)。
  • 允许必要端口:允许SSH(sudo ufw allow ssh,默认22端口,建议修改为其他端口)、HTTP(sudo ufw allow 80/tcp)、HTTPS(sudo ufw allow 443/tcp)、MySQL(sudo ufw allow from 127.0.0.1 to any port 3306,仅允许本地访问)、PHP-FPM(sudo ufw allow 9000/tcp,若使用Unix socket可省略)。
  • 查看与管理规则:通过sudo ufw status查看当前规则,sudo ufw delete < 规则编号> 删除不必要的规则,sudo ufw reload重载配置使更改生效。

3. SSH安全配置

  • 修改默认端口:编辑/etc/ssh/sshd_config文件,将Port 22改为其他端口(如Port 2222),减少暴力破解尝试。
  • 禁用Root登录:在sshd_config中设置PermitRootLogin no,禁止直接以root用户登录,使用普通用户+sudo提升权限。
  • 启用SSH密钥认证:生成密钥对(ssh-keygen -t rsa -b 4096),将公钥(id_rsa.pub)复制到服务器~/.ssh/authorized_keys文件中,在sshd_config中设置PasswordAuthentication no,禁用密码认证。
  • 重启SSH服务:运行sudo systemctl restart sshd使配置生效。

4. Nginx安全加固

  • 禁用不必要的模块:编译Nginx时通过--without-http_autoindex_module--without-http_geo_module等参数禁用不需要的模块(如自动索引、地理模块),减少潜在风险。
  • 配置SSL/TLS加密:使用Let’s Encrypt免费获取SSL证书(sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d yourdomain.com),编辑Nginx配置文件(/etc/nginx/sites-available/yourdomain.com),添加以下内容:
    server {
        
        listen 443 ssl;
        
        server_name yourdomain.com;
        
        ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
        
        ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
        
        ssl_protocols TLSv1.2 TLSv1.3;
        
        ssl_ciphers HIGH:!aNULL:!MD5;
    
        # 其他配置...
    }
    
    server {
        
        listen 80;
        
        server_name yourdomain.com;
        
        return 301 https://$host$request_uri;
    
    }
        
    
    测试配置(sudo nginx -t),重启Nginx(sudo systemctl restart nginx)。
  • 限制请求大小:在serverlocation块中添加client_max_body_size 20M; ,防止大文件上传导致的DoS攻击。
  • 隐藏Nginx版本信息:在nginx.confhttp块中添加server_tokens off; ,避免泄露Nginx版本号。

5. MySQL/MariaDB安全配置

  • 运行安全脚本:安装MariaDB后,运行sudo mysql_secure_installation,按照提示设置root密码、移除匿名用户、禁止root远程登录、移除测试数据库。
  • 限制远程访问:编辑/etc/mysql/my.cnf(或/etc/mysql/mysql.conf.d/mysqld.cnf),将bind-address设置为127.0.0.1,仅允许本地访问MySQL。
  • 创建专用数据库用户:避免使用root用户连接数据库,创建专用用户并授权(如CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword'; GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost'; FLUSH PRIVILEGES; )。
  • 配置SSL连接(可选):生成MySQL SSL证书(sudo mkdir /etc/mysql/sslsudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/mysql/ssl/mysql-key.pem -out /etc/mysql/ssl/mysql-cert.pem),编辑my.cnf添加SSL配置:
    [mysqld]
    ssl-ca=/etc/mysql/ssl/mysql-cert.pem
    ssl-cert=/etc/mysql/ssl/mysql-cert.pem
    ssl-key=/etc/mysql/ssl/mysql-key.pem
    
    重启MySQL(sudo systemctl restart mysql),客户端连接时指定SSL参数(mysql --ssl-ca=/etc/mysql/ssl/mysql-cert.pem --ssl-cert=/path/to/client-cert.pem --ssl-key=/path/to/client-key.pem -u appuser -p)。

6. PHP安全配置

  • 禁用危险函数:编辑/etc/php/< version> /fpm/php.ini(如/etc/php/7.4/fpm/php.ini),找到disable_functions参数,添加exec,passthru,shell_exec,system等危险函数,防止命令注入。
  • 调整资源限制:设置pm.max_children(如pm.max_children = 20,根据服务器内存调整)、memory_limit = 128M(限制单个PHP进程内存使用)、upload_max_filesize = 2M(限制上传文件大小)、post_max_size = 8M(限制POST数据大小),防止资源耗尽攻击。
  • 关闭错误显示:在php.ini中设置display_errors = Offlog_errors = On,将错误日志记录到/var/log/php_errors.log(需创建目录并设置权限),避免泄露敏感信息。
  • 限制PHP-FPM访问:编辑/etc/php/< version> /fpm/pool.d/www.conf,设置listen.owner = www-datalisten.group = www-datalisten.mode = 0660,确保Nginx(www-data用户)能访问PHP-FPM socket,同时限制其他用户访问。

7. 日志与监控

  • 安装监控工具:使用sudo apt install fail2ban logwatch安装Fail2ban(防止暴力破解)和Logwatch(日志分析)。
  • 配置Fail2ban:编辑/etc/fail2ban/jail.local,启用SSH防护([sshd] enabled = true),设置maxretry = 3(3次失败后封禁)、bantime = 3600(封禁1小时),重启Fail2ban(sudo systemctl restart fail2ban)。
  • 定期查看日志:通过sudo tail -f /var/log/nginx/error.logsudo tail -f /var/log/mysql/error.logsudo tail -f /var/log/syslog实时查看系统与应用程序日志,及时发现异常行为。

8. 定期维护

  • 备份数据:使用rsynctar或专业备份工具(如BorgBackup)定期备份网站文件(/var/www/html)、数据库(mysqldump -u appuser -p appdb > appdb_backup.sql),存储到异地或云存储。
  • 更新证书:Let’s Encrypt证书有效期为90天,通过sudo certbot renew --dry-run测试自动续期,确保证书不会过期。
  • 漏洞扫描:使用lynissudo apt install lynis)定期扫描系统漏洞,根据报告修复问题。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Debian系统中LNMP安全设置指南
本文地址: https://pptw.com/jishu/740743.html
Debian上LNMP与PHP版本兼容性问题 Debian SSH如何生成SSH密钥对

游客 回复需填写必要信息