There were X failed login attempts since the last successful login

如题,开始玩Linux的人,每次登陆的时候,肯定会遇到这个提示,好担心系统被人攻破,那怎么把这些试探的IP抓出来,并屏蔽呢,今天就记录一下我的做法,供大家参考

其实这个问题已经在系统级别支持解决,目前已有的解决办法如下:

1 使用 ssh-keygen,禁用密码登陆

2 使用PAM模块,参考HowTo: Configure Linux To Track and Log Failed Login Attempt Records,其实就是登陆尝试次数设置和延时

我的解决思路如下:

1 通过脚本获取尝试登陆失败的IP

2 将获取的IP写入到/etc/hosts.deny文件,进行屏蔽

3 使用inotify-tools,监控/var/log/secure文件,来实时更新/etc/hosts.deny文件

下面我详细说明操作过程和原理:

1 安装inotify-tools

inotify-tools 是为linux(内核2.6.1以上均支持)下inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件。 inotify-tools是用c编写的,除了要求内核支持inotify外,不依赖于其他。inotify-tools提供两种工具,一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数

安装过程
root.~:wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz --no-check-certificate  #下载
root.~:tar zxvf inotify-tools-3.14.tar.gz  #解压
root.~:cd inotify-tools-3.14
root.~:./configure&&make&&make install  #安装

2 编写监控脚本

root.scripts:vi SecureLogWatch 

#!/bin/bash
#
#Description:
#Use Inotify-tools to monitor the modify of /var/log/secure file
#And add the illegal login ip to /etc/hosts.deny file
#
#Time:2015 Auther:Lee

#1 初始化数值
export TotalLine=`cat /var/log/secure|wc -l`
export LastLine=1

#2 监控/var/log/secure file 文件的修改
while inotifywait -e modify /var/log/secure;

do
    if tail -n +$LastLine /var/log/secure|grep "Failed password";then
#2.1 将非法 ip写入到 /etc/host.deny文件
        cat /var/log/secure | tail -n +$LastLine | grep ‘Failed password‘|awk ‘$11~/\./ { print $11} $9~/invalid/{print $13}‘|sort|uniq|        sed ‘s/$/,/g‘|tr -d "\n"|sed ‘s/^/sshd : /g‘|sed ‘s/,$/\n/g‘ 1>>/etc/hosts.deny  

#2.2 更新日志读取位置
        TotalLine=`cat /var/log/secure|wc -l`
        LastLine=${TotalLine}
    fi
sleep 2  #因为更新一次secure文件,inotify会短时间内监测到两次修改,为避免重复ip,无奈sleep会儿
done

注释:说一下脚本功能和其中用到的知识点

脚本功能:实时读取/var/log/secure文件的变化,然后把增量更新的内容进行查找,对于非法实验的ip,会加入到etc/hosts.deny文件中进行屏蔽。存在的问题有:由于失败一次就进行屏蔽,所以会误杀;会添加重复记录到etc/hosts.deny文件中

知识点:

1 inotify使用:inotifywait -e modify /var/log/secure  #监测文件是否修改

2 awk字符串判断和打印:awk ‘$11~/\./ { print $11} $9~/invalid/{print $13} #判断是否存在IP地址中的”.”,存在则打印ip列,不存在则打印机另一列

3 tail外部变量使用:tail -n +$LastLine  #每次读取上次读到的日志行 一直到日志尾部

4 sed字符替换和外部变量使用:sed ‘s/$/,/g‘  #替换换行符为逗号

5 tr 删除和替换,来合并多行:tr -d "\n"   #删除每行尾部的换行符,合并多个行

6 sort|uniq 排序和删除重复行

7 关于sed外部变量的使用,下面这种情况应该就是不支持吧,支持的情况,看下面链接:

LastLine=0;
TotalLine=120;
root.~:sed -n "${LastLine},${TotalLine}p" ~/secure.bak;echo $TotalLine
sed:-e 表达式 #1,字符 6:非法使用地址0

上面使用sed的变量,总是报错,各种方式尝试,都不行,换成下面也不行 呵呵
LastLine=0;
TotalLine=120;
cat ~/secure.bak | sed -n ‘/‘"$LastLine"‘,‘"$TotalLine"‘/p‘ ~/secure.bak

sed当中使用变量替换以及执行外部命令

3 运行脚本

运行脚本有几种方式

