LNMP环境下Ubuntu如何防止攻击
保持软件持续更新
定期更新Ubuntu系统、Nginx、MySQL、PHP及相关依赖至最新版本,及时修补已知安全漏洞。可通过sudo apt update &
&
sudo apt upgrade -y命令一键更新,建议开启unattended-upgrades实现自动更新。
强化SSH访问安全
- 修改默认端口:编辑
/etc/ssh/sshd_config,将Port 22改为非标准端口(如2222),减少暴力破解风险; - 禁用root登录:设置
PermitRootLogin no,禁止直接通过SSH登录root账户; - 启用公钥认证:配置
PubkeyAuthentication yes并禁用密码认证(PasswordAuthentication no),使用SSH密钥对登录; - 重启SSH服务使配置生效:
sudo systemctl restart sshd。
配置防火墙限制访问
使用UFW(Uncomplicated Firewall)限制入站/出站连接,仅允许必要端口:
- 允许SSH(自定义端口,如2222):
sudo ufw allow 2222/tcp; - 允许HTTP/HTTPS:
sudo ufw allow 'Nginx Full'; - 启用防火墙:
sudo ufw enable; - 默认拒绝未明确允许的连接:
sudo ufw default deny incoming。
优化Nginx配置
- 禁用不必要的模块:移除未使用的Nginx模块(如
autoindex),减少攻击面; - 设置安全HTTP头:在Nginx配置中添加
add_header X-Content-Type-Options "nosniff"; add_header X-Frame-Options "SAMEORIGIN"; add_header Content-Security-Policy "default-src 'self'; ",防范MIME类型嗅探、点击劫持等攻击; - 隐藏版本信息:修改
server_tokens off;,避免暴露Nginx版本; - 限制请求速率:通过
limit_req_zone和limit_req指令限制单个IP的请求频率(如1秒1次),防范DDoS/CC攻击。
加固MySQL/MariaDB安全
- 运行安全脚本:安装MySQL后执行
sudo mysql_secure_installation,完成设置强root密码、删除匿名用户、禁止远程root登录等操作; - 限制访问权限:仅允许信任的IP地址访问MySQL(如
GRANT ALL PRIVILEGES ON database.* TO 'user'@'trusted_ip' IDENTIFIED BY 'strong_password';); - 使用强密码:为所有数据库用户设置复杂且唯一的密码(包含大小写字母、数字、特殊字符);
- 强制加密连接:配置MySQL使用TLS(如
ssl-ca、ssl-cert、ssl-key参数),加密客户端与服务器间的通信。
安全配置PHP
- 禁用危险函数:编辑
/etc/php/{ version} /fpm/php.ini,设置disable_functions = eval,passthru,exec,system,chroot,scandir,shell_exec,proc_open,禁止执行危险系统命令; - 限制文件访问:使用
open_basedir限制PHP脚本只能访问指定目录(如/var/www/html:/tmp/),防止越权访问; - 关闭错误显示:设置
display_errors = Off,避免暴露服务器路径、数据库结构等敏感信息; - 禁用远程代码包含:设置
allow_url_include = Off,防止远程文件包含攻击。
使用Web应用防火墙(WAF)
部署ModSecurity等WAF,过滤恶意请求(如SQL注入、XSS攻击)。可通过sudo apt install libapache2-mod-security2安装(若使用Apache作为前端代理),或使用Nginx的ModSecurity模块,配置规则集(如OWASP Core Rule Set)。
启用HTTPS加密通信
使用Let’s Encrypt免费证书服务获取SSL证书,配置Nginx支持HTTPS:
- 安装Certbot:
sudo apt install certbot python3-certbot-nginx; - 获取证书:
sudo certbot --nginx -d yourdomain.com; - 自动续期:Certbot会自动添加续期任务,也可手动运行
sudo certbot renew --dry-run测试。
监控与日志管理
- 启用日志审计:定期检查Nginx(
/var/log/nginx/access.log/error.log)、MySQL(/var/log/mysql/error.log)、PHP(/var/log/php{ version} -fpm.log)的日志,使用fail2ban监控异常登录(如SSH暴力破解); - 使用监控工具:部署Prometheus+Grafana监控服务器性能(CPU、内存、磁盘)和安全状况(如异常连接数、请求频率),及时预警。
数据备份与恢复
定期备份网站数据(/var/www/html)和数据库(mysqldump -u root -p database_name >
backup.sql),将备份文件存储在异地(如云存储)或离线介质(如移动硬盘),测试备份恢复流程,确保安全事件发生时能快速恢复。
安全编码实践
开发Web应用时遵循安全编码规范:
- 验证用户输入:对表单数据(如用户名、密码)进行格式检查(如长度、字符类型),防止SQL注入(使用预编译语句)、XSS(输出转义);
- 使用参数化查询:避免直接拼接SQL语句(如
SELECT * FROM users WHERE username = '$username'); - 最小权限原则:数据库用户仅授予必要权限(如
SELECT、INSERT),避免使用root账户。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: LNMP环境下Ubuntu如何防止攻击
本文地址: https://pptw.com/jishu/735350.html
