环境 :Ubuntu 16.04 LTS
注意:安装好后保留你安装的窗口链接,另外链接窗口 验证成功后再关闭, 否则你估计得找机房人员帮忙了。。。。

一、介绍

DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。
注意 : 暴力破解需要同时猜中端口和密码
到官网下载DenyHosts
DenyHosts官网:http://denyhosts.sourceforge.net/
查看Linux系统sshd的日志文件/var/log/secure文件,发现里面有大量的ssh失败尝试记录

获取其中的ip地址和数量:

# grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' /var/log/secure.1 | sort | uniq -c

二、解压并安装

检查安装要求
首选检查Sshd是否支持 Tcpwrap,只有支持Tcpwrap才可以安装Denyhost

# ldd /usr/sbin/sshd |grep wrap


libwrap.so.0 => /usr/lib/libwrap.so.0 (0x00864000) //出现此信息时表示支持
再检查 Python的版本,Python2.3以上版本可以直接安装

# python -V


均达到要求

下载地址

wget https://nchc.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz
# 官网下载包安装
[root@www ~]# tar zxvf DenyHosts-2.6.tar.gz
[root@www ~]# cd DenyHosts-2.6
[root@www DenyHosts-2.6]# apt install python -y
[root@www DenyHosts-2.6]# python setup.py install
[root@www DenyHosts-2.6]# cd /usr/share/denyhosts/
[root@www denyhosts]# cp denyhosts.cfg-dist denyhosts.cfg      //配置文件
[root@www denyhosts]# cp daemon-control-dist daemon-control    //启动文件
[root@www denyhosts]# chown root daemon-control
[root@www denyhosts]# chmod 700 daemon-control# yum安装
[root@www ~]#  apt install -y denyhosts

三、 配置文件内容说明

[root@www denyhosts]# vi denyhosts.cfg
SECURE_LOG = /var/log/secure       #ssh日志文件
HOSTS_DENY = /etc/hosts.deny                  #控制用户登录的文件
# format is: i[dhwmy]
# Where i is an integer (eg. 7)
# m = minutes
# h = hours
# d = days
# w = weeks
# y = years
#                                  #(h表示小时,d表示天,m表示月,w表示周,y表示年)
# never purge:
HOSTS_DENY = /etc/hosts.deny        ##控制用户登陆的文件,将多次连接失败的IP添加到此文件,达到屏蔽的作用
PURGE_DENY = 30m               ##过多久后清除已经禁止的,设置为30分钟;,我这里为空表示永远不解禁
PURGE_DENY = 50m               #过多久后清除已阻止IP
HOSTS_DENY = /etc/hosts.deny   #将阻止IP写入到hosts.deny
BLOCK_SERVICE =                #阻止服务名写在后面,如sshd
PURGE_THRESHOLD =              #定义了某一IP最多被解封多少次。某IP暴力破解SSH密码被阻止/解封达到了PURGE_THRESHOLD次,则会被永久禁止;
DENY_THRESHOLD_INVALID = 1     #允许无效用户登录失败的次数
DENY_THRESHOLD_VALID = 10      #允许普通用户登录失败的次数
DENY_THRESHOLD_ROOT = 5        #允许root登录失败的次数,可以设置为空
WORK_DIR = /usr/local/share/denyhosts/data     #将deny的host或ip纪录到Work_dir中
DENY_THRESHOLD_RESTRICTED = 1          #设定 deny host 写入到该资料夹
LOCK_FILE = /var/lock/subsys/denyhosts      #将DenyHOts启动的pid纪录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务。
HOSTNAME_LOOKUP=NO             #是否做域名反解
ADMIN_EMAIL =                  #设置管理员邮件地址
DAEMON_LOG = /var/log/denyhosts      #DenyHosts日志位置其他 :
#(h表示小时,d表示天,m表示月,w表示周,y表示年)
AGE_RESET_VALID=5d            #有效用户登录失败计数归零的时间
AGE_RESET_ROOT=25d            #root用户登录失败计数归零的时间
AGE_RESET_RESTRICTED=25d      #用户的失败登录计数重置为0的时间(/usr/share/denyhosts/data/restricted-usernames)
AGE_RESET_INVALID=10d         #无效用户登录失败计数归零的时间
#用户的登陆失败计数会在多长时间后重置为0
RESET_ON_SUCCESS = yes         ##如果一个ip登陆成功后,失败的登陆计数是否重置为0
DAEMON_SLEEP = 30s             ##当以 后台方式运行时,每读一次日志文件的时间间隔。
DAEMON_PURGE = 1h              #当以后台方式运行时,清除机制在 HOSTS_DENY 中终止旧条目的时间间隔,这个会影响PURGE_DENY的间隔。
RESET_ON_SUCCESS = yes                  #如果一个ip登陆成功后,失败的登陆计数是否重置为0

