DenyHosts安装与部署

DenyHosts是Python语言写的一个程序软件,运行于Linux上预防SSH暴力破解的,它会分析sshd的日志文件(/var/log/secure),当发现重复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。

安装

[root@miner—k ~]# tar zxvf DenyHosts-2.6.tar.gz      #解压源码包
[root@miner—k ~]# cd DenyHosts-2.6                   #进入安装解压目录
[root@miner—k ~]# python setup.py install            #安装DenyHosts
[root@miner—k ~]# cd /usr/share/denyhosts/           #默认安装路径
[root@miner—k ~]# cp denyhosts.cfg-dist denyhosts.cf #denyhosts.cfg为配置文件
[root@miner—k ~]# cp daemon-control-dist daemon-control                     #daemon-control为启动程序
[root@miner—k ~]# chown root daemon-control          #添加root权限
[root@miner—k ~]# chmod 700 daemon-control           #修改为可执行文件
[root@miner—k ~]# ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts     #对daemon-control进行软连接,方便管理

安装到这一步就完成了。
[root@miner—k ~]# /etc/init.d/denyhosts start        #启动denyhosts
[root@miner—k ~]# chkconfig --add denyhosts
[root@miner—k ~]# chkconfig denyhosts on             #将denghosts设成开机启动

设置配置文件

[root@miner—k ~]#vim /usr/share/denyhosts/denyhosts.cfg        

       ############ THESE SETTINGS ARE REQUIRED ############

SECURE_LOG = /var/log/secure                  #ssh 日志文件 #redhat系列根据/var/log/secure文件来判断;
                                                           #Mandrake、FreeBSD根据 /var/log/auth.log来判断;
                                                           #SUSE则是用/var/log/messages来判断,这些在配置文件里面都有很详细的解释。
HOSTS_DENY = /etc/hosts.deny                  #控制用户登录的文件
PURGE_DENY = 30m                              #过多久后清除已经禁止的,设置为30分钟;
# ‘m’ = minutes
# ‘h’ = hours
# ‘d’ = days
# ‘w’ = weeks
# ‘y’ = years
BLOCK_SERVICE = sshd                         #禁止的服务名,当然DenyHost不仅仅用于SSH服务
DENY_THRESHOLD_INVALID = 1                   #允许无效用户失败的次数
DENY_THRESHOLD_VALID = 3                     #允许普通用户登陆失败的次数
DENY_THRESHOLD_ROOT = 3                      #允许root登陆失败的次数

DENY_THRESHOLD_RESTRICTED = 1                #设定 deny host 写入到该资料夹  
WORK_DIR = /usr/share/denyhosts/data     #将deny的host或ip记录到work_dir中  
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES  
HOSTNAME_LOOKUP=YES                         #是否做域名反解  
LOCK_FILE = /var/lock/subsys/denyhosts      #将DenyHost启动的pid记录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务

       ############ THESE SETTINGS ARE OPTIONAL ############
ADMIN_EMAIL =                           #管理员邮箱
SMTP_HOST = 
SMTP_PORT = 
SMTP_FROM = 
SMTP_SUBJECT = DenyHosts Report         #邮件主题
AGE_RESET_VALID=5m                      #有效用户登录失败计数归零的时间
AGE_RESET_ROOT=10m                      #root用户登录失败计数归零的时间
AGE_RESET_RESTRICTED=10m                #用户的失败登录计数重置为0的时间(/usr/share/denyhosts/data/restricted-usernames)
AGE_RESET_INVALID=5m                    #无效用户登录失败计数归零的时间


   ######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE  ##########


DAEMON_LOG = /var/log/denyhosts              #DenyHosts日志文件存放的路径,默认
DAEMON_SLEEP = 30s                           #当以后台方式运行时,每读一次日志文件的时间间隔。
DAEMON_PURGE = 10m                           #当以后台方式运行时,清除机制在 HOSTS_DENY 中终止旧条目的时间间隔,这个会影响PURGE_DENY的间隔。
RESET_ON_SUCCESS = yes                      #如果一个ip登陆成功后,失败的登陆计数是否重置为0



更改DenyHosts的默认配置之后,重启DenyHosts服务即可生效:
[root@miner-k denyhosts]# pwd
/usr/share/denyhosts
[root@miner-k denyhosts]# ./daemon-control start        #重启denyhosts

控制用户登录

