DenyHosts防止ssh暴力破解

当你的linux服务器暴露在互联网之中,该服务器将会遭到互联网上的扫描软件进行骚描,并试图猜测SSH登录口令。你会发现,每天会有多条SSH登录失败纪录。那些扫描工具将对你的服务器构成威胁,你必须设置复杂登录口令,并将尝试多次登录失败的IP给阻止掉,让其在一段时间内不能访问该服务器。

DenyHosts可以阻止试图猜测SSH登录口令,它会分析/var/log/secure等日志文件,当发现同一IP在进行多次SSH密码尝试时就会记录IP/etc/hosts.deny文件,从而达到自动屏蔽该IP的目的。

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

DenyHosts安装

 [root@switch DenyHost]# tar -zxvf DenyHosts-2.6.tar.gz

 [root@switch DenyHost]# cd DenyHosts-2.6

 [root@switch DenyHosts-2.6]# python setup.py install

DenyHosts参数配置

[root@switch DenyHosts-2.6]# cd /usr/share/denyhosts/ DenyHosts默认安装目录

[root@switch denyhosts]# cp denyhosts.cfg-dist denyhosts.cfg

DenyHosts配置文件:

 

vim denyhousts.cfg

SECURE_LOG = /var/log/secure #ssh 日志文件,它是根据这个文件来判断的。
HOSTS_DENY = /etc/hosts.deny #
控制用户登陆的文件
PURGE_DENY = 1h#
过多久后清除已经禁止的
BLOCK_SERVICE = sshd#
禁止的服务名
DENY_THRESHOLD_INVALID = 3#
允许无效用户失败的次数
DENY_THRESHOLD_VALID = 5#
允许普通用户登陆失败的次数
DENY_THRESHOLD_ROOT = 5#
允许root登陆失败的次数
HOSTNAME_LOOKUP=NO#
是否做域名反解

DAEMON_PURGE = 1h
DAEMON_LOG = /var/log/denyhosts#
自己的日志文件
ADMIN_EMAIL = XXX@XXX #
管理员邮件地址,它会给管理员发邮件

自动清除ip的时间和设定的不一致,后来网上查资料才知道

PURGE_DENY = 1h //1小时后清除要和DAEMON_PURGE = 1h //默认是1h的值一样才行。

DenyHosts启动文件配置

[root@switch denyhosts]# cp daemon-control-dist daemon-control

[root@switch denyhosts]# chown root daemon-control

[root@switch denyhosts]# chmod 700 daemon-control

[root@switch denyhosts]# ./daemon-control #DenyHosts命令格式

Usage: ./daemon-control {start [args...] | stop | restart [args...] | status | debug | condrestart [args...] }

For a list of valid args refer to:

$ denyhosts.py --help

[root@switch denyhosts]# ./daemon-control start #启动DenyHosts

starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg

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

[root@switch denyhosts]# ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts

[root@switch denyhosts]# chkconfig --add denyhosts

[root@switch denyhosts]# chkconfig denyhosts on

查看日志:

[root@switch denyhosts]# tail -f /var/log/secure

Aug 5 19:20:51 switch sshd[5831]: Accepted password for root from ::ffff:192.168.1.31 port 1744 ssh2

Aug 5 19:21:00 switch sshd[5831]: Received disconnect from ::ffff:192.168.1.31: 0:

Aug 5 19:21:02 switch sshd[5865]: Accepted password for root from ::ffff:192.168.1.31 port 1745 ssh2

Aug 5 19:30:25 switch sshd[5865]: Received disconnect from ::ffff:192.168.1.31: 0:

Aug 5 19:33:48 switch sshd[5962]: Failed password for test from ::ffff:192.168.1.31 port 175