searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

服务器SSH安全加固:密钥登录与Fail2ban配置实战指南

2025-08-25 09:01:37
1
0

一、密钥认证:彻底消除密码泄露风险

1.1 传统密码登录的隐患
密码认证存在两大致命缺陷:

  • 弱密码易被暴力破解:即使设置复杂密码,仍可能被字典攻击或GPU加速破解。
  • 密钥泄露风险:密码可能通过钓鱼邮件、键盘记录器等方式泄露。

1.2 密钥认证原理
密钥对由公钥(Public Key)私钥(Private Key)组成,公钥存储在服务器,私钥由用户保管。认证时,服务器通过公钥加密随机数,用户需用私钥解密并返回哈希值验证身份。整个过程无需传输密码,且私钥泄露风险远低于密码。

1.3 实战步骤
步骤1:生成密钥对

bash
ssh-keygen -t ed25519 -C "your_email@example.com" # 推荐使用ED25519算法

生成的文件默认位于~/.ssh/id_ed25519(私钥)和~/.ssh/id_ed25519.pub(公钥)。

步骤2:将公钥上传至服务器

bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip # 自动添加到~/.ssh/authorized_keys

或手动追加公钥内容至服务器~/.ssh/authorized_keys文件。

步骤3:禁用密码认证
编辑服务器SSH配置文件/etc/ssh/sshd_config

ini
PasswordAuthentication no # 禁用密码登录
ChallengeResponseAuthentication no # 禁用键盘交互认证
PubkeyAuthentication yes # 启用公钥认证

重启SSH服务:

bash
systemctl restart sshd # 或 service ssh restart

