SSH访问控制防止暴力破解

一、系统:CentOS 6.5 64位

二、方法:读取/var/log/secure,查找关键字 Failed,例如(注:文中的IP地址特意做了删减):

Sep 17 09:08:09 localhost sshd[29087]: Failed password for root from 13.7.3.6 port 44367 ssh2
Sep 17 09:08:20 localhost sshd[29087]: Failed password for root from 13.7.3.6 port 44367 ssh2
Sep 17 09:10:02 localhost sshd[29223]: Failed password for root from 13.7.3.6 port 56482 ssh2
Sep 17 09:10:14 localhost sshd[29223]: Failed password for root from 13.7.3.6 port 56482 ssh2

从这些行中提取IP地址,如果次数达到5次则将该IP写到 /etc/hosts.deny中。

三、步骤:

1、先把始终允许的IP填入 /etc/hosts.allow ,这很重要!比如:
sshd:19.16.18.1:allow
sshd:19.16.18.2:allow

2、脚本 /root/sh/secure_ssh.sh

#! /bin/bash
cat /var/log/secure|awk ‘/Failed/{print $(NF-3)}‘|sort|uniq -c|awk ‘{print $2"="$1;}‘ >/var/log/sshlogin.log

DEFINE="5"
for i in `cat  /var/log/sshlogin.log`
do
  IP=`echo $i |awk -F ‘{print $1}‘`
  NUM=`echo $i|awk -F ‘{print $2}‘`
  if [ $NUM -gt $DEFINE ];then
    grep $IP /etc/hosts.deny > /dev/null
      if [ $? -gt 0 ];then
          echo "sshd:$IP:deny" >> /etc/hosts.deny
      fi
    fi
done

3、将secure_ssh.sh脚本放入cron计划任务,每1分钟执行一次。
# crontab -e
*/1 * * * *  sh /root/sh/secure_ssh.sh

四、测试:

1、开两个终端窗口,一个ssh连上服务器,另一个用错误的密码连接服务器几次。

很快,服务器上黑名单文件里已经有记录了:
[[email protected] ~]# $ cat /var/log/sshlogin.log

13.26.21.27=3

再看看服务器上的hosts.deny
[[email protected] ~]# cat /etc/hosts.deny
sshd:13.7.3.6:deny
sshd:92.4.0.4:deny
sshd:94.10.4.2:deny
sshd:94.4.1.6:deny
sshd:11.64.11.5:deny

2、从另一个终端窗口继续“暴力”连接服务器。

看看服务器上的黑名单文件:
[[email protected] ~]# /var/log/sshlogin.log

13.26.21.27=6

再看看服务器上的hosts.deny
[[email protected] ~]# cat /etc/hosts.deny
sshd:13.7.3.6:deny
sshd:92.4.0.4:deny
sshd:94.10.4.2:deny
sshd:94.4.1.6:deny
sshd:11.64.11.5:deny
sshd:13.26.21.27:deny

IP 已经被加入到服务器的hosts.deny,再用正确的密码连接服务器,被拒绝:
$ ssh [email protected] -p 2333
ssh_exchange_identification: Connection closed by remote host

时间: 2024-10-05 03:50:37

SSH访问控制防止暴力破解的相关文章

教你分析针对SSH服务的暴力破解日志

你所看到的SSH日志,显示出时间.IP.端口,一条重复着一条,总是那么单调,仅凭日志展现的这些信息,远不能判定故障真想,怎么办?

SSH防暴力破解shell脚本

写的一个SSH的防暴力破解脚本. 原理是检测SSH连接日志,过滤登录失败的IP,超过登录次数就将其添加进hosts.deny文件中,限制其登录. 脚本如下: #! /bin/bash cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /root/black.txt DEFINE="10" for i in `cat  /root/bla

Linux VPS 安全配置:禁用22端口、root用户以及配置Denyhosts防暴力破解

