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: Auther:Lee
# 初始化数值
export TotalLine=`cat /var/log/secure|wc -l`
export LastLine=
# 监控/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|\
>>/etc/hosts.deny
#2.2 更新日志读取位置
TotalLine=`cat /var/log/secure|wc -l`
LastLine=${TotalLine}
fi
#因为更新一次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=;
TotalLine=;
root.~:sed -n "${LastLine},${TotalLine}p" ~/secure.bak;echo $TotalLine
,字符 :非法使用地址0
上面使用sed的变量,总是报错,各种方式尝试,都不行,换成下面也不行 呵呵
LastLine=;
TotalLine=;
cat ~/secure.bak | sed -n '/'"$LastLine"','"$TotalLine"'/p' ~/secure.bak
3 运行脚本
运行脚本有几种方式
直接运行 root.scripts:sh SecureLogWatch 在线后台运行 root.scripts:sh SecureLogWatch & 离线后台运行 root.scripts:nohup ./ecureLogWatch & 可以直接加入到开机自启动,自行实现吧
参考:
There were X failed login attempts since the last successful login的更多相关文章
- Number of failed login attempts exceeds threshold value
OEM发出好多告警,Number of failed login attempts exceeds threshold value. profile当前配置10次失败就会锁定user 查看下,dba_ ...
- 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
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- 【异常】org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions:
1 Phoenix远程无法连接但是本地可以连接,详细异常 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found bindin ...
- GET: https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login? loginicon=true &uuid=odcptUu2JA==&tip=0
GET: https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login? loginicon=true &uuid=odcptUu2JA==&am ...
- JAVA API访问Hbase org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=32
Java使用API访问Hbase报错: 我的hbase主节点是spark1 java代码访问hbase的时候写的是ip 结果运行程序报错 不能够识别主机名 修改主机名 修改主机hosts文 ...
- Fail2ban 防止暴力破解centos服务器的SSH或者FTP账户
次尝试登陆root账户失败的情况.[说明服务器被攻击了] logtarget = SYSLOG #我们需要做的就是把这行改成/var/log/fail2ban.log,方便用来记录日志信息 so ...
- Shell跳板机sshstack
笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 源码地址: https://github.com/sshstack/sshstack 为什么要写shell跳板机? ...
- 3-3 Hadoop集群完全分布式配置部署
Hadoop集群完全分布式配置部署 下面的部署步骤,除非说明是在哪个服务器上操作,否则默认为在所有服务器上都要操作.为了方便,使用root用户. 1.准备工作 1.1 centOS6服务器3台 手动指 ...
- xshell连接ubuntu系统
1.登录虚拟机 2.关闭本机所有防火墙和杀毒软件 sudo ufw status 查看防火墙状态 sudo ufw disable 关闭防火墙 sudo ufw enable 打开防火墙 3.安装ss ...
随机推荐
- entity framework学习
资源 Entity Framework技术导游系列开篇与热身
- Appium python
1.运行报错:FAILED_ALREADY_EXISTS: Attempt to re-install io.appium.android.ime without first uninstalling ...
- Java 中的函数式编程(Functional Programming):Lambda 初识
Java 8 发布带来的一个主要特性就是对函数式编程的支持. 而 Lambda 表达式就是一个新的并且很重要的一个概念. 它提供了一个简单并且很简洁的编码方式. 首先从几个简单的 Lambda 表达式 ...
- Go 语言打包静态文件
对于 Go 语言开发者来说,在享受语言便利性的同时,最终编译的单一可执行文件也是我们所热衷的.但是,一旦遇到我们需要分发的东西不只有可执行文件的时候,事情就变得稍微有点复杂了,例如,需要分发个默认的配 ...
- 浅谈我的MongoDB学习(二)
上一篇简单讲了mongodb的安装,mongo的windows服务安装,这样服务器重启windows服务会自动重启mongodb的server,然后我们就可以用客户端去管理数据了.mongodb客户端 ...
- Zabbix实战-简易教程--告警屏蔽(Maintenances)
Zabbix Maintenance 一.Zabbix Maintenance(zabbix告警屏蔽) 很多时候,我们需要在某段时间更新维护线上环境,这个时候你是已知触发器会引发报警,所以此时你可以提 ...
- 针对Oracle的审计方案
主题:针对Oracle的审计方案 数据库环境:Oracle 11g 数据库审计需求: 1.需要对连接数据库的行为进行审计 2.需要对核心表的DML操作进行审计 3.需要迁移审计数据到指定表空间 4.需 ...
- python 数据类型之集合
一.集合的定义: 定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key. 特性:集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值 二 ...
- JS原型、原型链深入理解
原型是JavaScript中一个比较难理解的概念,原型相关的属性也比较多,对象有”prototype”属性,函数对象有”prototype”属性,原型对象有”constructor”属性. 一.初识原 ...
- CodeForces839-B. Game of the Rows-水题(贪心)
最近太zz了,老是忘记带脑子... 补的以前的cf,发现脑子不好使... B. Game of the Rows time limit per test 1 second memory limit ...