当前位置:   article > 正文

Linux防暴力破解_jumpserver to the list of known hosts.\r\npermissi

jumpserver to the list of known hosts.\r\npermission denied, please try agai

一、暴力破解解决综合方案    

1、使用堡垒机登录(Jumpserver) 
2、ssh远程登录端口设置为5位数(不能超过65534)
3、sshd服务,直接编写脚本检查/var/log/secure 内登录失败次数超过某个阈值的ip并将它添加到/etc/hosts.deny(fail2ban的优点更多)
4、禁止root登录设置(PermitRootLogin yes修改为no)使用其他用户登陆并且拥有root用户权限。
5、将密码设置复杂,长度大于8位或者最好大于14位,密码的复杂度:由大小写字母以及字符和数字组成。 0-9  a-z  A-Z  @!#$%*. 等
6、使用fail2ban,起到登录失败多次后直接禁止某个时间段此ip登陆。

二、sshd服务通过脚本控制:

查看/var/log/secure 文件可以看到很多认证失败的Failure的ip登录信息。所以想到根据secure文件查看失败的ip如果超过五次,那么就把此ip写入/etc/hosts.deny文件,禁止此ip登录。

收集 /var/log/secure 里面的信息,若是某个IP 链接次数超过一定次数 ,则把此ip记录到/etc/hosts.deny里面。
通过crontab来执行,每分钟执行一次。

脚本一:

  1. #!/bin/bash
  2. #Denyhosts SHELL SCRIPT
  3. cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"=" $1;}' >/root/Denyhosts/Denyhosts.txt
  4. DEFINE="5"
  5. for i in `cat /root/Denyhosts/Denyhosts.txt`
  6. do
  7.         IP=`echo $i|awk -F= '{print $1}'`
  8.         NUM=`echo $i|awk -F= '{print $2}'`
  9.         if [ $NUM -gt $DEFINE ]
  10.         then
  11.                 ipExists=`grep $IP /etc/hosts.deny |grep -v grep |wc -l`
  12.                 if [ $ipExists -lt 1 ]
  13.                 then
  14.                 echo "sshd:$IP" >> /etc/hosts.deny
  15.                 fi
  16.         fi
  17. done

脚本二:

#基本思路是设置ssh的登录权限,统计secure中ssh认证失败的ip设置黑名单

  1. #!/bin/bash
  2. LIMET=30
  3. LOGFILE="/var/log/block_ssh.log"
  4. TIME=$(date '+%b %e %H')
  5. BLOCK_IP=$(grep "$TIME" /var/log/secure |grep Failed|awk '{print $(NF-3)}'|sort |uniq -c |awk '$1>"$LIMET"{print $1":"$2}')
  6. for i in $BLOCK_IP
  7. do
  8. IP=$(echo $i |awk -F: '{print $2}')
  9. iptables-save |grep INPUT|grep DROP|grep $IP >/dev/null
  10. if [ $? -ne 0 ];then
  11. iptables -A INPUT -s $IP -p tcp --dport 22 -j DROP
  12. NOW=$(date '+%Y-%m-%d %H:%M')
  13. echo -e "%NOW : $IP" >>${LOGFILE}
  14. fi
  15. done

统计出1小时ssh认证失败超过30次的IP,如果没屏蔽过的就将其加入iptables屏蔽。
这里就不设置白名单了,正常ip在一个小时内不会有那么多的Failed认证。

加入定时任务:
crontab -e
*/1 * * * * /bin/bash /root/Denyhosts/Denyhosts.sh
*/10 * * * * /bin/bash /root/block_ssh.sh
#echo "*/10 * * * * root /root/block_ssh.sh" >>/etc/crontab

三、通过Fail2ban禁止IP登录

fail2ban是一个用于检查服务器日志以查找重复或自动攻击的应用程序。如果找到任何内容,它将更改防火墙以永久地或在指定的时间内阻止攻击者的IP地址
从CentOS7开始,官方的标准防火墙设置软件从iptables变更为firewalld。 为了使Fail2ban与iptables联动,需禁用自带的firewalld服务,同时安装iptables服务。

yum安装:

yum list | grep epel-release
yum -y install epel-release
yum install fail2ban -y
 
fail2ban的配置文件路径:/etc/fail2ban

fail2ban安装目录:/usr/share/fail2ban

日志文件:/var/log/fail2ban.log

达到阈值之后的执行的动作的配置文件:   action.d/ 

包含所有的过滤规则:filter.d/

配置fail2ban并实现防暴力破解

官方的文档写到:在配置时,我们应该避免修改由fail2ban安装创建的文件,我们应该去编写具有.local扩展名的新文件。在.local新文件里配置的内容会覆盖jail.conf内容里相同的值。

当我们的配置发生改变了我们可以使用  fail2ban-client reload ,来加载新的配置。

配置fail2ban

编辑配置文件 jail.local  并实现防暴力破解:
vim /etc/fail2ban/jail.d/jail.local
文件内容:

#defalut这里是设定全局设置,如果下面的监控没有设置就以全局设置的值设置。
[DEFAULT]
# 用于指定哪些地址ip可以忽略 fail2ban 防御,以空格间隔。
ignoreip = 127.0.0.1/8
# 客户端主机被禁止的时长(默认单位为秒)
bantime  = 3600
# 过滤的时长(秒)
findtime  = 600
# 匹配到的阈值(次数)
maxretry = 3

