Debian vps使用DenyHosts防止SSH密码暴力破解

在Debian VPS常用安全设置一文中我介绍了vps的一些基本的安全设置,如修改SSH端口,禁止root用户登陆等等。今天主要介绍使用DenyHosts防止SSH密码暴力破解。

DenyHosts介绍

DenyHosts是一款python脚本,它能够分析/var/log/secure(centos),/var/log/auth.log(debian)等SSH日志文件,当发现同一IP在进行多次SSH密码尝试(穷举扫描,字典攻击)时就会记录IP到/etc/hosts.deny文件,从而达到自动屏蔽该IP的目的。目前DenyHosts最新版本为2.6版本。

官方地址:http://denyhosts.sourceforge.net/

DenyHosts安装

DenyHosts基本的安装要求为:

Python v2.3 及以上;

SSH server支持w/ tcp_wrappers ,这个一般是支持的。

由于DenyHosts会在安装好之后对/var/log/auth.log文件进行分析,如果之前有过登陆失败的情况可能会导致自己的IP被屏蔽。因此,在安装之前最好要清空/var/log/auth.log,使用以下代码

1
echo "" > /var/log/auth.log

下面开始介绍DenyHosts在debian上的具体安装过程。

1、下载 DenyHosts 并解压

1
2
3
wget http://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz
tar zxvf DenyHosts-2.6.tar.gz
cd DenyHosts-2.6

2、安装python环境及DenyHosts

1
2
apt-get install python python2.3-dev python2.3
python setup.py install

DenyHosts默认安装在/usr/share/denyhosts目录下

DenyHosts配置

1、生成DenyHosts配置

首先需要生成DenyHosts配置文件:/usr/share/denyhosts/denyhosts.cfg及守护进程控制脚本/usr/share/denyhosts/daemon-control

1
2
3
cd /usr/share/denyhosts/
cp denyhosts.cfg-dist denyhosts.cfg
cp daemon-control-dist daemon-control

2、修改DenyHosts配置文件denyhosts.cfg

然后需要根据我们的需要修改配置文件denyhosts.cfg

1
vi denyhosts.cfg

1)修改默认日志文件位置SECURE_LOG
debian下默认的SSH日志文件为/var/log/auth.log,因此debian系统需要改为如下形式

1
2
3
4
5
# Redhat or Fedora Core:
#SECURE_LOG = /var/log/secure
#
# Mandrake, FreeBSD or OpenBSD:
SECURE_LOG = /var/log/auth.log

2)修改IP释放时间PURGE_DENY
当IP被屏蔽之后,多长时间自动释放,文档中可以选择1w(1周)和5d(5天),我们可以自己设定。
如释放时间改为1周

1
2
3
4
5
6
7
8
# never purge:
#PURGE_DENY =
#
# purge entries older than 1 week
PURGE_DENY = 1w
#
# purge entries older than 5 days
#PURGE_DENY = 5d

3)修改IP释放最大次数PURGE_THRESHOLD
设定某个IP被屏蔽多少次之后永久屏蔽,如IP被屏蔽5次后永久屏蔽

1
PURGE_THRESHOLD = 5

4)修改禁止的服务名BLOCK_SERVICE
一般默认是sshd,我们不需要修改。

5)修改无效账户最大尝试次数DENY_THRESHOLD_INVALID
一个无效账户登陆失败的最大次数,超过该次数即被屏蔽,如修改为尝试5次登陆失败即屏蔽

1
DENY_THRESHOLD_INVALID = 5

6)修改有效账户最大尝试次数DENY_THRESHOLD_VALID
一个有效账户(不包括root账户)登陆失败的最大次数,超过该次数即被屏蔽,如修改为尝试10次登陆失败即屏蔽

1
DENY_THRESHOLD_VALID = 10

7)修改root账户最大尝试次数DENY_THRESHOLD_ROOT
root账户登陆失败的最大次数,超过该次数即被屏蔽,如修改为尝试5次登陆失败即屏蔽

1
DENY_THRESHOLD_ROOT = 5

8)修改LOCK_FILE文件位置
当存在LOCK_FILE时,DenyHosts会马上退出,该文件保证了DenyHosts只运行一个实例。
debian系统改为如下形式

1
2
3
4
5
6
7
8
9
# Redhat/Fedora:
#LOCK_FILE = /var/lock/subsys/denyhosts
#
# Debian
LOCK_FILE = /var/run/denyhosts.pid
#
# Misc
#LOCK_FILE = /tmp/denyhosts.lock
#

9)修改守护进程IP释放时间DAEMON_PURGE
在脚本运行过程中,我们实际上是运行在守护进程模式下的,因此IP释放时间并没有由PURGE_DENY控制,而是由DAEMON_PURGE控制的,因此我们需要修改该变量:

1
DAEMON_PURGE = 1h

3、修改守护进程控制脚本daemon-control

daemon-control脚本实际上控制着DenyHosts的启动、关闭等操作,DenyHosts一般运行在守护进程模式下。

1
vi daemon-control

在daemon-control脚本文件中,你需要设置好DENYHOSTS_BIN, DENYHOSTS_LOCK, DENYHOSTS_CFG这几个值,对于debian系统来说需要改为如下形式

1
2
3
DENYHOSTS_BIN = "/usr/local/bin/denyhosts.py"
DENYHOSTS_LOCK = "/var/run/denyhosts.pid"
DENYHOSTS_CFG = "/usr/share/denyhosts/denyhosts.cfg"

添加可执行权限

1
2
chown root daemon-control
chmod 700 daemon-control

4、添加到系统自启动

1
2
3
cd /etc/init.d
ln -s /usr/share/denyhosts/daemon-control denyhosts
update-rc.d denyhosts defaults

启动DenyHosts

1
/etc/init.d/denyhosts start

DenyHosts的日志位置为/var/log/denyhosts

自己IP被屏蔽的解决办法

1、关闭DenyHosts服务

1
/etc/init.d/denyhosts stop

2、清空登陆log

1
echo "" > /var/log/auth.log

3、清空/var/lib/denyhosts目录文件
进/usr/share/denyhosts/data目录,把目录下所有文件内容清空一遍(这个是DenyHosts自己的log目录)

1
rm /usr/share/denyhosts/data/*

4、删除/etc/hosts.deny中自己的IP

5、启动DenyHosts

1
/etc/init.d/denyhosts start

参考文章:
Preventing SSH Dictionary Attacks With DenyHosts
denyhost启动的错误提示和解决
denyhosts—一个极失败的研究

此条目发表在服务器分类目录,贴了标签。将固定链接加入收藏夹。