1 直接运行
root.scripts:sh SecureLogWatch
2 在线后台运行
root.scripts:sh SecureLogWatch &
3 离线后台运行
root.scripts:nohup ./ecureLogWatch &
4 可以直接加入到开机自启动,自行实现吧

参考:

inotify 安装

inotify-tools使用方法介绍

时间: 2024-10-07 13:42:31

There were X failed login attempts since the last successful login的相关文章

phoenix连接hbase数据库,创建二级索引报错:Error: org.apache.phoenix.exception.PhoenixIOException: Failed after attempts=36, exceptions: Tue Mar 06 10:32:02 CST 2018, null, java.net.SocketTimeoutException: callTimeou

环境描述: 操作系统版本:CentOS release 6.5 (Final) 内核版本:2.6.32-431.el6.x86_64 phoenix版本:phoenix-4.10.0 hbase版本:hbase-1.2.6 表SYNC_BUSINESS_INFO_BYDAY数据库量:990万+ 问题描述: 通过phoenix客户端连接hbase数据库,创建二级索引时,报下面的错误: 0: jdbc:phoenix:host-10-191-5-226> create index SYNC_BUSI

Linux课程第三天学习笔记

####################2.vim####################1)vim命令模式在vim的命令模式下可以配置vim的工作方式:set nu            ##添加行号:set nonu        ##取消行号:set mouse=a        ##添加鼠标选择:set cursorline        ##显示行线以上设定都是临时的,永久的设定方式如下:vim /etc/vimrc        ##此文件为vim的配置文件,在此文件最后加入以上参数

作业   5,6,9,12

<<<五-六单元练习>>>1.新建用户组,shengchan,caiwu,jishu [[email protected] ~]# groupadd shengchan[[email protected] ~]# groupadd caiwu[[email protected] ~]# groupadd jishu 2.新建用户要求如下:        * tom 是shengchan组的附加用户        * harry 是caiwu组的附加用户        *

CentOS创建账号无法登陆

CentOS测试,创建jack账号,删除时只使用userdel jack,没加参数 账号删除成功,但是对应的home文件夹/home/jack并没有删除. 重新创建账号,设置密码,尝试登陆,提示以下错误: Last failed login: Wed Mar  8 14:05:39 CST 2017 from 10.15.105.20 on ssh:notty There were 8 failed login attempts since the last successful login.

每天一个Linux命令(62)rcp命令

    rcp代表"remote file copy"(远程文件拷贝).     (1)用法:     用法:  rcp [参数] [源文件] [目标文件]     (2)功能:     功能:  rcp命令用于在计算机之间拷贝文件. rcp命令使在两台Linux主机之间的文件复制操作更简单.通过适当的配置,在两台Linux主机之间复制文件而无需输入密码,就像本地文件复制一样简单. rcp命令有两种格式.第一种格式用于文件到文件的拷贝:第二种格式用于把文件或目录拷贝到另一个目录中.  

Hadoop 安装 第一天 环境搭建(二)

配置IP地址: 设置IP地址网关,如下为master机器设置,slave1与slave2按照同样方法配置. 配置完成,重启网卡service network restart , 查看ip   ifconfig 三台虚拟机,master,slave1,slave2 hosts映射: 修改 :vim /etc/hosts 检查配置是否生效 [[email protected] ~]# ping slave1PING slave1 (192.168.109.11) 56(84) bytes of da

MySQL架构之MHA架构实战

一.MHA原理 1.简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用. 该软件由两部分组成:MHA M

rsync工具的常用选项、ssh同步介绍

1. rsync工具介绍 rsync是数据备份工具(字面意思可以理解为远程同步),不仅可以远程同步数据,而且可以本地同步数据(类似与cp),但不同于cp或scp的一点是,它不会覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖. 安装rsync命令:#yum install -y rsync 讲解rsync的用法 举例将/etc/passwd同步到/tmp/目录下,并改名为1.txt,操作如下: # rsync -av /etc/pa

64个命令,每天一个linux命令目录, shutdown,tee,rcp,

每天一个linux命令目录 开始详细系统的学习linux常用命令,坚持每天一个命令,所以这个系列为每天一个linux命令.学习的主要参考资料为: 1.<鸟哥的linux私房菜> 2.http://codingstandards.iteye.com/blog/786653 3.linux命令五分钟系列 4.其他互联网资料,google,baidu等搜索引擎 11. 每天一个linux命令(11):nl命令 12. 每天一个linux命令(12):more命令 13. 每天一个linux命令(13