#!/usr/bin/bash

#用户检测入侵工具

AUTHLOG=/var/log/secure

if [[ -n $1 ]];then

AUTHLOG=$1

echo "Using Log File: $AUTHLOG"

fi

LOG=/tmp/valid.$$.log

grep -v "Invalid" $AUTHLOG > $LOG #将系统中有效的用户

users=$( grep "Failed password" $LOG |awk '{ print $(NF-5) }'|sort|uniq ) # 搜集非法用户的用户名

printf "%-5s|%-10s|%-10s|%-13s|%-33s|%s " "Sr#" "User" "Attempts" "IP address" "Host_Mapping" "Time range"

ucount=0

ip_list="$( egrep -o "[0-9]+.[0-9]+.[0-9]+.[0-9]+" $LOG |sort|uniq )" #获取登陆失败的IP地址

for ip in $ip_list

do

grep $ip $LOG > /tmp/temp.$$.log #这一步是将失败的那一行信息存到文件中

for user in $users

do

grep $user /tmp/temp.$$.log >/tmp/$$.log

cut -c-16 /tmp/$$.log >$$.time #这一行的前16个字符是时间戳

tstart=$(head -1 $$.time);

start=$(date -d "$tstart" "+%s");

tend=$(tail -1 $$.time)

end=$(date -d "$tend" "+%s")

limit=$(($end-$start))

if [ $limit -gt 120 ] ;then #检查这个时间戳是否大于两分钟

let ucount++;

IP=$(egrep -o "[0-9]+.[0-9]+.[0-9]+.[0-9]+" /tmp/$$.log|head -1 )

TIME_RANGE="$tstart-->$tend"

ATTEMPTS=$(cat /tmp/$$.log|wc -1)

HOST=$(host $IP|awk '{print $NF}') #根据ip 查找对应主机的名字 这个步骤如果显示host没有找到命令 请安装bind-utils

printf "%-5s|%-10s|%-10s|%-13s|%-33s|%s " "$ucount" "$user" "$ATTEMPTS" "$IP" "$HOST" "$TIME_RANGE"

fi

done

done

rm -f /tmp/valid.$$.log

rm -f /tmp/$$.log

rm -f /tmp/$$.time

rm -f /tmp/temp.$$.log

-------------------------------------------------------

这里是解决非法用户3次登陆失败的解决办法

vim /etc/pam.d/sshd

auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=10

#参数解释

#even_deny_root 也限制root用户;

#deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户

#unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒;

#root_unlock_time 设定root用户锁定后,多少时间后解锁,单位是秒

作者简介: 
陈志珂(头条号:强扭的瓜不好吃)公众号“铅笔学园”运维内容合作作者之一,目前就职于中国最大的安卓应用软件公司,任高级工程师现在公司任php开发工程师,python开发工程师,高级运维工程师。
铅笔学园:IT资源分享|知识分享,做初级程序员的指明灯

