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