当前位置:爱推吧 » linux学习 » linux下使用denyhosts防止SSH暴力破解

linux下使用denyhosts防止SSH暴力破解

工作中的linux服务器每天都会有无数的SSH失败尝试记录,有些无人一直不停的扫描,使用软件在那里穷举扫描,所以大家第一要记的设置一个好的够复杂的密码,并且最好更换ssh登陆的端口,具体方法,请参考Linux SSH更改端口号详细教程

怎么样防,如果要一条一条将这些IP阻止显然治标不治本,还好有DenyHosts软件来代替我们手搞定他。
DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件,当发现重复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。

DenyHosts官方网站为:http://denyhosts.sourceforge.net

以下是安装配置教程(以CentOS6.0, DenyHosts 2.6 为例)

1.安装

wget http://colocrossing.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz&& -zxvf DenyHosts-2.6.tar.gz && cd DenyHosts-2.6 && python setup.py install

默认是安装到/usr/share/denyhosts目录的。

2.配置

cd /usr/share/denyhosts/

cp denyhosts.cfg-dist denyhosts.cfg

vi denyhosts.cfg

根据自己需要进行相应的配置

SECURE_LOG = /var/log/secure

#ssh 日志文件,它是根据这个文件来判断的。

HOSTS_DENY = /etc/hosts.deny

#控制用户登陆的文件

PURGE_DENY = 5m
#过多久后清除已经禁止的

BLOCK_SERVICE  = sshd
#禁止的服务名

DENY_THRESHOLD_INVALID = 1
#允许无效用户失败的次数

DENY_THRESHOLD_VALID = 5
#允许普通用户登陆失败的次数

DENY_THRESHOLD_ROOT = 5
#允许root登陆失败的次数

HOSTNAME_LOOKUP=NO
#是否做域名反解

ADMIN_EMAIL =
#管理员邮件地址,它会给管理员发邮件

DAEMON_LOG = /var/log/denyhosts
#自己的日志文件

3.设置启动脚本

cp daemon-control-dist daemon-control

chown root daemon-control

chmod 700 daemon-control

完了之后执行daemon-contron start就可以了。

./daemon-control start

如果要使DenyHosts每次重起后自动启动还需做如下设置:

ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts

chkconfig --add denyhosts

chkconfig  denyhosts on然后就可以启动了:

service denyhosts start

可以看看/etc/hosts.deny内是否有禁止的IP,有的话说明已经成功了。

注.我发现时间deny以后,删除ip的时间不是很准.解决的方法是改变DAEMON_PURGE = 这个的时间.我发现系统删除时间是以他为准.

DAEMON_PURGE:预设清除:当DenyHosts在预设模式下执行,执行清除机械作用过期最久的HOSTS_DENY,这个会影响PURGE_DENY的间隔。

****************************************************************

denyhost启动的错误提示和解决

启动时出现了错误,可以使用下面方式解决
./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/
./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

./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
OK!
启动完成啦。
你可以使用
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
到这里错误很明了了,经过查询发现版本不对会导致这个问题。

分析后发现原因在此:以前本机已经有一个python2.4的版本,使用rpm安装的,默认的路径是/usr/lib/python2.4,因为要升级python到2.5,也没有对卸载这个2.4的版本,使用编译安装的python2.5,安装路径并没有配置,这默认安装到/usr/local/lib/python2.5这个路径,而目前激活的python环境是2.5的,可能因为denyhosts安装时会根据环境查找安装,因此会在/usr/local/lib/python2.5/site-packages路径下安装Denyhosts这个文件夹。当运行denyhosts时,脚本会指定使用的是/usr/lib/python*这个路径的python里(暂时没找到脚本哪个地方指定),因此它无法定位python的版本,会出现这个错误。

最快速的解决方法是把/usr/local/lib/python2.5/site-packages路径下的Denyhosts文件夹整个拷贝到2.4的安装目录下即可。
进入/usr/local/lib/python2.5/site-packages/目录
cd /usr/local/lib/python2.5/site-packages/
cp –rp Denyhosts /usr/lib/python2.4/ site-packages/

这样之后便可以启动Denyhosts了。

关于错误
Traceback (most recent call last):
File "/usr/local/python-2.4/bin/denyhosts.py", line 5, in ?
import DenyHosts.python_version
ImportError: No module named DenyHosts.python_version

需要修改下面的部分:

1、/usr/share/denyhosts/daemon-control
PYTHON_BIN      = "/usr/bin/env python"
改为
PYTHON_BIN     = "/usr/local/python-2.4/bin/python"
#!/usr/bin/env python
改为
#!/usr/local/python-2.4/bin/python
DENYHOSTS_BIN   = "/usr/bin/denyhosts.py"
改为
DENYHOSTS_BIN   = "/usr/local/python-2.4/bin/denyhosts.py"

2.cp -rp /usr/local/python-2.4/lib/python2.4/site-packages/DenyHosts/  /usr/local/python-2.4/lib/python2.4/

2 个吐槽 on “linux下使用denyhosts防止SSH暴力破解”

发表评论

电子邮件地址不会被公开。 必填项已用*标注