防止SSH暴力破解

防止SSH暴力破解,增加系统安全性

Posted by Wu on June 27, 2020

1. 创建root权限的用户

使用非root用户登录SSH,增加用户名破解难度

useradd -p `openssl passwd -1 -salt 'haha' 123456` -u 0 -o -g root -G root -s /bin/bash -d /home/jack jack

命令解释:
useradd 添加用户
-p `openssl passwd -1 -salt 'haha' 123456` 这个里面的指的是设置用户的密码,里面的haha差不多是密钥之类的,可以随便写,123456是明文密码
-u 0 -o 添加一个uid为 0的用户 就相对于root级别的
-g root -G root 将用户添加到root组
-s /bin/bash 指定新建用户的shell路径
-d /home/jack 新建用户的主目录,可自定义
jack 新建的用户的用户名

125156_0Jkkru

2. 使用密钥登录

这里我直接使用的 root 下面 .ssh 的密钥,不生成新密钥对

之前一篇 SSH密钥登录Linux云服务器 中讲述如何配置 SSH 密钥登录

su jack
cd /home/jack
mkdir -m 700 .ssh
touch .ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat </root/.ssh/id_rsa_cloud_server.pub >> ~/.ssh/authorized_keys

125944_2DVfKp

3. 修改 sshd_config 配置

修改 ssh 端口后,检查防火墙,服务器控制台,安全组等访问规则,进行相应的端口开放 这个配置是基于 SSH密钥登录Linux云服务器

修改 Port 22022 端口的取值范围是:0-65535
修改 MaxAuthTries 3 指定每个连接最大允许的认证次数
修改 MaxStartups 3 最大允许保持多少个未认证的连接
修改 LoginGraceTime 10 限制用户必须在指定的时限内认证成功,0 表示无限制
修改 PermitRootLogin yes 是否允许 root 登录 # 因为创建的是另一个root权限的账户,如果并非 root 权限,可以改成 no
修改 AllowUsers jack 允许通过远程访问的用户,多个用户以空格隔开,添加上刚刚的jack用户

# 修改配置
vim /etc/ssh/sshd_config

# 重启 sshd 服务 
systemctl restart sshd.service

测试jack用户登录 131506_paIe08 131607_ZJvmju

4. 使用Fail2ban

Fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽),如:当有人在试探你的HTTP、SSH、SMTP、FTP密码,只要达到你预设的次数,fail2ban就会调用防火墙屏蔽这个IP,而且可以发送e-mail通知系统管理员,是一款很实用、很强大的软件!

做到1,2,3步的话,你的 ssh 连接已经非常的安全了,除非你将密钥给别人了。但是总有人会窥视你的服务器,手动或自动的对你的服务器进行端口扫描,用户,密码的尝试。虽然这些访问都会被阻拦,但还是会留下log记录的。Fail2ban就可以解决将这些无效的恶意的连接阻挡在外,减少一点儿服务器资源消耗,让那些人知道咱也不是那么好破的。

fail2ban的github

fail2ban网站

4.1 安装Fail2ban

# 使用yum命令可以很方便的安装fail2ban程序包,不过需要先安装EPEL软件库:
yum install -y epel-release
# 安装好EPEL软件库之后需要检查一下系统更新
yum check-update
# 如果输出结果中有可更新的包,那么更新一下
yum update
# 安装fail2ban
yum install -y fail2ban

4.2 修改Fail2ban

Fail2ban 可以监控很多类型服务,这里我们暂时只开启 sshd 的

vim /etc/fail2ban/jail.conf 

[sshd]
enabled = true # 开启
mode    = aggressive # 模式
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 24h # 拉入黑名单24小时
findtime = 1h # 1小时内
maxretry = 3 # 错误次数

4.3 重启并加入开机服务

systemctl enable fail2ban.service # 加入开机项

systemctl start fail2ban.service # 启动服务

systemctl stop fail2ban.service # 停止服务

systemctl restart fail2ban.service # 重启服务

systemctl status fail2ban.service -l # 查看服务状态

4.4 fail2ban常用命令

fail2ban-client status # 查看Fail2ban监护状态

fail2ban-client status sshd # 查看SSH服务监护状态,能看到当前被禁IP

fail2ban-client set sshd addignoreip 192.168.111.111 # 在SSH监护服务忽略IP列表(白名单)中添加IP 192.168.111.111

fail2ban-client set sshd delignoreip 192.168.111.111 # 在SSH监护服务忽略IP列表(白名单)中删除IP 192.168.111.111

fail2ban-client set sshd unbanip 8.8.8.8 # fail2ban将IP加入黑名单

fail2ban-client set sshd unbanip 8.8.8.8 # fail2ban从黑名单中移除IP

tail -f /var/log/fail2ban.log # 查看fail2ban日志

212651_YCc4Xb

小尾巴

本文首次发布于 Wu Blog, 作者 @Wu ,转载请保留原文链接