零基础搭建数据泄露全方位防护方案,运维必备
数据泄露事件频发,很多站长或新手运维买来服务器后只装个面板就上线,结果网站被拖库、数据库被删,甚至服务器被拿去挖矿。
其实只要花半小时做好基础防护,就能挡住绝大多数攻击。
这篇教程我从零开始,带你在 Linux 服务器上搭建一套完整的数据泄露防护方案,每一步都给出命令和操作路径,你照着做就行。
准备工作:你需要一台干净的服务器
首先确认你有一台 Linux 服务器(CentOS 7/8、Ubuntu 20.04 或 Debian 11 都可以),并且用 root 账号登录。
如果装了宝塔面板,先通过 SSH 连接服务器,因为很多安全操作在面板里也能做,但命令行更彻底。
另外准备一个非 root 的普通用户,用于日常操作。
防火墙与端口控制:只开该开的门
服务器默认可能开放了大量端口,首先要做的是关闭所有不必要的端口,只保留 SSH(22)、HTTP(80)、HTTPS(443)以及你用的面板端口。
推荐使用 firewalld 或 iptables,这里用 firewalld 举例:
# 启动并设置开机自启
systemctl start firewalld
systemctl enable firewalld
# 移除默认的 public 区所有服务,再添加需要的
firewall-cmd --permanent --zone=public --remove-service=ssh
firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --permanent --zone=public --add-port=8888/tcp # 宝塔面板默认端口,按实际改
# 重新加载
firewall-cmd --reload
# 查看已经开放的端口和服务
firewall-cmd --zone=public --list-all
操作后,其他端口默认全部拒绝。
如果你的业务需要额外端口,再单独添加。
SSH 与文件权限:堵住最容易突破的口子
SSH 是服务器入口,很多攻击都从弱密码或默认端口入手。
先做三件事:禁止 root 直接登录、更换 SSH 端口、启用密钥登录。
编辑配置文件 /etc/ssh/sshd_config,修改或添加以下行:
Port 22022 # 把默认22换成其他端口
PermitRootLogin no # 禁止root直接登录
PasswordAuthentication no # 关闭密码登录(前提是已配置好密钥)
AllowUsers youruser # 只允许特定用户通过SSH
保存后重启 SSH 服务:systemctl restart sshd。
接着处理文件权限:网站目录和配置文件不能随意读写。
例如对于 Nginx 站点,执行:
chown -R www:www /var/www/html
find /var/www/html -type f -exec chmod 644 {} \;
find /var/www/html -type d -exec chmod 755 {} \;
# 数据库配置文件(如 wp-config.php)权限设为 600
chmod 600 /var/www/html/wp-config.php
数据库与自动防御:防拖库、防暴力破解
数据库是数据泄露的重灾区。
先修改 MySQL/MariaDB 默认端口和远程访问限制:
# 修改 MySQL 配置文件 /etc/my.cnf
[mysqld]
port=3307 # 避开默认端口
skip-networking # 如果不需要远程连接则启用
bind-address=127.0.0.1 # 只允许本地连接
重启数据库后,设置强密码并删除默认的 test 库。
然后部署 Fail2ban 自动封锁攻击 IP:
yum install -y epel-release # CentOS 要先装 EPEL
apt install -y fail2ban # Ubuntu/Debian 直接
systemctl start fail2ban
systemctl enable fail2ban
# 创建本地配置文件
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vim /etc/fail2ban/jail.local
# 在 [sshd] 区域启用,并设置 bantime=3600, maxretry=5
避坑指南:新手常犯的错误
- 防火墙配置后忘了放行自己:如果你远程修改 SSH 端口,一定要确保新端口已经在防火墙里放行,否则断开连接后就进不去了。建议先开第二个 SSH 会话测试。
- 文件权限改得太严导致网站无法写入:比如 644 对于某些需要写的目录(如上传目录)不够,可以单独给 uploads 目录 755。
- Fail2ban 误封自己:启动前先把本地 IP 加入白名单,在
/etc/fail2ban/jail.local的[DEFAULT]段添加ignoreip = 127.0.0.1/8 你的公网IP。 - 数据库连接池配置未更新:改端口后要更新网站配置文件中的数据库连接信息,否则网站会报错。
- 只防护不备份:数据泄露防护方案还要搭配自动备份到异地,否则被勒索后也没法恢复。
效果验证:怎么确认防护生效了?
做完所有步骤后,用下面方法验证防护是否到位:
- 端口扫描:在另一台机器上执行
nmap -p 1-65535 你的服务器IP,应该只看到你开放的端口,其余全是 filtered。 - SSH 暴力破解测试:故意用一个错误的密码连续登录 SSH 6 次,然后再次尝试,应该被 Fail2ban 拒绝连接。查看 Fail2ban 日志:
fail2ban-client status sshd。 - 数据库安全检查:尝试从外网连接 MySQL 新端口,应该被拒绝。本机连接本地端口正常。
- 文件权限验证:用普通用户尝试修改
/etc/shadow或站点配置文件,应该被禁止。
以上操作完成后,你的服务器已经具备了基础的防数据泄露能力。
当然,安全是个持续过程,建议每周检查一次日志,每月更新系统补丁。
如果遇到本文没覆盖的问题,欢迎留言交流。