LNMP在Debian上如何进行安全防护
导读:系统层安全强化 全面更新系统与软件:定期执行sudo apt update && sudo apt upgrade,确保Debian系统、Nginx、MySQL、PHP及所有依赖组件均为最新版本,及时修补已知安全漏洞。 设...
系统层安全强化
- 全面更新系统与软件:定期执行
sudo apt update & & sudo apt upgrade,确保Debian系统、Nginx、MySQL、PHP及所有依赖组件均为最新版本,及时修补已知安全漏洞。 - 设置严格防火墙策略:安装
ufw(Uncomplicated Firewall)并启用,仅允许必要端口(如HTTP 80/tcp、HTTPS 443/tcp、SSH 22/tcp、MySQL 3306/tcp)的入站流量,拒绝其他未授权连接:sudo ufw allow 80/tcp; sudo ufw allow 443/tcp; sudo ufw allow 22/tcp; sudo ufw enable。 - 禁用root远程登录与配置SSH密钥:编辑
/etc/ssh/sshd_config,设置PermitRootLogin no(禁用root远程登录)、PasswordAuthentication no(禁用密码认证),并添加SSH密钥认证(将公钥添加至~/.ssh/authorized_keys),最后重启SSH服务:sudo systemctl restart sshd。 - 使用强密码策略:安装
libpam-pwquality工具,编辑/etc/security/pwquality.conf,设置minlen=12(密码最小长度12位)、dcredit=-1(至少1个小写字母)、ucredit=-1(至少1个大写字母)、ocredit=-1(至少1个特殊字符),强制用户使用复杂密码。
Nginx安全配置
- 隐藏版本号与启用HTTPS:编辑
/etc/nginx/nginx.conf,在server块中添加server_tokens off;(隐藏Nginx版本号);使用Let’s Encrypt获取免费SSL证书,配置Nginx强制跳转HTTPS(将HTTP 80端口的请求重定向至HTTPS 443端口)。 - 添加安全HTTP头部:在Nginx配置文件的
server块中添加以下头部,防范XSS、点击劫持等攻击:add_header X-Content-Type-Options "nosniff"; add_header X-Frame-Options "SAMEORIGIN"; add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.example.com; style-src 'self' 'unsafe-inline' https://cdn.example.com; img-src 'self' data: https://cdn.example.com; ";。 - 限制请求大小与连接速度:在
nginx.conf的http块中设置client_max_body_size 2M;(限制上传文件大小不超过2MB),在server块中添加limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;(限制每个IP每秒最多10个请求),并在location块中应用limit_req zone=req_limit_per_ip burst=20 nodelay;(突发请求限制)。 - 禁用不必要的模块:编译Nginx时通过
--without-http_autoindex_module、--without-http_geo_module等参数禁用不需要的模块(如自动索引、地理定位),减少潜在攻击面。
MySQL/MariaDB安全配置
- 安全初始化与权限控制:安装完成后运行
sudo mysql_secure_installation,完成移除匿名用户、禁止root远程登录、移除测试数据库等操作;编辑MySQL配置文件(/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf),设置bind-address = 127.0.0.1(仅允许本地连接)。 - 最小化用户权限:为Web应用创建专用数据库用户(如
appuser),并仅授予其必要的权限(如SELECT、INSERT、UPDATE、DELETE),避免使用root用户:CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword123'; GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'appuser'@'localhost'; FLUSH PRIVILEGES;。 - 启用安全日志:在MySQL配置文件中设置
general_log = 1(开启通用查询日志)、slow_query_log = 1(开启慢查询日志),并指定日志路径(如general_log_file = /var/log/mysql/mysql.log、slow_query_log_file = /var/log/mysql/slow.log),便于监控异常查询。
PHP安全配置
- 修改php.ini关键参数:编辑
/etc/php/7.4/fpm/php.ini(根据PHP版本调整路径),设置expose_php = Off(隐藏PHP版本信息)、display_errors = Off(关闭错误显示,防止泄露敏感信息)、log_errors = On(开启错误日志,记录至/var/log/php_errors.log)、memory_limit = 128M(限制内存使用)、max_execution_time = 30(限制脚本执行时间)、file_uploads = On(允许文件上传,但需限制大小)。 - 使用Open_basedir限制文件访问:在PHP-FPM池配置文件(如
/etc/php/7.4/fpm/pool.d/www.conf)中添加php_admin_value[open_basedir] = /var/www/html:/tmp/,限制PHP进程只能访问/var/www/html(网站根目录)和/tmp/(临时目录),防止非法文件访问。 - 禁用危险函数:在
php.ini中设置disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,禁用可能被用于执行系统命令的危险函数,降低代码执行攻击风险。
监控与维护
- 日志监控与分析:使用
Logwatch(sudo apt install logwatch)每日生成系统日志报告,或使用Fail2Ban(sudo apt install fail2ban)监控Nginx、SSH日志,自动封禁频繁尝试登录的IP地址(如sudo fail2ban-client set nginx-http-auth banip 192.168.1.100)。 - 数据备份与恢复:定期使用
rsync或tar备份网站数据(/var/www/html)和数据库(mysqldump -u appuser -p appdb > appdb_backup.sql),并将备份文件存储至异地(如云存储),测试恢复流程以确保数据可恢复。 - 定期安全审计:使用
lynis(sudo apt install lynis)进行系统安全审计,检查系统配置漏洞;或使用OpenVAS(开源漏洞扫描工具)扫描服务器,及时发现并修复潜在安全问题。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: LNMP在Debian上如何进行安全防护
本文地址: https://pptw.com/jishu/745049.html