ps:配置文件内容根据自己需要自行调整

4. 启动自启动服务

# ./daemon-control start        #启动DenyHosts
# ln -s /usr/share/denyhosts/daemon-control /etc/init.d      //对daemon-control进行软连接,方便管理
# /etc/init.d/daemon-control start
或者
# /usr/share/denyhosts/daemon-control start            启动Denyhost的进程
# chkconfig daemon-control on                     //将denghosts设成开机启动或者
# vi /etc/rc.local --------->加入下面这条命令:
/usr/share/denyhosts/daemon-control start

查看服务运行状态

root@ubuntu:/usr/share/denyhosts# ./daemon-control status
DenyHosts is running with pid = 10259


5. 以后可以直接查看hosts.deny文件就能找到攻击ip的记录

# vi /etc/hosts.deny

在另外一台机器上使用ssh进行连接,当在连续几次输入错误的密码后,会被自动阻止掉,在一定时内不可以再连接ssh连接记录的日志文件。
查看我的/etc/hosts.deny文件发现里面已经有135条记录。

# cat /etc/hosts.deny | wc -l
135

注意 :

添加信任IP
编辑/etc/hosts.allow,将自己常用的IP加进去:

sshd: 202.113.*.*: allow

防止手残输错几次密码IP被禁登不进去了。

常见问题 :

在输入运行命令时,有错误提示打不开denyhosts.py文件,没有这个目录。如:

[root@ ~]#/etc/init.d/daemon-control start
starting DenyHosts:   /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
python: can't open file '/usr/bin/denyhosts.py': [Errno 2] No such file or directory

经过查找发现denyhosts.py在目录/usr/local/bin/目录下,于是修改daemon-control文件

[root@ ~]#vim /usr/share/denyhosts/daemon-control
DENYHOSTS_BIN   = "/usr/bin/denyhosts.py"
DENYHOSTS_LOCK  = "/var/lock/subsys/denyhosts"
DENYHOSTS_CFG   = "/usr/share/denyhosts/denyhosts.cfg"

2、启动时出现了错误,可以使用下面方式解决
./daemon-control start
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
Can’t read: /private/var/log/system.log
[Errno 2] No such file or directory: ‘/private/var/log/system.log’
Error deleting DenyHosts lock file: /var/lock/subsys/denyhosts
[Errno 2] No such file or directory: ‘/var/lock/subsys/denyhosts’
使用:

mkdir -p /private/var/log/
mkdir -p /var/lock/subsys/

3、./daemon-control start
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
Can’t read: /private/var/log/system.log
[Errno 2] No such file or directory: ‘/private/var/log/system.log’
Error deleting DenyHosts lock file: /var/lock/subsys/denyhosts
[Errno 2] No such file or directory: ‘/var/lock/subsys/denyhosts’
使用:

touch /private/var/log/system.log
touch /var/lock/subsys/denyhosts

4、./daemon-control start
出现:
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
DenyHosts could not obtain lock (pid: )
[Errno 17] File exists: ‘/var/lock/subsys/denyhosts’
使用:

rm -f /var/lock/subsys/denyhosts
./daemon-control start
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py –daemon –config=/usr/share/denyhosts/denyhosts.cfg

service denyhosts status来查看运行状态
DenyHosts is running with pid = 25874 表示已经启动起来了。
接下来就可以使用
cat /etc/hosts.deny来查看记录了

#service denyhost start
starting DenyHosts:   /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
python: can't open file '/usr/bin/denyhosts.py': [Errno 2] No such file or directory

经过查找发现denyhosts.py在目录/usr/local/bin/目录下,于是修改daemon-control文件

#vi daemon-control
DENYHOSTS_BIN   = "/usr/bin/denyhosts.py"
DENYHOSTS_LOCK  = "/var/lock/subsys/denyhosts"
DENYHOSTS_CFG   = "/usr/share/denyhosts/denyhosts.cfg"

将第一行修改为DENYHOSTS_BIN = “/usr/local/bin/denyhosts.py”

在运行还会提示错误:导入Python版本错误的提示。如:

Traceback (most recent call last):
File "/usr/local/bin/denyhosts.py", line 5, in
import DenyHosts.python_version
ImportError: No module named DenyHosts.python_version

到这里错误很明了了,经过查询发现版本不对会导致这个问题。

5、在系统是centos 6.8,lnmp1.4下安装使用denyhosts过程中,出现如下错误:

