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 ...
随机推荐
- TabHost用法
tabhost用两种方法 方法一:Activity继承TabActivity后用getTabHost()方法来获取tabhost(前提:Activity的setContentView要删除,这样布局才 ...
- mydumper
Mydumper介绍 Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具.开发人员主要来自MySQL,Facebook,SkySQL公司.目前已经在一些线上使用了Mydu ...
- JAVA 将图片转换为Base64编码
这里使用的jar包是commons-codec-1.10.jar; 示例代码 import java.io.FileInputStream; import java.io.FileOutputStre ...
- C/C++知识点清单01
第一章 C/C++程序基础 一.一般赋值语句: 考察一般赋值语句的概念和方法. 1.程序: #include<stdio.h> int main(void) { ,y,z; x*=(y=z ...
- JaveScript数组(JS知识点归纳五)
1.概念 a)作用--用于保存多个数据,便于对数据的使用 b)数组元素--数组中的数据 c)索引--数组中的元素按照下标(数值)的方式排列(从0 开始),依次递增(也有可能是字符串的类型--不用) d ...
- 运用C语言将图片转换成16进制的字符串(base64)
最近在写手机端的性能测试脚本的时候,发现手机在上传图片数据时,先将图片转换成一堆16进制的字符,将字符传输过去,服务器再将字符解码成图片 我们在loadrunner中测试时,就需要用C语言将图片编码. ...
- CVE-2017-8635复现
在最近几个月里,我花了一些时间深入了Device Guard以及如何实现用户模式代码完整性(UMCI).如果您对Device Guard不熟悉,您可以 在这里阅读更多信息.通常情况下,UMCI可防止未 ...
- BZOJ 3038: 上帝造题的七分钟2【线段树区间开方问题】
3038: 上帝造题的七分钟2 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1469 Solved: 631[Submit][Status][Dis ...
- Codeforces Round #415 (Div. 2)(A,暴力,B,贪心,排序)
A. Straight «A» time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...
- JAVA爬虫实践(实践三:爬虫框架webMagic和csdnBlog爬虫)
WebMagic WebMagic是一个简单灵活的Java爬虫框架.基于WebMagic,你可以快速开发出一个高效.易维护的爬虫. 采用HttpClient可以实现定向的爬虫,也可以自己编写算法逻辑来 ...