Debian LNMP如何安全设置
导读:1. 系统基础安全加固 更新系统及软件:定期运行sudo apt update && sudo apt upgrade -y,确保Linux内核、Nginx、MySQL、PHP等组件为最新版本,修补已知安全漏洞。 设置强密...
1. 系统基础安全加固
- 更新系统及软件:定期运行
sudo apt update & & sudo apt upgrade -y
,确保Linux内核、Nginx、MySQL、PHP等组件为最新版本,修补已知安全漏洞。 - 设置强密码策略:安装
libpam-pwquality
工具,编辑/etc/security/pwquality.conf
,调整minlen=12
(密码最小长度)、dcredit=-1
(至少1个小写字母)、ucredit=-1
(至少1个大写字母)等参数,强制用户使用复杂密码。 - 禁用不必要的服务:通过
systemctl list-units --type service --state running
查看运行中的服务,禁用未使用的服务(如telnet
、ftp
),减少攻击面。
2. 防火墙配置(UFW)
- 安装与启用UFW:运行
sudo apt install ufw & & sudo ufw enable
,默认拒绝所有入站连接、允许所有出站连接。 - 允许必要端口:仅开放LNMP必需的端口,命令如下:
sudo ufw allow ssh # 远程管理 sudo ufw allow http # HTTP(80端口) sudo ufw allow https # HTTPS(443端口) sudo ufw allow mysql # MySQL(3306端口,默认仅本地访问)
- 限制SSH访问:若需远程管理,修改
/etc/ufw/before.rules
,在*filter
部分添加规则,仅允许特定IP访问SSH(如sudo ufw allow from 192.168.1.100 to any port 22
),降低暴力破解风险。
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
,关闭密码认证(PasswordAuthentication no
),提升登录安全性。
4. Nginx安全加固
- 禁用不必要的模块:编译Nginx时通过
--without-http_autoindex_module
、--without-http_geo_module
等参数禁用不常用模块(如自动索引、地理模块),减少潜在攻击点。 - 配置SSL/TLS:使用Let’s Encrypt免费证书(
sudo apt install certbot python3-certbot-nginx
),运行sudo certbot --nginx -d yourdomain.com
自动配置HTTPS,强制HTTP跳转HTTPS(在server
块中添加return 301 https://$host$request_uri;
)。优化SSL参数:编辑/etc/nginx/nginx.conf
,添加ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5;
,启用前向保密(PFS)。 - 限制请求大小:在
server
或location
块中设置client_max_body_size 20M;
,防止恶意用户上传超大文件导致DDoS攻击。 - 隐藏Nginx版本:在
nginx.conf
的server_tokens
指令中设置为off
(server_tokens off;
),避免泄露Nginx版本信息。
5. MySQL/MariaDB安全配置
- 运行安全脚本:安装完成后执行
sudo mysql_secure_installation
,设置root密码、移除匿名用户、禁止root远程登录、删除测试数据库。 - 限制远程访问:编辑
/etc/mysql/mysql.conf.d/mysqld.cnf
,将bind-address
设置为127.0.0.1
,仅允许本地连接;若需远程访问,通过GRANT
语句限制特定IP(如GRANT ALL PRIVILEGES ON database.* TO 'user'@'192.168.1.100' IDENTIFIED BY 'StrongPassword';
)。 - 使用SSL连接:生成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
),编辑mysqld.cnf
添加SSL配置(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 -u user -p
)。 - 定期更新密码:设置MySQL密码过期策略(
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword' PASSWORD EXPIRE INTERVAL 90 DAY;
),强制定期更换密码。
6. PHP安全设置
- 禁用危险函数:编辑
/etc/php/7.4/fpm/php.ini
(根据PHP版本调整),找到disable_functions
,添加exec,passthru,shell_exec,system
等危险函数,防止代码执行攻击。 - 限制资源使用:在
/etc/php/7.4/fpm/pool.d/www.conf
中调整pm.max_children
(如pm.max_children = 20
,根据服务器内存调整)、pm.start_servers
(如pm.start_servers = 5
),防止PHP进程占用过多资源导致服务器崩溃;设置request_terminate_timeout = 30s
,限制脚本执行时间,避免长时间运行。 - 隐藏PHP版本:编辑
/etc/php/7.4/fpm/php.ini
,设置expose_php = Off
,避免泄露PHP版本信息。 - 设置错误报告级别:在
php.ini
中设置display_errors = Off
(生产环境),log_errors = On
,将错误信息记录到/var/log/php_errors.log
,防止敏感信息泄露。
7. 日志监控与自动防护
- 安装Fail2Ban:运行
sudo apt install fail2ban
,创建/etc/fail2ban/jail.local
,添加以下配置针对SSH和Nginx的暴力破解防护:
重启Fail2Ban([sshd] enabled = true maxretry = 3 bantime = 3600 [nginx-http-auth] enabled = true maxretry = 3 bantime = 3600
sudo systemctl restart fail2ban
),自动封禁多次尝试失败的IP。 - 定期审查日志:使用
Logwatch
(sudo apt install logwatch
)每日生成系统日志报告,或通过sudo tail -f /var/log/nginx/error.log
、sudo tail -f /var/log/mysql/error.log
实时监控Nginx和MySQL的错误日志,及时发现异常行为。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian LNMP如何安全设置
本文地址: https://pptw.com/jishu/731221.html