shell日常实战练习——通过监视用户登陆找到入侵者的更多相关文章

  1. shell日常实战防dos攻击

    根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟.防火墙命令为:iptables -I INPUT -s 10.0 ...

  2. 转载:如何查看用户当前shell和修改用户登陆时的默认shell

    转载网址:http://www.51testing.com/html/44/211244-197042.html   1.查看当前使用的shell类型 # echo $SHELL/usr/bin/bs ...

  3. FastAPI(六十七)实战开发《在线课程学习系统》接口开发--用户登陆接口开发

    接上一篇文章FastAPI(六十六)实战开发<在线课程学习系统>接口开发--用户注册接口开发.这次我们分享实际开发--用户登陆接口开发. 我们先来梳理下逻辑 1.查询用户是否存在2.校验密 ...

  4. mxonline实战4,用户登陆页面2和用户注册1

            一. 基于类来定义view.py diango中使用基于类来定义views的功能,其实更加方便,因为这样可继承一些定义好的基类,来减少我们的代码量   1. 使用基于类的方法,来重新定 ...

  5. Shell编程实战

    Shell编程实战   为什么要学习Shell编程 Shell脚本语言是实现Linux/Unix系统管理及自动化运维所必须的重要工具,Linux系统的底层以及基础应用软件的核心大都涉及Shell脚本的 ...

  6. python实现用户登陆(sqlite数据库存储用户信息)

    python实现用户登陆(sqlite数据库存储用户信息) 目录 创建数据库 数据库管理 简单登陆 有些地方还未完善. 创建数据库 import sqlite3 #建一个数据库 def create_ ...

  7. 关于deepin下安装ssh以后root用户登陆报错的解决

    最近刚刚接触到deepin,觉得,wow,除了mac,还有这么好看的非win系统,而且第测出那个Linux,宽容度很高,非常适合我这种比较喜欢折腾的人,于是下载了deepin15版本并将其当作虚拟机成 ...

  8. centos 单用户登陆模式操作

    在centos中因为安装java而配置 jdk环境变量的原因,对/etc/profile文件进行了编辑 错误的环境变量配置导致在第一次修改profile文件并保存后,执行source /etc/pro ...

  9. 五.数据库同步,创建django用户,用户登陆过程

    (1)配置数据库 项目目录/settings.py是一个普通的python模块,每项配置都是一key/value 数据库的配置是以dict的形式存放在这个模块中,key名为:DATABASES DAT ...

随机推荐

  1. 微信小程序选择视频,视频上传,视频播放

    请查看链接地址看具体详情: 选择视频: https://mp.weixin.qq.com/debug/wxadoc/dev/api/media-video.html#wxchoosevideoobje ...

  2. 6、DHCP

    DHCP 一.DHCP简介 1.什么是DHCP DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种用户简化计算机IP地址管理的标准: 2.DHC ...

  3. 在写makefile过程中遇到的问题

    老师布置了linux实验作业,本身不打算写了,反正也不交实验报告,但刚好项目也需要,所以就研究了makefile.不过还是要批评自己,怎么能这么的颓废呢? 刚开始做的时候出现了这样的错误,代码如下: ...

  4. 模拟spring的IoC

    1.新建一个web项目,jdk版本为1.8.0_111,使用 Jsp + Servlet + Model 实现MVC模式,并使用BeanFactory工厂 + xml配置文件 + 反射 来解耦合 整个 ...

  5. MVC实战之排球计分(二)—— 构架概要设计

    本程序主要基于MVC4框架,使应用程序的输入,处理和输出强制性分开,使得软件可维护性,可扩展性,灵活性以及封装性得到提高, MVC应用程序分为三个核心部件:Model,View, Controller ...

  6. TCP如何保证可靠性

    如何保证可靠性? 1.校验和.在TCP的首部中有一个占据16为的空间用来放置校验和的结果. 这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化.如果收到段的检验和有差错,TCP将丢弃这个报文 ...

  7. Highcharts 配置语法

    Highcharts 配置语法 本章节我们将为大家介绍使用 Highcharts 生成图表的一些配置. 第一步:创建 HTML 页面 创建一个 HTML 页面,引入 jQuery 和 Highchar ...

  8. python 小练习 7

    有一楼梯共n级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第n级,共有多少种走法? 这其实是fibonacci数列,记走法为f(n),在n-1和n-2时你都可以直接跨上去.因此 f(n) = ...

  9. 14. Longest Common Prefix C++

    采用纵向遍历,即对第一个字符串,取出第一个字符,检查是否出现在随后每一个字符串中,以此类推.当遍历完成或有一个字符串不符合要求,直接return. class Solution { public: s ...

  10. 1.两数之和(Two Sum) C++

    暴力法可解决,速度很慢. 解决办法:哈希表 知识点: map的构造 遍历map使用迭代器,判断条件 插入 pair<int,int> 寻找key是否存在 class Solution { ...