Debian系统中LNMP安全设置指南
导读: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-nginx,sudo 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)。 - 限制请求大小:在
server或location块中添加client_max_body_size 20M;,防止大文件上传导致的DoS攻击。 - 隐藏Nginx版本信息:在
nginx.conf的http块中添加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/ssl,sudo 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配置:重启MySQL([mysqld] ssl-ca=/etc/mysql/ssl/mysql-cert.pem ssl-cert=/etc/mysql/ssl/mysql-cert.pem ssl-key=/etc/mysql/ssl/mysql-key.pemsudo 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 = Off,log_errors = On,将错误日志记录到/var/log/php_errors.log(需创建目录并设置权限),避免泄露敏感信息。 - 限制PHP-FPM访问:编辑
/etc/php/< version> /fpm/pool.d/www.conf,设置listen.owner = www-data、listen.group = www-data、listen.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.log、sudo tail -f /var/log/mysql/error.log、sudo tail -f /var/log/syslog实时查看系统与应用程序日志,及时发现异常行为。
8. 定期维护
- 备份数据:使用
rsync、tar或专业备份工具(如BorgBackup)定期备份网站文件(/var/www/html)、数据库(mysqldump -u appuser -p appdb > appdb_backup.sql),存储到异地或云存储。 - 更新证书:Let’s Encrypt证书有效期为90天,通过
sudo certbot renew --dry-run测试自动续期,确保证书不会过期。 - 漏洞扫描:使用
lynis(sudo apt install lynis)定期扫描系统漏洞,根据报告修复问题。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian系统中LNMP安全设置指南
本文地址: https://pptw.com/jishu/740743.html