service denyhosts status
Denyhosts is not running
service denyhosts start
starting DenyHosts: /usr/bin/env python /usr/sbin/denyhosts --daemon --config=/etc/denyhosts.conf
DenyHosts could not obtain lock (pid: 9120)
[Errno 17] File exists: ‘/var/run/denyhosts.pid’
在论坛中问了军哥,给出的解决方法如下:

sed -i ‘s#/run/denyhosts.pid#/var/run/denyhosts.pid#g’ /etc/init.d/denyhosts

常见问题 :
1、denyhosts误封了IP请问怎么解封?
denyhosts误封了同事IP请问怎么解封?
我把IP加进白名单并且在hosts.deny里删除了此IP也不行。
报错信息 :

 ssh_exchange_identification: read: Connection reset by peer
或者
Server unexpectedly closed network
connection错误

解锁的步骤,
首先停止DenyHosts, CentOS系统的可以用命令:

# service denyhosts stop

其他系统, 例如Ubuntu/Debian/Fedora/CentOS/Redhat

# /etc/init.d/denyhosts stop

然后请用自己熟悉的方法(通常是vi)在下列文件中找到自己的IP记录并删除, 不推荐这种方法因为用vi在下面的文件中找到自己的IP是非常费时费力的.

/var/log/secure              ×
/etc/hosts.deny

× 通常只修改这两个文件就OK了

/usr/share/denyhosts/data/hosts
/usr/share/denyhosts/data/hosts-restricted
/usr/share/denyhosts/data/hosts-root
/usr/share/denyhosts/data/hosts-valid

可以用sudo sed -i ‘/ip/d’ /var/log/secure 来直接修改,并使用sudo grep “ip”
/var/log/secure来查看是否修改成功(已编写脚本)

如果不在乎上面的记录文件, 推荐清空上面几个Linux系统日志然后重新开启DennyHosts.
清空这些Linux系统日志不会影响任何功能. 如果你觉得这几个文件记录对你很重要(真的?), 请不要随意清空,
老老实实使用上面的方法.

清空上面几个Linux系统日志很简单, 在SSH中敲入下面的命令:

cat /dev/null > /var/log/securecat /dev/null > /etc/hosts.denycat /dev/null > /usr/share/denyhosts/data/hosts
cat /dev/null > /usr/share/denyhosts/data/hosts-restrictedcat /dev/null > /usr/share/denyhosts/data/hosts-root
cat /dev/null > /usr/share/denyhosts/data/hosts-valid
cat /dev/null > /usr/share/denyhosts/data/offsetcat /dev/null > /usr/share/denyhosts/data/suspicious-loginscat /dev/null > /usr/share/denyhosts/data/users-hostscat /dev/null > /usr/share/denyhosts/data/users-invalid
cat /dev/null > /usr/share/denyhosts/data/users-valid把日志文件全部清空!要注意的是,清空后一定要 # service rsyslog restart 重启日志记数器!因为如果你不重启服务,你会发现secure日志文件会停止记录一切活动了!那么denyhosts也就无效了。然后重新开启Deny Hosts
# service denyhosts start
其他系统, 例如Ubuntu/Debian/Fedora/CentOS/Redhat
# /etc/init.d/denyhosts start
最好
#service sshd restart
#service iptables restart

方法二:
问题:denyhosts 取消ip限制,允许登陆
1.找到以下文件一个个删除文件中你想取消的主机IP所在的行:

* /usr/share/denyhosts/data/hosts
* /usr/share/denyhosts/data/hosts-restricted
* /usr/share/denyhosts/data/hosts-root
* /usr/share/denyhosts/data/hosts-valid
* /usr/share/denyhosts/data/users-hosts

2.添加你想允许的主机IP地址到

/var/lib/denyhosts/allowed-hostsvi /usr/share/denyhosts/data/allowed-hostsps
# We mustn't block localhost
127.0.0.1
192.168.1.*

3.、启动DenyHosts服务: service denyhosts start

参考链接 :

linux服务器不得不注意的安全问题–ssh暴力破解–denyhosts :http://tech110.blog.51cto.com/438717/287490

利用denyhosts防止服务器被ssh暴力破解 :https://www.centos.bz/2017/08/denyhosts-protect-ssh-server/

linux服务器每次登陆都会把IP写入hosts.deny文件,导致登陆之后下次登陆不了 : https://blog.csdn.net/weixin_43713498/article/details/88714734

扩展
DenyHosts安装及配置详解(centos 7) : https://www.baidu.com/link?url=8bic0qx6Iag_esqWVwOh6vnbt6CDZiflBjdZGkKFAAsm23N0GtDJNcpQ8ehNG34i&wd=&eqid=c61777900002d3e2000000045dc384af
DenyHosts 阻止SSH暴力攻击 (centos ) : https://cloud.tencent.com/developer/article/1511099