hosts.deny和hosts.allow

  • 如果在hosts.allow中的条目能匹配上,访问将被允许。
  • 如果在hosts.deny中的条目能匹配上,访问将被拒绝。
  • 其他的都允许通过。

文件中的书写规则

以 “/” 和“#”开头的或者是空行都会被过滤掉。

 daemon_list : client_list [ : shell_command ]
名称简介
daemo要监控的服务,如telent、ftpd、sshd
client主机名、IP地址/IP范围、或域名
选项名称简介
allow对客户端的访问
deny对客户端的访问
except会匹配第一个列表中所有项,除非匹配第二个列表。例如,允许 domainA 中所有项,除了 hostX.domainA 和 hostY.domanA。
  • 当一行有多个守护进程或客户端时,用逗号分隔开来。
  • 可以用 ALL 关键字来表示所有守护进程或所有客户端。
  • LOCAL 关键字表示匹配所有不包含点号(“.”)的主机;这表示所有与域不相关的主机。

实例

hosts.deny 可以拒绝所有客户端访问所有守护进程
ALL:ALL
hosts.allow 为了能让所有守护进程从本地主机(即,与域名不相关的主机)访问
ALL:LOCAL : allow
假设仅仅允许属于 mydomain.com 域的主机使用 telnet 或 ssh

以下的 hosts.allow 条目能完成此任务:

telnetd,sshd:.mydomain.com :allow

注意:本例中 mydomain.com 之前的点号(“.”)。这是个通配符,表示所有主机以 mydomain.com 结尾。我们还在规则结尾指定这是一条允许规则。尽管这不是严格限制,但如前所述,这样做是一种好的做法。

允许指定的IP地址或者网段登录服务器

现在进一步假设我们允许使用以下 IP 地址远程登录 ssh 和 telnet:192.168.4.10 和所有以 192.168.6 开头的 IP 地址

telnetd,sshd:192.168.4.10 , 192.168.6.: allow

注意:在部分 IP 地址后使用点号”.”这相当于 192.168.6.*.,或者更精确一点,以 192.168.6 开头的所有 IP 地址。另一种看待 192.168.6. 范围内 IP 地址的方法是等于 192.168.6.0/24 或所有 192.168.6.1 与 192.168.6.254 之间的 IP 地址

一个域中除了某一个主机名之外的其他主机都允许访问

允许从 mydomain.com 域中的所有主机上进行 ftp 访问,除了 mydomain.com 中的两个主机:uktrip1 和 uktrip2 。

ftpd:.mydomain.com except uktrip1.mydomain.com, uktrip2.mydomain.com : allow

被denyhost服务禁止的现象

这里写图片描述

telnet 检查sshd服务,被denyhost服务禁止没有显示版本号
这里写图片描述

telnet 检查sshd服务,正常情况下的显示:
这里写图片描述

清除一个禁止的IP

删除一个已经禁止的主机IP,并加入到允许主机例表,只在 /etc/hosts.deny 删除是没用的。需要进入工作 目录(WORK_DIR),进入以下操作:

1、停止DenyHosts服务:

[root@miner-k denyhosts]# service denyhosts stop

2、在 /etc/hosts.deny 中删除你想取消的主机IP
3、编辑 DenyHosts 工作目录的所有文件,通过

[root@miner-k data]# pwd
/usr/share/denyhosts/data

[root@miner-k data]# grep 117.78.49.95  *
hosts:117.78.49.95:12:Tue Jan  2 23:25:32 2018
hosts-restricted:117.78.49.95:0:Tue Jan  2 22:48:20 2018
hosts-root:117.78.49.95:1:Tue Jan  2 23:25:02 2018
hosts-valid:117.78.49.95:0:Tue Jan  2 22:54:30 2018
users-hosts:qq - 117.78.49.95:3:Tue Jan  2 22:54:30 2018
users-hosts:root - 117.78.49.95:11:Tue Jan  2 23:25:02 2018

4、 添加你想允许的主机IP地址到 allowed-hosts(如果有)

5、启动DenyHosts服务:

[root@miner-k data]# /etc/init.d/denyhosts start
或者
[root@miner-k denyhosts]# pwd
/usr/share/denyhosts
[root@miner-k denyhosts]# ./daemon-control start

或者简单粗暴的直接允许访问

[root@miner-k denyhosts]# cat /etc/hosts.allow
sshd: 117.78.49.95

参考链接

denyhosts的github地址
denyhosts简介
denyhosts常见的FAQ
IBM 中对tcp wrapper的简介

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值