1.4 高级防护措施

  • 私钥加密:使用ssh-keygen -p为私钥设置密码,即使私钥文件泄露也无法直接使用。
  • 限制密钥权限:确保~/.ssh目录权限为700,私钥文件为600:
    bash
    chmod 700 ~/.ssh && chmod 600 ~/.ssh/*
     

二、Fail2ban:动态防御暴力破解

2.1 Fail2ban的作用
Fail2ban通过监控系统日志(如/var/log/auth.log),识别异常登录行为(如多次失败尝试),并自动封禁攻击者IP。与静态防火墙规则相比,其优势在于实时响应自适应防护

2.2 安装与配置
步骤1:安装Fail2ban

bash
# Debian/Ubuntu
apt install fail2ban
 
# CentOS/RHEL
yum install fail2ban

步骤2:创建SSH专用配置
复制默认配置文件并修改:

bash
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

编辑jail.local,启用SSH防护:

ini
[sshd]
enabled = true
port = ssh # 或指定端口如2222
filter = sshd
logpath = /var/log/auth.log # 根据系统调整(CentOS为/var/log/secure)
maxretry = 3 # 允许3次失败尝试
bantime = 86400 # 封禁24小时(单位:秒)
findtime = 600 # 在10分钟内检测

步骤3:启动服务

bash
systemctl enable --now fail2ban

2.3 高级优化技巧

  • 自定义白名单:避免误封合法IP,在jail.local中添加:
    ini
    [DEFAULT]
    ignoreip = 192.168.1.0/24 127.0.0.1 # 允许内网和本地IP
  • 邮件告警:通过action配置发送封禁通知(需安装sendmailpostfix)。
  • 动态调整策略:针对持续攻击的IP,可修改bantime为指数增长(如首次24小时,第二次1周)。

三、综合加固:多层次防御体系

3.1 端口修改与访问限制

  • 修改SSH默认端口(如2222),减少自动化扫描风险。
  • 使用tcpwrapper限制访问IP:
    编辑/etc/hosts.allow/etc/hosts.deny,仅允许特定IP访问SSH端口。

3.2 日志审计与定期检查

  • 定期分析/var/log/auth.log,关注异常登录记录。
  • 使用goaccessELK搭建日志分析平台,实现可视化监控。

3.3 定期更新与备份

  • 保持SSH服务(OpenSSH)和系统补丁最新。
  • 备份~/.ssh/authorized_keys和Fail2ban配置,避免误操作导致锁定。

结语
通过密钥认证和Fail2ban的组合使用,可构建起事前预防、事中拦截、事后审计的完整SSH安全体系。实际环境中,还需结合防火墙规则、双因素认证(2FA)等手段进一步强化。安全是一个持续优化的过程,建议定期评估服务器暴露面,及时调整防护策略。

0条评论
0 / 1000
窝补药上班啊
1252文章数
4粉丝数
窝补药上班啊
1252 文章 | 4 粉丝
原创

服务器SSH安全加固:密钥登录与Fail2ban配置实战指南

2025-08-25 09:01:37
1
0

一、密钥认证:彻底消除密码泄露风险

1.1 传统密码登录的隐患
密码认证存在两大致命缺陷:

  • 弱密码易被暴力破解:即使设置复杂密码,仍可能被字典攻击或GPU加速破解。
  • 密钥泄露风险:密码可能通过钓鱼邮件、键盘记录器等方式泄露。

1.2 密钥认证原理
密钥对由公钥(Public Key)私钥(Private Key)组成,公钥存储在服务器,私钥由用户保管。认证时,服务器通过公钥加密随机数,用户需用私钥解密并返回哈希值验证身份。整个过程无需传输密码,且私钥泄露风险远低于密码。

1.3 实战步骤
步骤1:生成密钥对

bash
ssh-keygen -t ed25519 -C "your_email@example.com" # 推荐使用ED25519算法

生成的文件默认位于~/.ssh/id_ed25519(私钥)和~/.ssh/id_ed25519.pub(公钥)。

步骤2:将公钥上传至服务器

bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip # 自动添加到~/.ssh/authorized_keys

或手动追加公钥内容至服务器~/.ssh/authorized_keys文件。

步骤3:禁用密码认证
编辑服务器SSH配置文件/etc/ssh/sshd_config

ini
PasswordAuthentication no # 禁用密码登录
ChallengeResponseAuthentication no # 禁用键盘交互认证
PubkeyAuthentication yes # 启用公钥认证

重启SSH服务:

bash
systemctl restart sshd # 或 service ssh restart

1.4 高级防护措施

  • 私钥加密:使用ssh-keygen -p为私钥设置密码,即使私钥文件泄露也无法直接使用。
  • 限制密钥权限:确保~/.ssh目录权限为700,私钥文件为600:
    bash
    chmod 700 ~/.ssh && chmod 600 ~/.ssh/*
     

二、Fail2ban:动态防御暴力破解

2.1 Fail2ban的作用
Fail2ban通过监控系统日志(如/var/log/auth.log),识别异常登录行为(如多次失败尝试),并自动封禁攻击者IP。与静态防火墙规则相比,其优势在于实时响应自适应防护

2.2 安装与配置
步骤1:安装Fail2ban

bash
# Debian/Ubuntu
apt install fail2ban
 
# CentOS/RHEL
yum install fail2ban

步骤2:创建SSH专用配置
复制默认配置文件并修改:

bash
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

编辑jail.local,启用SSH防护:

ini
[sshd]
enabled = true
port = ssh # 或指定端口如2222
filter = sshd
logpath = /var/log/auth.log # 根据系统调整(CentOS为/var/log/secure)
maxretry = 3 # 允许3次失败尝试
bantime = 86400 # 封禁24小时(单位:秒)
findtime = 600 # 在10分钟内检测

步骤3:启动服务

bash
systemctl enable --now fail2ban

2.3 高级优化技巧

  • 自定义白名单:避免误封合法IP,在jail.local中添加:
    ini
    [DEFAULT]
    ignoreip = 192.168.1.0/24 127.0.0.1 # 允许内网和本地IP
  • 邮件告警:通过action配置发送封禁通知(需安装sendmailpostfix)。
  • 动态调整策略:针对持续攻击的IP,可修改bantime为指数增长(如首次24小时,第二次1周)。

三、综合加固:多层次防御体系

3.1 端口修改与访问限制

  • 修改SSH默认端口(如2222),减少自动化扫描风险。
  • 使用tcpwrapper限制访问IP:
    编辑/etc/hosts.allow/etc/hosts.deny,仅允许特定IP访问SSH端口。

3.2 日志审计与定期检查

  • 定期分析/var/log/auth.log,关注异常登录记录。
  • 使用goaccessELK搭建日志分析平台,实现可视化监控。

3.3 定期更新与备份

  • 保持SSH服务(OpenSSH)和系统补丁最新。
  • 备份~/.ssh/authorized_keys和Fail2ban配置,避免误操作导致锁定。

结语
通过密钥认证和Fail2ban的组合使用,可构建起事前预防、事中拦截、事后审计的完整SSH安全体系。实际环境中,还需结合防火墙规则、双因素认证(2FA)等手段进一步强化。安全是一个持续优化的过程,建议定期评估服务器暴露面,及时调整防护策略。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
1
0