情景:今天登录服务器,突然发现登录之后展示的信息有点多,仔细端倪发现:
There were 3975 failed login attempts since the last successful login. 这很明显是有人想要试图登录我的服务器,企图进行暴力破解。虽然我设置的密码很复杂,但是这种飞来的伤害岂能坐视不管。 于是就使用DenyHosts来进行防御一下: DenyHosts是Python语言写的一个程序软件,运行于Linux上预防SSH暴力破解的,它会分析sshd的日志文件(/var/log/secure),当发现重复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。 当然除了这种方式,还可以彻底一些,不允许以用户名+密码的方式进行登录。而是采用pem方式进行登录(详情) 1. 从官网上下载(http://denyhosts.sourceforge.net/) 2. 解压安装tar zxvf DenyHosts-2.6.tar.gz cd DenyHosts-2.6 python setup.py install cd /usr/share/denyhosts/ cp denyhosts.cfg-dist denyhosts.cfg //配置文件 cp daemon-control-dist daemon-control //启动文件 chown root daemon-control chmod 700 daemon-control
3. 其他设置
#对daemon-control进行软连接,方便管理 ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts /etc/init.d/denyhosts start #启动denyhosts chkconfig --add denyhosts chkconfig denyhosts on #将denghosts设成开机启动
4. 配置文件
############ 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