Linux/Centos7通过DenyHosts阻止SSH口令攻击

DenyHosts介绍

  DenyHosts是一个python脚本帮助阻止SSH攻击(基于字典或暴力的密码攻击),它的原理很简单:通过分析系统安全日志(/var/log/secure)中的无效登录者的IP和无效登录次数与用户设置的阈值进行比较,如果尝试次数超过用户设置的阈值则将该IP加入/etc/hosts.deny,实现将其封锁。

DenyHosts版本与分支

  DenyHosts最早由Phil Schwartz开发,并在2.6版本之后停止发布更新,之后由Matt Ruffalo在Github继续开发。笔者编写本文时,已经预发行了3.1beta版,该版本支持python的任意版本,本次部署将使用此版本。如果你的python版本较低(2.7及以下),请使用DenyHosts 2.10。

本次部署环境及版本

  • Centos 7.7
  • DenyHosts 3.1 beta
  • python 2.7.5

通过封锁无用端口来防止未知漏洞可能造成的安全隐患

  端口可以理解成用户访问一台服务器上不同的服务所走的不同的通道,这个通道就叫端口号。这里容易存在一个误区:并非端口存在安全隐患,而是监听在该端口上的服务可能存在漏洞,封锁端口只是阻断了黑客的攻击途径,并没有从根本上解决服务本身可能存在的漏洞。每一种应用层协议默认对应一个(或多个)TCP或UDP端口,端口号的范围是1-65535。比如http协议对应TCP的80端口、ssh协议对应TCP的22端口,一台服务器上默认会运行一些不需要的服务(或是需要运行但不需要对外提供访问的服务),尤其是Windows操作系统,为了确保兼容性和易用性,Windows操作系统默认开启了很多服务,监听了很多端口,比如135/137/138/139/445等等,这会将服务器置于非常危险的处境,所以禁用不需要的端口至关重要。以web服务为例,下面是常见的应用场景和封锁方案:

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×