7招锁死SSH:从端口伪装到Fail2ban,教你把暴力破解挡在门外
从密码的10^8种可能性提升到2048位RSA密钥的2^2048种可能性,几乎不可能被暴力破解。选择端口时避免使用常见服务端口(如80、443、3306等),推荐使用4位数端口。配置后,任何IP在10分钟内尝试登录失败3次,将被自动封禁1小时。登录时需要输入手机APP生成的6位动态验证码,安全性大幅提升。Fail2ban是一个实时监控和自动封禁恶意IP的神器。固定办公网络环境,或通过VPN访问的场
方法一:修改默认SSH端口 🔧
这是最基础但最有效的防护手段之一。
# 编辑SSH配置文件
sudo vim /etc/ssh/sshd_config
# 修改端口号(建议使用1024-65535之间的端口)
Port 2022
# 重启SSH服务
sudo systemctl restart sshd
为什么有效?
-
• 99%的自动化攻击工具只扫描默认22端口
-
• 仅此一步就能过滤掉95%以上的暴力破解尝试
运维小贴士: 选择端口时避免使用常见服务端口(如80、443、3306等),推荐使用4位数端口。
方法二:禁用密码登录,启用密钥认证 🔐
密钥认证是目前最安全的SSH认证方式。
生成SSH密钥对
# 客户端生成密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 将公钥复制到服务器
ssh-copy-id -p 2022 user@server_ip
配置服务器禁用密码登录
# 编辑SSH配置
sudo vim /etc/ssh/sshd_config
# 禁用密码认证
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# 重启服务
sudo systemctl restart sshd
安全级别提升: 从密码的10^8种可能性提升到2048位RSA密钥的2^2048种可能性,几乎不可能被暴力破解。
方法三:配置Fail2ban动态防护 🛡️
Fail2ban是一个实时监控和自动封禁恶意IP的神器。
安装配置Fail2ban
# Ubuntu/Debian
sudo apt install fail2ban
# CentOS/RHEL
sudo yum install fail2ban
创建SSH防护配置
# 创建自定义配置文件
sudo vim /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2022
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
实战效果: 配置后,任何IP在10分钟内尝试登录失败3次,将被自动封禁1小时。
常用管理命令
# 查看封禁状态
sudo fail2ban-client status sshd
# 手动解封IP
sudo fail2ban-client set sshd unbanip 192.168.1.100
# 查看封禁日志
sudo fail2ban-client get sshd banip
方法四:设置SSH登录白名单 📝
通过iptables或云服务商安全组限制SSH访问来源。
使用iptables配置
# 清空现有规则(谨慎操作)
sudo iptables -F
# 允许本地访问
sudo iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 只允许特定IP访问SSH
sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 2022 -j ACCEPT
# 拒绝其他SSH连接
sudo iptables -A INPUT -p tcp --dport 2022 -j DROP
# 保存规则
sudo iptables-save > /etc/iptables/rules.v4
适用场景: 固定办公网络环境,或通过VPN访问的场景。
方法五:启用双因子认证(2FA) 🔒
即使密钥被泄露,2FA也能提供额外保护层。
安装Google Authenticator
# Ubuntu/Debian
sudo apt install libpam-google-authenticator
# CentOS/RHEL
sudo yum install google-authenticator
配置2FA
# 运行配置向导
google-authenticator
# 编辑PAM配置
sudo vim /etc/pam.d/sshd
# 添加以下行
auth required pam_google_authenticator.so
修改SSH配置
sudo vim /etc/ssh/sshd_config
# 启用挑战响应认证
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
用户体验: 登录时需要输入手机APP生成的6位动态验证码,安全性大幅提升。
方法六:配置SSH连接限制 ⚡
通过限制连接数和超时时间,降低暴力破解成功率。
sudo vim /etc/ssh/sshd_config
# 限制最大连接数
MaxSessions 3
MaxStartups 3:30:10
# 设置连接超时
ClientAliveInterval 300
ClientAliveCountMax 2
# 限制登录时间
LoginGraceTime 30
# 限制用户
AllowUsers admin operator
DenyUsers root guest
# 重启服务
sudo systemctl restart sshd
参数说明:
-
•
MaxSessions
: 单个连接的最大会话数 -
•
MaxStartups
: 并发未认证连接的最大数量 -
•
ClientAliveInterval
: 服务器向客户端发送心跳的间隔 -
•
LoginGraceTime
: 用户登录的最长时间
方法七:部署SSH蜜罐监控 🍯
高级防护手段,用于监控和分析攻击行为。
使用Cowrie蜜罐
# 克隆项目
git clone https://github.com/cowrie/cowrie.git
cd cowrie
# 安装依赖
pip install -r requirements.txt
# 配置蜜罐
cp etc/cowrie.cfg.dist etc/cowrie.cfg
vim etc/cowrie.cfg
# 修改配置
[ssh]
listen_endpoints = tcp:2222:interface=0.0.0.0
监控脚本示例
#!/bin/bash
# 实时监控SSH登录尝试
tail -f /var/log/auth.log | while read line; do
if echo "$line" | grep -q "Failed password"; then
ip=$(echo "$line" | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')
echo "$(date): 检测到暴力破解尝试,来源IP: $ip" >> /var/log/ssh_attacks.log
# 发送告警(可接入钉钉、企业微信等)
curl -X POST "https://your-webhook-url" \
-d "{'text': 'SSH攻击告警: $ip 正在尝试暴力破解'}"
fi
done
🎯 终极安全配置模板
基于以上方法,这是我在生产环境中使用的SSH终极安全配置:
# /etc/ssh/sshd_config 最佳实践配置
# 基础安全配置
Port 2022
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
# 认证配置
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
PermitRootLogin no
AuthenticationMethods publickey
# 连接限制
MaxAuthTries 3
MaxSessions 3
MaxStartups 3:30:10
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
# 用户限制
AllowUsers admin operator
DenyUsers root guest nobody
# 其他安全选项
X11Forwarding no
AllowTcpForwarding no
GatewayPorts no
PermitTunnel no
Banner /etc/ssh/banner.txt
更多推荐
所有评论(0)