DenyHosts 阻止SSH暴力攻击 :https://cloud.tencent.com/developer/article/1511099

更多介绍 :
解除被DenyHosts锁定的IP地址 :https://www.bbsmax.com/A/Vx5MjWppdN/
ubuntu 16.04删除被denyhosts阻止的IP地址 (shell脚本):https://www.mobibrw.com/2018/11508

Centos7使用DenyHosts防止ssh暴力破解(亲测)

https://www.linuxprobe.com/centos-denyhosts.html

Ubuntu中DenyHosts安装及配置相关推荐

  1. ubuntu中git安装与配置 / git clone git@github.com失败

    通常情况下我们 git clone + url,偶尔我们也会遇到git clone git@github.com 的情况,此时就会出现如下的错误(git@github.com: Permission ...

  2. nginx+PHP+PHP-FPM(FastCGI)在Ubuntu上的安装和配置

    nginx+PHP+PHP-FPM(FastCGI)在Ubuntu上的安装和配置 0 之前知识回顾:  1) 目前各种服务器HTTP Server对PHP的支持一共有三种: a.通过HTTPServe ...

  3. ubuntu 12.04安装与配置

    ubuntu 12.04安装与配置 zouxy09@qq.com http://blog.csdn.net/zouxy09 Ubuntu是一个以桌面应用为主的Linux操作系统.Ubuntu每六个月发 ...

  4. Ubuntu中软件安装与卸载

    一.Ubuntu中软件安装方法 1.APT方式 (1)普通安装:apt-get install softname1 softname2 -; (2)修复安装:apt-get -f install so ...

  5. ubuntu 11.10安装及配置

    Ubuntu 11.10 图形(图解)安装教程.基本设置.网络设置.软件源.硬件驱动.Unity 3D.Gnome3.U盘安装 Ubuntu 11.10 (Oneiric Ocelot )图形(图解) ...

  6. 在Ubuntu中手动安装nginx+nextcloud

    在Ubuntu中手动安装nginx+nextcloud 前言 什么是NextCloud? NextCloud功能 先决条件 步骤1:在Ubuntu 20.04上下载NextCloud 步骤2:在Mar ...

  7. ubuntu中查看安装的python版本

    1.ubuntu中查看已安装python的版本 终端命令如下: 查看python2版本 python2 --version 查看python3版本 python3 --version 查看默认使用py ...

  8. centos6.5 php5.2,Linux中PHP安装与配置(CentOS-6.5:php-5.2.13)

    1 PHP简介     PHP(PHP: Hypertext Preprocessor的缩写,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和Per ...

  9. CentOS中vsftp安装、配置、卸载

    CentOS中vsftp安装.配置.卸载 转载http://www.zjgsq.com/1509.html 转载于:https://blog.51cto.com/bbtao/1606816

最新文章

  1. 264标准中高复杂度的三方面
  2. display:inline-block之用法
  3. php 隐藏地址栏,工具栏,php – 我怎么能隐藏#!在浏览器地址栏上?
  4. 2021当一名优雅的代码打工人
  5. 04 | 事件调度层:为什么 EventLoop 是 Netty 的精髓?
  6. 社交媒体坏了 — 来自社会化媒体峰会报告
  7. TabHost控件应用
  8. python gif压缩_基于python压缩gif图片大小。
  9. 关于ios app名称注册的问题(抢注)
  10. 我裂开了,教给他如何搭建和使用代理服务器,他居然用来做这么不正经的事(爬虫,代理ip)
  11. 那些惊艳的算法—时间轮任务调度(sunwind整理)
  12. mysql 生成id函数_MySQL ID生成策略
  13. 命令行基础、目录和文件管理、教学环境介绍、
  14. java base64转字图片、图片转base64字符串
  15. 这个城市最安静的声音 - Suzy
  16. ActiveMQ中消费者是如何接收消息的(二)
  17. [汇编语言]-第四章可执行文件中的程序装入内存并运行的原理
  18. 伽利略或洛伦兹变换不适用于波动
  19. 河源食品安全检测实验室建设细节剖析
  20. 贪食蛇java源码_JAVA 贪食蛇 源码

热门文章

  1. 公众号管理系统 html,微信公众号平台管理后台.html
  2. mysql学习day04-02
  3. Linux system函数返回值
  4. 再读《SAP德国造》
  5. 基于Matlab----16QAM调制与解调
  6. java jdbc 链接pg_Java使用JDBC连接postgresql数据库示例
  7. puppeteer中如何复用启动中的浏览器
  8. C#静态类,静态构造函数,静态变量
  9. vue--自定义验证指令
  10. 成都大数据等新经济代表行业在全国城市位居前列