[ssh-iptables]
# 是否开启
enabled  = true
# 过滤规则
filter   = sshd
# 动作
action   = iptables[name=SSH, port=ssh, protocol=tcp]
# 日志文件的路径
logpath  = /var/log/secure
# 匹配到的阈值(次数)
maxretry = 3
在这里需要注意一点就是:我们上面的action设置的时候,port=ssh,如果我们更改了sshd服务的端口号,我能需要在这里设置对应的端口号,否则配置不生效。

防暴力破解测试

在上面配置好了之后,我们需要让配置生效:

fail2ban-client reload
测试:故意输入错误密码3次,再进行登录时,会拒绝登录

[root@121~]# ssh 192.168.1.121
root@192.168.1.121's password: 
Permission denied, please try again.
root@192.168.1.121's password: 
Permission denied, please try again.
root@192.168.1.121‘s password: 
Permission denied (publickey,password).
[root@121~]# ssh 192.168.1.121
ssh: connect to host 192.168.1.121 port 22: Connection refused
我们可以查看当前被禁止登陆的ip:

[root@121]# fail2ban-client status ssh-iptables 
Status for the jail: ssh-iptables
|- filter
|  |- File list:    /var/log/secure     #日志文件路径
|  |- Currently failed:    0        #当前失败次数
|  `- Total failed:    3            #总失败次数
`- action
   |- Currently banned:    1        #当前禁止的ip数量
   |  `- IP list:    192.168.1.112        #当前禁止的ip
   `- Total banned:    1        #禁止的ip总数

编译安装:

wget https://codeload.github.com/fail2ban/fail2ban/tar.gz/0.8.14
成功下载之后,解压源码包并进行安装。
tar -xf 0.8.14.tar.gz
cd fail2ban-0.8.14
python setup.py install
安装完成后要手动生成一下程序的启动脚本。
cp files/redhat-initd /etc/init.d/fail2ban
chkconfig --add fail2ban
使用下列命令检查Fail2ban是否加入开机启动项。结果如下图所示。
chkconfig --list fail2ban
安装完成后程序文件都是保存在/etc/fail2ban目录下,其中jail.conf为主配置文件

配置Fail2ban联动iptables
新建jail.local来覆盖Fail2ban在jail.conf的默认配置。

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vim /etc/fail2ban/jail.local
对jail.conf做以下两种修改。
防止SSH密码爆破

[ssh-iptables]模块的配置修改如下。其中,port应按照实际情况填写。

 [ssh-iptables]

 enabled  = true
 filter   = sshd
 action   = iptables[name=SSH, port=22, protocol=tcp]
 logpath  = /var/log/secure
 maxretry = 3
 findtime  = 300
 
阻止恶意扫描
新增[nginx-dir-scan]模块,配置信息如下。此处,port和logpath应按照实际情况填写。

 [nginx-dir-scan]

 enabled = true
 filter = nginx-dir-scan
 action   = iptables[name=nginx-dir-scan, port=443, protocol=tcp]
 logpath = /path/to/nginx/access.log
 maxretry = 1
 bantime = 172800
 findtime  = 300

然后在filter.d目录下新建nginx-dir-scan.conf。
cp /etc/fail2ban/filter.d/nginx-http-auth.conf /etc/fail2ban/filter.d/nginx-dir-scan.conf
vim /etc/fail2ban/filter.d/nginx-dir-scan.conf
#对nginx-dir-scan.conf进行修改,具体配置信息如下:
 [Definition]
 failregex = <HOST> -.*- .*Mozilla/4.0* .* .*$
 ignoreregex =
此处的正则匹配规则是根据nginx的访问日志进行撰写,不同的恶意扫描有不同的日志特征。

本文采用此规则是因为在特殊的应用场景下有绝大的把握可以肯定Mozilla/4.0是一些老旧的数据采集软件使用的UA,所以就针对其做了屏蔽。不可否认Mozilla/4.0 这样的客户端虽然是少数,但仍旧存在。因此,此规则并不适用于任何情况。

使用如下命令,可以测试正则规则的有效性。
fail2ban-regex /path/to/nginx/access.log /etc/fail2ban/filter.d/nginx-dir-scan.conf

变更iptables封禁策略
Fail2ban的默认iptables封禁策略为 REJECT --reject-with icmp-port-unreachable,需要变更iptables封禁策略为DROP。

在/etc/fail2ban/action.d/目录下新建文件iptables-blocktype.localcd /etc/fail2ban/action.d/
cp iptables-blocktype.conf iptables-blocktype.local
vim iptables-blocktype.local
#修改内容如下:
[INCLUDES]
after = iptables-blocktype.local
[Init]
blocktype = DROP
#最后,别忘记重启fail2ban使其生效。

Fail2ban常用命令

查看被ban IP,其中ssh-iptables为名称,比如上面的[ssh-iptables]和[nginx-dir-scan]。
fail2ban-client status ssh-iptables

添加白名单。
fail2ban-client set ssh-iptables addignoreip IP地址 

删除白名单。
fail2ban-client set ssh-iptables delignoreip IP地址

查看被禁止的IP地址。
iptables -L -n
systemctl restart fail2ban
systemctl enable fail2ban

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/536894
推荐阅读
相关标签
  

闽ICP备14008679号