最近租用了一台Vultr东京机房的VPS,每天都会生成许多异常登录失败的日志,疑似受到扫描软件的暴力破解,遂Google了一下服务器安全防护方面的知识. 废话不多说,下面将操作过程记录下来: 注意:以下操作基于CentOS 7,不同系统下的具体操作可能会有区别 一.修改SSH服务默认端口 SSH服务的默认端口是22,扫描软件首先会通过此端口尝试登录,因此把它改成一个不易猜到的端口(推荐使用10000~65535之间的,复杂度最高也不易和其他进程发生冲突) 1 vim /etc/ssh/sshd_

ssh访问控制,多次失败登录即封掉IP,防止暴力破解

ssh访问控制,多次失败登录即封掉IP,防止暴力破解 一.系统:Centos6.3 64位 二.方法:读取/var/log/secure,查找关键字 Failed,例如(注:文中的IP地址特意做了删减): Sep 17 09:08:09 localhost sshd[29087]: Failed password for root from 13.7.3.6 port 44367 ssh2Sep 17 09:08:20 localhost sshd[29087]: Failed password

防止ssh暴力破解linux密码

网上看到一篇安全方面的文章,常用的网站收藏无法收藏,于是放这里先.具体功能还未测试,请慎用. 下面是博客原文转载,感谢作者辛苦劳动: 服务器在互联网中,每天都有些没事儿干的人在你的机器端口扫来扫去,让管理员非常烦恼.本文描述一个方法,利用本文介绍的脚本结合iptables服务一并使用,用来防止公网计算机通过ssh进行用户口令暴力破解.目前稳重脚本已经在其他项目的实际运营环境中得到验证. 脚本内容: #!/bin/bash # 防SSH密码暴力破解脚本 # 通过分析secure日志文件使用ipta

Denyhosts 防止SSH暴力破解服务器密码-1

Denyhosts是python语言程序,借用tcp_wrapper程序来进行主机防护.防止暴力破解服务器用户密码. DenyHosts可以阻止试图猜测SSH登录口令,它会分析sshd的日志文件(/var/log/secure),当发现同一IP在进行多次SSH密码尝试时就会记录IP到/etc/hosts.deny文件,从而达到自动屏蔽该IP的目的. 1.安装 # cd /usr/local DenyHosts-2.6.tar.gz # tar -zxvf DenyHosts-2.6.tar.gz

Linux 利用hosts.deny 防止暴力破解ssh(转)

一.ssh暴力破解 利用专业的破解程序,配合密码字典.登陆用户名,尝试登陆服务器,来进行破解密码,此方法,虽慢,但却很有效果. 二.暴力破解演示 2.1.基础环境:2台linux主机(centos 7系统).Development Tools. 主机ip:192.168.30.64 (服务器端).192.168.30.64(客户端+ 暴力破解[Hydra]) 在30.63上进行暴力破解30.64 2.2 客户端上安装 破解程序 hydra.关于该程序的详情请去官网. 安装该软件的依赖环境: [[

linux防止ssh远程暴力破解的方法和fail2ban软件的配置应用

一.修改参数来使得暴力破解变得几乎不可能 1.密码设定要足够复杂 密码的设定,尽可能要有大写字母.小写字母.特殊符号和数字,长度至少要大于8,当然越长越好,只要能记住. 2.修改默认端口号 修改sshd服务的默认端口号,可以进一步防止黑客的恶意攻击.首先介绍一个工具:nmap:nmap可以探测某个服务器的远程端口号开放列表; #nmap 192.168.1.163 StartingNmap 5.51 ( http://nmap.org ) at 2015-11-10 14:43 CST Nmap

Python3小工具——暴力破解ssh

一.工具说明 利用pxssh库进行暴力破解ssh 二.演示一下的利用效果 三.代码+注释 from pexpect import pxssh import argparse import threading maxConnetions = 5 connect_lock = threading.BoundedSemaphore(value=maxConnetions) def connect(host, user, password):     try:         s = pxssh.pxs