如题,开始玩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

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

3 运行脚本

运行脚本有几种方式

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

参考:

inotify 安装

inotify-tools使用方法介绍

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

  1. Number of failed login attempts exceeds threshold value

    OEM发出好多告警,Number of failed login attempts exceeds threshold value. profile当前配置10次失败就会锁定user 查看下,dba_ ...

  2. 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 ...

  3. 【异常】org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions:

    1 Phoenix远程无法连接但是本地可以连接,详细异常 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found bindin ...

  4. 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 ...

  5. JAVA API访问Hbase org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=32

    Java使用API访问Hbase报错: 我的hbase主节点是spark1   java代码访问hbase的时候写的是ip 结果运行程序报错 不能够识别主机名 修改主机名     修改主机hosts文 ...

  6. Fail2ban 防止暴力破解centos服务器的SSH或者FTP账户

    次尝试登陆root账户失败的情况.[说明服务器被攻击了]   logtarget = SYSLOG  #我们需要做的就是把这行改成/var/log/fail2ban.log,方便用来记录日志信息 so ...

  7. Shell跳板机sshstack

    笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 源码地址: https://github.com/sshstack/sshstack 为什么要写shell跳板机? ...

  8. 3-3 Hadoop集群完全分布式配置部署

    Hadoop集群完全分布式配置部署 下面的部署步骤,除非说明是在哪个服务器上操作,否则默认为在所有服务器上都要操作.为了方便,使用root用户. 1.准备工作 1.1 centOS6服务器3台 手动指 ...

  9. xshell连接ubuntu系统

    1.登录虚拟机 2.关闭本机所有防火墙和杀毒软件 sudo ufw status 查看防火墙状态 sudo ufw disable 关闭防火墙 sudo ufw enable 打开防火墙 3.安装ss ...

随机推荐

  1. Java学习笔记12(面向对象五:构造方法、this再探)

    在开发中,经常需要在创建对象的同时明确对象对的属性值, 比如一个Person对象创建时候就应该有age和name等属性 那么如何做到在创建对象的同时给对象的属性初始化值呢? 这里介绍构造方法: 1.构 ...

  2. python3之运算符

    1.python算术运算符 >>> a=15 >>> b=5 >>> a+b #加 20 >>> a-b #减 10 >& ...

  3. python之tuple

    1.python元组 Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. #创建元组 >>> tuple2 = 123,456,'hel ...

  4. PC端截取GIF图片的软件

    PC端截取GIF图片的软件分享:下载>>

  5. Nginx常用配置实例(4)

    Nginx作为一个HTTP服务器,在功能实现方面和性能方面都表现得非常卓越,完全可以与Apache相媲美,几乎可以实现Apache的所有功能,下面就介绍一些Nginx常用的配置实例,具体包含虚拟主机配 ...

  6. MVVM 框架解析之双向绑定

    更好的阅读体验,点击 原文地址 MVVM 框架 近年来前端一个明显的开发趋势就是架构从传统的 MVC 模式向 MVVM 模式迁移.在传统的 MVC 下,当前前端和后端发生数据交互后会刷新整个页面,从而 ...

  7. PHP获取DHCP分配的本机IP

    在搭建本地环境的时候,需要用到多个设备,有服务器.打印机连接接设备等.因为DHCP动态分配IP,所以每次重连都会发生IP地址的变更. 解决办法就是将每个设备的本机IP上传到统一的地方保存.因为使用RE ...

  8. ajax解决跨域问题

    1.在介绍之前先介绍几个概念 json: { date: "Sun Dec 24 21:44:42 CST 2017", temperature: "21", ...

  9. Git知识总览(三) 分支的创建、删除、切换、合并以及冲突解决

    前两篇博客集中的聊了git的一些常用命令,具体请参见<Git知识总览(一) 从 git clone 和 git status 谈起>.<Git知识总览(二) git常用命令概览> ...

  10. POJ1635:Subway tree systems

    链接:http://poj.org/problem?id=1635 填坑树同构 题目给出的是除根外的括号序列表示. 其实只要跟你说hash大家都能写得出来…… hash函数取个效果别太差的就行了吧 # ...