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。关于该程序的详情请去官网.

安装该软件的依赖环境:

[[email protected] ~]# yum install openssl-devel pcre-devel ncpfs-devel postgresql-devel libssh-devel subversion-devel libncurses-devel -y

下载hydra 软件(如果在linux 中无法直接wget下载的话,可以在浏览器(windows)中直接输入该链接去下载该软件)

[[email protected] ~]# wget https://www.thc.org/download.php?t=r&f=hydra-8.1.tar.gz

解压、编译、安装(注意: 编译安装时需要注意看下有没有error类的错误,不然可能会导致hydra程序无法使用)

[[email protected] ~]# tar zxvf hydra-8.1.tar.gz
[[email protected]-osd1 ~]# cd hydra-8.1
[[email protected]-osd1 hydra-8.1]# ./configure
[[email protected]-osd1 hydra-8.1]# make && make install

正常安装的话,就可以使用了。

2.3 hydra 常用命令详解

[[email protected] ~]# hydra
Hydra v8.1 (c) 2014 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Syntax: hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e nsr] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W TIME] [-f] [-s PORT] [-x MIN:MAX:CHARSET] [-SuvVd46] [service://server[:PORT][/OPT]]

Options:
  -l LOGIN or -L FILE  login with LOGIN name, or load several logins from FILE # -l 登陆用户名 或者 -L 登陆用户名列表文件
  -p PASS  or -P FILE  try password PASS, or load several passwords from FILE # -p 登陆密码 或者 -P 密码字典文件
  -C FILE   colon separated "login:pass" format, instead of -L/-P options  # 使用用户名:密码 组合的破解文件。
  -M FILE   list of servers to attack, one entry per line, ‘:‘ to specify port  # 指定目标列表文件一行一条记录
  -t TASKS  run TASKS number of connects in parallel (per host, default: 16)  # 同时运行的线程数目,默认是16个
  -U        service module usage details  # 服务模块使用详情
  -h        more command line options (COMPLETE HELP)  # 更多命令选项
  server    the target: DNS, IP or 192.168.0.0/24 (this OR the -M option)  #支持扫描 域名、ip、以及网段
  service   the service to crack (see below for supported protocols)  # 破解扫描的协议
  OPT       some service modules support additional input (-U for module help)  # 更多扩展选项参看 -U 选项

 Supported services: asterisk cisco cisco-enable cvs ftp ftps http[s]-{head|get} http[s]-{get|post}-form http-proxy http-proxy-urlenum icq imap[s] irc ldap2[s] ldap3[-{cram|digest}md5][s] mssql mysql(v4) nntp oracle-listener oracle-sid pcanywhere pcnfs pop3[s] postgres rdp redis rexec rlogin rsh s7-300 sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey svn teamspeak telnet[s] vmauthd vnc xmpp

Hydra is a tool to guess/crack valid login/password pairs. Licensed under AGPL
v3.0. The newest version is always available at http://www.thc.org/thc-hydra
Don‘t use in military or secret service organizations, or for illegal purposes.

Example:  hydra -l user -P passlist.txt ftp://192.168.0.1 #示例: 用user 用户,加上 passlist.txt密码字典,尝试破解 192.168.0.1 ftp服务器

2.4 测试破解 (在192.168.30.63上操作)

创建一个目录,用来存放用户文件以及密码字典,并创建用users.txt、passwd.txt 文件

[[email protected] ssh-test]# pwd
/root/ssh-test
[[email protected]-osd1 ssh-test]# cat users.txt
root
mysql
ftp
apache
rsync
tt
admin
[[email protected]-osd1 ssh-test]# cat passwd.txt
123456
123
admin
123456789
helloworld

运行一下命令进行破解,可以看到倒数第二行,提示已经找到1个有效的密码。倒数第三行,便是有效的用户名和密码(如果在命令里加上-vV 选项的话,会输出更详细的破解运行的信息)

[[email protected] ssh-test]# hydra -L users.txt -P passwd.txt ssh://192.168.30.64
Hydra v8.1 (c) 2014 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (http://www.thc.org/thc-hydra) starting at 2016-05-03 19:04:33
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 64 tasks, 35 login tries (l:7/p:5), ~0 tries per task
[DATA] attacking service ssh on port 22
[22][ssh] host: 192.168.30.64   login: root   password: 123456
1 of 1 target successfully completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2016-05-03 19:04:39

运行-o 选项可以将得到的有效用户名和密码保存到文件中,如下:

[[email protected] ssh-test]# hydra -L users.txt -P passwd.txt -vV ssh://192.168.30.64 -o valid-info.txt
[[email protected] ssh-test]# cat valid-info.txt
# Hydra v8.1 run at 2016-05-03 19:08:14 on 192.168.30.64 ssh (hydra -L users.txt -P passwd.txt -vV -o valid-info.txt ssh://192.168.30.64)
[22][ssh] host: 192.168.30.64   login: root   password: 123456

以上就是暴力破解的过程,另外hydra 程序支持更多的协议,如ftp、web用户名登陆、cisco、pop3、rdp、telnet...... 等等等等。有兴趣的可以谷歌搜索下用法。不要用来做坏事啊,防患于未然。

三、如何防止自己的服务器被ssh暴力破解呢?

3.1 这里利用到了linux 系统的日志,不知道大家发现没,每次我们登陆服务器时,如果有登陆认证失败的情况,会在服务器的/var/log/secure文件中记录日志。错误日志如下:

[[email protected] deny]# tail -3f /var/log/secure
May  3 19:14:49 test sshd[23060]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.30.63  user=root
May  3 19:14:49 test sshd[23060]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
May  3 19:14:51 test sshd[23060]: Failed password for root from 192.168.30.63 port 50704 ssh2

通过上面的日志我们可以看出,是30.63这台主机ssh登陆失败了,那假如它登陆失败次数过多后,我们能否禁止它登陆呢?

3.2 这里用到了linux 的hosts.deny(利用tcp_wrappers)文件。参考文章:我本善良

hosts.deny介绍:一般來說linux的密碼我們會用shadow來保護。電子郵件大概有人也會說使用PGP,但是一般的網路連線呢?可能會有人舉手回答說防火牆,那防火牆跟tcp_wrappers有什麼關係呢?筆者個人認為,如果說Firewall是第一道防線的話,第二道防線大概就是tcp_wrappers了,我們可以利用不同的防護程式來增加防護的能力之外,並且還能增加被駭客破台的困難度。設計一個完善的防火牆規則本來就不是一件很容易的事情,但是我們能透過簡單的程式化困難為容易,讓新手更能快樂的接觸美麗的Linux新世界。

3.3 利用脚本配合任务计划去定时检测 /var/log/secure 文件,当发现有大量失败日志后,就将该ip追加到hosts.deny中,以达到防止暴力破解的目的。(在192.168.30.64 服务器上操作)

脚本内容:

[[email protected] deny]# pwd
/root/deny
[[email protected] deny]# vim autoDeny.sh
#!/bin/bash

LIST=""

#过滤出协议,尝试连接主机的ip
LIST=$(cat /var/log/secure | grep "authentication failure" | awk ‘{print$14}‘ | sed -e ‘s/rhost=//g‘ -e ‘s/ /_/g‘ | uniq)

#Trusted Hosts
excludeList=( "192.168.30.55" )

function chkExcludeList()
{
for j in "${excludeList[@]}"; do
    if [[ "$1" == $j ]]; then
        return 10
    fi
done
return 11
}

#检查并追加到hosts.deny文件中
for i in $LIST; do
    chkExcludeList "$i"
        if [ $? != "10" ]; then
            if [ "$(grep $i /etc/hosts.deny)" = "" ]; then
                echo "ALL: $i : DENY" >> /etc/hosts.deny
            fi
        fi
done

任务计划:(每分钟运行下该程序)

[[email protected] deny]# crontab -l
*/1 * * * * /usr/bin/sh /root/deny/autoDeny.sh

重启crond服务

[[email protected] deny]# systemctl restart crond

我们先查看下/etc/hosts.deny文件,默认里面的内容应该是空的,如下

[[email protected] deny]# tail -2f /etc/hosts.deny
#        See ‘man tcpd‘ for information on tcp_wrappers
#

3.4 在客户端上进行破解。(192.168.30.63上操作)

第一次运行破解命令

第二次在继续操作时出现连接端口失败的提示(已经被服务器加入deny拒绝了。)

可以去服务器上去检查下hosts.deny文件内容。看下有没有把客户端的ip 追加到里面

说明该脚本运行正常,可以拒绝那些想暴力破解我们服务器的ip。

四、注意事项

1.上述的实验中,可能会存在很快的被扫描到账号和密码,没有起到防止暴力的作用,那是因为我的密码文件已经在里面了,而且用户名及密码就几个。但是在真实环境中,黑客不可能那么快就扫描到,除非你的密码弱爆了。。。

2.上述实验中的软件来自于互联网。

本文章属于原创,如有转载请注明出处。

时间: 2024-10-09 19:49:17

Linux 利用hosts.deny 防止暴力破解ssh的相关文章

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.关于该程序的详情请去官网. 安装该软件的依赖环境: [[

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

防止WordPress利用xmlrpc.php进行暴力破解以及DDoS

早在2012 年 12 月 17 日一些采用 PHP 的知名博客程序 WordPress被曝光存在严重的漏洞,该漏洞覆盖WordPress 全部已发布的版本(包括WordPress 3.8.1).该漏洞的 WordPress 扫描工具也在很多论坛和网站发布出来.工具可以利用 WordPress 漏洞来进行扫描,也可以发起DDoS 攻击.经过测试,漏洞影响存在 xmlrpc.php 文件的全部版本. 最近我也遇到了大规模的wordpress后台(wp-login.php)爆破,wordpress差

centos 7 DenyHosts 安装 防暴力破解ssh登陆

为了减少软件扫描ssh登陆 还是用这个比较好点  默认端口号22 也要改 登陆密码也不要使用 弱口令 123456 这样的 Description DenyHosts is a python program that automatically blocks ssh attacks by adding entries to /etc/hosts.deny. DenyHosts will also inform Linux administrators about offending hosts,

防止暴力破解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 p

fail2ban-防止用户暴力破解ssh工具

关于fail2ban: fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,很好.很实用.很强大!  简单来说其功能就是防止暴力破解.工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关IP利用iptables加入到dorp列表一定时间. 实战场景: 最近公网网站一直被别人暴力破解sshd服务密码.虽然没有成功,但会导致系统负载很高,原因是在暴力破解的时候,系统会不断地认证用户,从而

利用Python自动生成暴力破解的字典

Python是一款非常强大的语言.用于测试时它非常有效,因此Python越来越受到欢迎. 因此,在此次教程中我将聊一聊如何在Python中生成字典,并将它用于任何你想要的用途. 前提要求 1,Python 2.7(对于Python 3.x的版本基本相同,你只需要做一些微小调整) 2,Peace of mine(作者开的一个玩笑,这是一首歌名) 如果你用virtualenv搭建Python开发环境,请确保已经安装了itertools.因为我们将会用到itertools生成字典.我们将一步一步地演示

利用python暴力破解ssh

1 # -*- coding:utf-8 -*- 2 #python 2.7 3 4 import optparse,sys,threading 5 import pexpect 6 7 PROMPT = ['#','>','/$'] 8 def ssh(host,user,password): 9 child = pexpect.spawn('ssh %[email protected]%s' % (user,host)) 10 ret = child.expect(['(?i)are you

linux下,shell脚本暴力破解用户名和密码

由于一些注册用户帐号有规可循,而通常人们的防范意识较差,密码相对简单,对用户名进行常见密码的登录测试,达到破解密码的目的.仅供学习之用,请勿用于非法用途.代码做了部分修改,无法正常运行,测试需要根据实际需要修改代码,另外对密码安全问题一定要足够重视. 设计思路: 通过抓包工具截获http数据包,分析数据包(表单)中具体信息格式 分析用户名直接的逻辑关系,构造用户名 利用 curl 工具向指定登录网站模拟发包 对返回结果进行分析,若登录成功则破解成功 代码见链接: http://www.oschi