2019/6/14 ―
此文章是关于有效防范SSH的暴力破解,此处使用DenyHosts和SSH密钥认证的方法进行防范。
DenyHosts
DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏蔽IP的功能。
实验环境:
kali linux 和 centos 7 两台Linux操作系统的主机。
这里准备了DenyHosts的压缩包。
链接:https://pan.baidu.com/s/1npQYI0l3H9dLt3-lcCZTOQ
提取码:u8p4
在Centos 7 上的操作
下载后,传到centos 7 中
解压
tar xzf DenyHosts-2.6.tar.gz
到这个目录下
cd DenyHosts-2.6
安装
python setup.py install
到这个目录下
cd /usr/share/denyhosts
创建配置文件
cp denyhosts.cfg-dist denyhosts.cfg
编辑这个文件
vi denyhosts.cfg 主要修改这个几个参数: DENY_THRESHOLD_INVALID = 5 ----> DENY_THRESHOLD_INVALID = 2 无效登录的用户登录2次锁定 DENY_THRESHOLD_VALID = 10 ----> DENY_THRESHOLD_INVALID = 3 普通用户登录3次锁定 DENY_THRESHOLD_ROOT = 1 ----> DENY_THRESHOLD_INVALID = 2 管理员root用户登录2次锁定
创建启动程序
cp daemon-control-dist daemon-control
改变程序的权限,确保只有管理员可以启动
chown root daemon-control chmod 700 daemon-control
开启服务
./daemon-control start
查看进程,是否开启DenyHosts
ps -elf | grep Denyhosts
kali linux 上进行ssh暴力破解的攻击
编辑字典密码
开始攻击
msfconsole use auxiliary/scanner/ssh/ssh_login show options set PASS_FILE password set RHOSTS 192.168.136.13 set RPORT 52201 set USERNAME root show options
发现没有攻击成功,说明denyhosts 及时锁定了kali linux 的登录测试。
在centos 7 上查看记录
cat /var/log/secure - - - 查看系统安全日志
SSH密钥认证
构建密钥对验证的ssh登录体系
第一种方法
在客户端操作,在客户端创建密钥对,保存私钥,然后将公钥发送给服务端。
第一步:创建密钥对
ssh-keygen 打完命令后,一直回车就可以 如果不想回车,就可以设置一下: 第一次输入是保存秘钥的文件路径 第二、三次是输入保护私钥的密码 私钥文件:id_rsa 公钥文件: id_rsa.pub
第二步:上传公钥文件
方法1:
目标为要远程的服务器 使用ssh-copy-id自动完成 ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.136.13 -p 52201
方法2:
在服务器上完成此操作: ls -a 找到.ssh这个目录 如果没有:可以创建目录: mkdir .ssh cd .ssh/ 到这个目录下 ls 找到authorized_keys这个文件 touch authorized_keys 如果没有,创建一个文件 chmod 600 /root/.ssh/authorized_keys 改变一下权限 将公钥信息导入公钥数据库 数据库文件:~/.ssh/authorized_keys cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
第四步:重启sshd服务,再次登录时将通过密钥对验证
systemctl restart sshd ssh -i ./id_rsa root@192.168.136.13 ./id_rsa 在秘钥位置连接 如果在家目录连接: ssh -i root/.ssh/id_rsa root@192.168.136.13
报错
/usr/bin/ssh-copy-id: ERROR: ssh_exchange_identification: read: Connection reset by peer
解决方法
echo “sshd: ALL” >> /etc/hosts.allow
第二种方法
有些细节参考上一种方法
在服务器端操作,在服务器上创建密钥对,安装公钥,然后将私钥发送给客户端。
第一步:在服务器上创建密钥对
ssh-keygen
第二步:在服务器上安装公钥
cat id_rsa.pub >> authorized_keys chmod 600 authorized_keys chmod 700 ~/.ssh
第三步:把私钥发送给客户端
第四步:重启sshd服务,再次登录时将通过密钥对验证
systemctl restart sshd ssh -i ./id_rsa root@192.168.136.13 -p 52201
OK,有什么问题,欢迎评论交流O(∩_∩)O~