SSH防暴力破解软件 Denyhosts

原理:

DenyHosts 是Python语言写的一个开源程序,它会定期分析sshd服务的登陆日志,当发现某IP进行多次SSH登陆且登陆失败次数超过阈值时,会将IP记录到 /etc/hosts.deny文件,通过tcpwrapper达到自动屏蔽IP的功能。


TCP wrapper:

tcpwrapper 是一个为 Unix 类服务器提供防火墙服务的程序,任何以 Xinetd 管理的服务都可以通过TcpWrapper来设置防火墙,简单的说,就是针对源IP或域进行允许或拒绝访问的设置;


配置文件:

/etc/init.d/hosts.allow  定义在此文件中的IP允许访问

daemon_list:client_list[:option]

例:sshd: 192.168.1    # 允许 192.168.1.0/24 网段所有主机访问


/etc/init.d/hosts.deny  定义在此文件中的IP不允许访问

配置同上


检查顺序:

      请求

       ↓              

      服务  --->/etc/hosts.allow  --->  匹配成功则放行

                               ↓         

                          /etc/hosts.deny   ---->  匹配成功则拒绝     

                                     ↓                        

                              两个配置文件中没有则允许访问 

注:两个配置文件同时匹配,host.allow 优先生效。


判断服务是否支持TcpWrapper管控:

ldd `which 服务名` |grep wrap


wKiom1d06_TjxEVnAAAZ5JmhzYs412.png

libwrap.so.0  TcpWrapper 的开发库,软件调用此库代表受 TcpWrapper 管控。







最新版本为 2.6 最近更新日期为 2008-10-04

官网:http://denyhosts.sourceforge.net/

FAQ:http://denyhosts.sourceforge.net/faq.html

下载地址:http://nbtelecom.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz


安装:

wget http://nbtelecom.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz

tar xvf DenyHosts-2.6.tar.gz

cd DenyHosts-2.6/

python setup.py install


默认会安装在 /usr/share/denyhosts/ 目录


ln -s daemon_control /etc/init.d/denyhosts  

# 服务脚本


cp denyhosts.cfg-dist denyhosts.cfg

# 配置文件



配置文件详解:(截取有用部分)

 

# Redhat or Fedora Core:

#SECURE_LOG = /var/log/secure   

# ReadHat 系列登陆日志位置


# Mandrake, FreeBSD or OpenBSD: 

SECURE_LOG = /var/log/auth.log  

# FreeBSD 系列登陆日志位置


# SuSE:

#SECURE_LOG = /var/log/messages  

# SuSE 系列登陆日志位置



HOSTS_DENY = /etc/hosts.deny   

# tcpwrapper 配置文件



PURGE_DENY = 5m    

# 清除已禁止主机的时间



BLOCK_SERVICE  = sshd 

# 匹配成功后禁止的服务名称 



DENY_THRESHOLD_INVALID = 5   

# 允许无效用户尝试登陆失败的次数(用户名不在 /etc/passwd 文件中)


DENY_THRESHOLD_VALID = 10  

# 允许普通用户登陆失败的次数(用户名存在 /etc/passwd 文件中)


DENY_THRESHOLD_ROOT = 1   # 允许 root 用户登陆失败的次数


WORK_DIR = /usr/share/denyhosts/data   

# denyhosts 的工作目录,会将 deny 的 hosts 或 IP 记录到 work_dir/ 目录下的文件中


HOSTNAME_LOOKUP=YES

# 是否进行域名反解


LOCK_FILE = /var/run/denyhosts.pid

# pid 文件位置,用来判断 denyhosts 是否在运行状态


ADMIN_EMAIL = [email protected]

# 管理员邮件地址(接收告警邮件)


SMTP_HOST = smtp.mxhichina.com

SMTP_PORT = 25

# SMTP 发件服务器地址及端口号


[email protected]

SMTP_PASSWORD=myispassword

# 发件人帐号及密码


SMTP_FROM = [email protected]

# 发件人地址


SMTP_SUBJECT = DenyHosts Report

# 告警邮件主题


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_LOG = /var/log/denyhosts

# Denyhosts 的日志文件位置


DAEMON_SLEEP = 30s

# 当以后台方式运行时,每读一次日志文件的时间间隔


DAEMON_PURGE = 1h

# 多长时间执行一次 预设清理

# 多久清除一次已被禁止的主机,此值应该小于 PURGE_DENY,PURGE_DENY < DAEMON_PURGE



遇到的问题:

1、清除时间到达后无法无法清除被禁止的主机

解决办法:实际清楚时间由 DAEMON_PURGE 决定,将此值设定与PURGE_DENY相等即可。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章