VPS安全加固教程2026:SSH安全与防暴力破解
前言
VPS服务器的安全问题是每个站长都必须重视的话题。根据安全研究机构的统计数据,每天都有数十万台服务器遭受暴力破解攻击。一旦服务器被攻破,不仅网站数据会泄露,还可能被用来发起DDoS攻击或传播恶意软件。
2026年的网络安全形势更加严峻,攻击手段层出不穷。传统的用户名+密码认证方式已经无法满足安全需求。我们需要采取多层次的安全加固措施,从SSH认证、防火墙、到入侵检测,全面提升服务器的安全性。
本文将详细介绍在VPS上进行安全加固的完整流程,包括SSH密钥认证、防暴力破解配置、Fail2Ban部署、以及其他实用的安全措施。这些措施组合使用,可以有效阻挡99%以上的网络攻击。
一、SSH安全认证配置
1.1 SSH密钥认证设置
相比密码认证,SSH密钥认证更加安全。公钥私钥机制使得暴力破解几乎不可能。
生成SSH密钥对(在本地执行):
# 生成RSA密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 或者生成Ed25519密钥(推荐,更安全且性能更好)
ssh-keygen -t ed25519 -C "your_email@example.com"
将公钥上传到服务器:
# 方法1:使用ssh-copy-id(推荐)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your_vps_ip
# 方法2:手动上传
# 复制公钥内容,添加到服务器的 ~/.ssh/authorized_keys 文件
在服务器上创建authorized_keys文件:
# 登录服务器
ssh user@your_vps_ip
# 创建.ssh目录
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 创建authorized_keys文件
nano ~/.ssh/authorized_keys
# 粘贴公钥内容,保存退出
# 设置正确权限
chmod 600 ~/.ssh/authorized_keys
1.2 禁用密码认证
密钥认证配置完成后,禁用密码认证:
# 编辑SSH配置文件
sudo nano /etc/ssh/sshd_config
修改以下配置项:
# 禁用密码认证
PasswordAuthentication no
# 禁用空密码
PermitEmptyPasswords no
# 禁用root登录(建议)
PermitRootLogin no
# 只允许特定用户登录(可选)
AllowUsers your_username
# 修改默认SSH端口(可选,增加安全性)
Port 2222
重启SSH服务:
# Ubuntu/Debian
sudo systemctl restart sshd
# CentOS/RHEL
sudo systemctl restart sshd
1.3 使用SSH Agent转发
如果需要跳板访问内网服务器:
# 在本地启动SSH Agent
eval "$(ssh-agent -s)"
# 添加私钥
ssh-add ~/.ssh/id_ed25519
# SSH Agent转发连接
ssh -A user@jump_server
二、防暴力破解配置
2.1 配置登录次数限制
通过PAM模块限制登录尝试次数:
# 编辑SSH配置
sudo nano /etc/security/limits.conf
添加以下内容:
# 限制登录尝试
* hard maxlogin 3
或者使用sshd内置的登录限制:
# 编辑SSH配置
sudo nano /etc/ssh/sshd_config
添加:
# 5分钟内最多3次尝试
MaxAuthTries 3
# 登录间隔
LoginGraceTime 60
2.2 Fail2Ban安装与配置
Fail2Ban是防止暴力破解的重要工具,可以自动封禁可疑IP地址。
安装Fail2Ban:
# Ubuntu/Debian
sudo apt update
sudo apt install fail2ban -y
# CentOS/RHEL
sudo yum install epel-release -y
sudo yum install fail2ban -y
配置Fail2Ban:
# 创建配置文件
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
修改以下配置:
[DEFAULT]
# 忽略的IP列表(自己的IP一定要添加)
ignoreip = 127.0.0.1 你的IP地址/32
# 封禁时间(秒)
bantime = 3600
# 时间窗口(秒)
findtime = 600
# 最大尝试次数
maxretry = 5
# SSH防暴力破解配置
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
启动Fail2Ban:
# 启动服务
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
# 查看状态
sudo fail2ban-client status
# 查看被封禁的IP
sudo fail2ban-client banned
2.3 自定义SSH防暴力破解规则
创建自定义过滤规则:
sudo nano /etc/fail2ban/filter.d/sshd-enhanced.conf
添加:
[Definition]
failregex = ^%(__prefix_line)s(?:error: PAM:)?authentication failure for .* from <HOST>$
^%(__prefix_line)sFailed (?:password|publickey) for .* from <HOST>(?: port \d+)?(?: ssh\d+)?$
^%(__prefix_line)smax authentication attempts exceeded for .* from <HOST>$
ignoreregex =
三、防火墙配置
3.1 UFW防火墙(Ubuntu)
# 安装UFW
sudo apt install ufw -y
# 添加规则
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# 启用防火墙(注意:一定要先开放SSH端口!)
sudo ufw enable
# 查看状态
sudo ufw status verbose
# 删除规则
sudo ufw delete allow 22/tcp
3.2.firewalld配置(CentOS)
# 启动firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld
# 添加规则
sudo firewall-cmd --permanent --add-port=22/tcp --zone=public
sudo firewall-cmd --permanent --add-port=80/tcp --zone=public
sudo firewall-cmd --permanent --add-port=443/tcp --zone=public
# 重新加载配置
sudo firewall-cmd --reload
# 查看状态
sudo firewall-cmd --list-all
# 移除规则
sudo firewall-cmd --permanent --remove-port=22/tcp --zone=public
3.3 iptables基础配置
如果需要更细粒度的控制:
# 清空现有规则
sudo iptables -F
sudo iptables -X
# 默认策略:拒绝所有入站
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# 允许本地回环
sudo iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许SSH(指定你的IP更安全)
sudo iptables -A INPUT -p tcp --dport 22 -s 你的IP地址 -j ACCEPT
# 允许HTTP/HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 保存规则
sudo iptables-save > /etc/iptables/rules.v4
四、账户安全加固
4.1 密码策略
安装密码复杂度插件:
# Ubuntu/Debian
sudo apt install libpam-pwquality -y
# CentOS/RHEL(默认已安装)
配置密码复杂度:
sudo nano /etc/security/pwquality.conf
修改配置:
# 最小密码长度
minlen = 12
# 至少包含一个大写字母
ucredit = -1
# 至少包含一个小写字母
lcredit = -1
# 至少包含一个数字
dcredit = -1
# 至少包含一个特殊字符
ocredit = -1
设置密码过期策略:
# 编辑密码策略
sudo nano /etc/login.defs
修改:
# 密码最大有效期(天)
PASS_MAX_DAYS 90
# 密码最小有效期(天)
PASS_MIN_DAYS 7
# 密码过期警告(天)
PASS_WARN_AGE 14
4.2 禁用不必要的账户
# 查看所有用户
cat /etc/passwd
# 锁定账户(不影响已登录用户)
sudo passwd -l username
# 解锁账户
sudo passwd -u username
4.3 sudo权限管理
# 编辑sudo配置
sudo visudo
# 限制特定用户使用sudo
username ALL=(ALL:ALL) ALL
# 不需要密码(生产环境不推荐)
username ALL=(ALL) NOPASSWD: ALL
五、系统安全加固
5.1 内核参数优化
加固系统内核:
sudo nano /etc/sysctl.conf
添加:
# 禁止IP转发(如果不是路由器)
net.ipv4.ip_forward = 0
# 禁止ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# 禁止源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# 启用SYN Cookie防止SYN flood攻击
net.ipv4.tcp_syncookies = 1
# 禁止ping请求
net.ipv4.icmp_echo_ignore_all = 1
# 启用RPCbind服务安全
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
应用配置:
sudo sysctl -p
5.2 文件权限加固
# 检查关键文件权限
ls -la /etc/passwd
ls -la /etc/shadow
ls -la /etc/group
# 确保安全
chmod 644 /etc/passwd
chmod 000 /etc/shadow
chmod 644 /etc/group
5.3 禁用不必要的服务
# 查看运行中的服务
systemctl list-units --type=service --state=running
# 禁用不需要的服务
sudo systemctl disableService-name
# 常见需要禁用的服务
sudo systemctl disable telnet.socket
sudo-systemctl disable cups.service
六、日志监控与告警
6.1 关键日志文件
常用日志位置:
| 日志 | 路径 | 说明 |
|---|---|---|
| SSH登录 | /var/log/auth.log | 登录尝试记录 |
| 系统日志 | /var/log/syslog | 系统事件 |
| 认证日志 | /var/log/secure | 认证相关信息 |
| Nginx | /var/log/nginx/access.log | 网站访问 |
查看登录失败记录:
# 查看失败的SSH登录尝试
grep "Failed password" /var/log/auth.log
# 查看最近的登录记录
last
lastlog
# 查看当前登录用户
who
6.2 日志告警脚本
创建登录异常告警脚本:
#!/bin/bash
# login_alert.sh
LOG_FILE="/var/log/auth.log"
ALERT_EMAIL="admin@example.com"
# 检查过去1小时内的失败登录
FAILED_COUNT=$(grep "Failed password" $LOG_FILE | grep "$(date -d '1 hour ago' +'%b %d %H')" | wc -l)
if [ $FAILED_COUNT -gt 10 ]; then
echo "检测到过去1小时内有 $FAILED_COUNT 次失败登录尝试!" | \
mail -s "[警告] 服务器登录异常" $ALERT_EMAIL
fi
添加到crontab:
crontab -e
# 每小时检查
0 * * * * /usr/local/bin/login_alert.sh >> /var/log/alert.log 2>&1
注意事项
- 开启双重认证:考虑使用Google Authenticator或YubiKey
- 定期备份配置:将安全配置文件备份到安全的位置
- 测试后再部署:在测试环境验证后再应用到生产服务器
- 记录操作日志:所有配置变更都要有记录,便于审计
- 保持更新:及时更新系统和软件包,修补安全漏洞
总结
通过本文的学习,您应该已经掌握:
1. SSH密钥认证的配置与使用方法
2. 密码认证的安全替代方案
3. Fail2Ban的安装与配置
4. 防火墙的基本配置
5. 系统账户安全管理
6. 日志监控与异常告警
关键要点回顾:
- 优先使用SSH密钥认证,禁用密码登录
- 部署Fail2Ban自动封禁攻击者IP
- 配置防火墙只开放必要的端口
- 启用密码��杂��要求
- 定期检查登录日志,发现异常及时处理
服务器安全是一个持续的过程。建议将本文与《VPS监控资源使用教程2026》结合,实现全面的服务器安全监控体系。
相关文章推荐
如果您对VPS安全和系统管理感兴趣,以下文章可能对您有帮助:
- VPS监控资源使用教程2026:Zabbix/Prometheus监控搭建 - 实时监控服务器安全状态
- VPS配置防火墙规则教程2026:iptables与firewalld详解 - 深入学习防火墙配置
- VPS定时任务设置教程2026:crontab配置与自动化任务 - 实现安全任务自动化
- VPS搭建网站教程2026:LNMP环境搭建与配置 - 在安全环境中部署网站
- VPS安装Docker教程2026:容器化部署完整指南 - Docker容器安全配置

评论(0)