天天看点

第一个shell脚本-监测恶意登录远程服务器

最近学习到linux系统日志和计划任务,下班回家的地铁上有了灵感,尝试编写了自己的第一个脚本,监测如果有恶意登录服务器的话,发邮件通知管理员。暂时还没学习到如何发邮件给管理员,目前只是命令行的提醒和日志记录;脚本的内容也比较简单,都是学习过的基本知识,活学活用。

1、首先编写一个脚本:

定义一个变量LT,变量的值为lastb命令列出的行数(即无效登录的次数,如有恶意登录的话行数会变多);

执行一个if判断语句,如果定义的值大于15次的话,判断为恶意登录,通知管理员。

脚本内容如下:

1

2

3

4

5

6

7

8

9

10

<code>[root@localhost ~]</code><code># cat lt.sh </code>

<code>#! /bin/bash</code>

<code>#定义变量LT,记录无效登录的次数;</code>

<code>LT=`lastb |</code><code>wc</code> <code>-l |</code><code>cut</code> <code>-d </code><code>' '</code> <code>-f 1`</code>

<code>if</code> <code>[ $LT -gt </code><code>"15"</code> <code>]</code>

<code>        </code><code>#判断无效登录的次数如果大于15的话,执行下面的操作;</code>

<code>        </code><code>then</code> <code>echo</code> <code>"somebody try to login please check log"</code>

<code>        </code><code>#打印有人尝试登录系统请检查日志</code>

<code>fi</code>

2、编写一个计划任务

每隔一分钟自动执行上面的脚本

<code>[root@localhost ~]</code><code># crontab -l</code>

<code>*</code><code>/1</code> <code>* * * * </code><code>/bin/sh</code> <code>/root/lt</code><code>.sh</code>

3、查看效果

超过15次登录在当前命令行模式会提示,有一封新邮件在/var/spool/mail/root下;

<code>[root@localhost ~]</code><code># </code>

<code>You have new mail </code><code>in</code> <code>/var/spool/mail/root</code>

查看新邮件,会发现脚本里面的内容,证明有人在尝试登录主机;

<code>[root@localhost ~]</code><code># tail -2 /var/spool/mail/root </code>

<code>somebody try to login please check log</code>

执行lastb命令查看发现很多登录失败的记录

11

<code>[root@localhost ~]</code><code># lastb |head</code>

<code>user1    </code><code>ssh</code><code>:notty    192.168.22.1     Tue Apr 21 22:04 - 22:04  (00:00)    </code>

<code>user1    </code><code>ssh</code><code>:notty    192.168.22.1     Tue Apr 21 22:03 - 22:03  (00:00)    </code>

<code>user1    </code><code>ssh</code><code>:notty    192.168.22.1     Tue Apr 21 21:29 - 21:29  (00:00)    </code>

<code>user1    </code><code>ssh</code><code>:notty    192.168.22.1     Tue Apr 21 21:29 - 21:29  (00:00)</code>

查看/var/log/secure 日志也会发现有多次登录失败的记录

<code>Apr 21 22:03:35 localhost unix_chkpwd[1501]: password check failed </code><code>for</code> <code>user (user1) </code>

<code>Apr 21 22:03:35 localhost sshd[1499]: pam_unix(sshd:auth): authentication failure; </code><code>logname</code><code>= uid=0 euid=0 </code><code>tty</code><code>=</code><code>ssh</code> <code>ruser= rhost=192.168.22.1  user=user1</code>

<code>Apr 21 22:03:36 localhost sshd[1499]: Failed password </code><code>for</code> <code>user1 from 192.168.22.1 port 50591 ssh2</code>

<code>Apr 21 22:03:39 localhost unix_chkpwd[1502]: password check failed </code><code>for</code> <code>user (user1)</code>

<code>Apr 21 22:03:41 localhost sshd[1499]: Failed password </code><code>for</code> <code>user1 from 192.168.22.1 port 50591 ssh2</code>

<code>Apr 21 22:03:44 localhost unix_chkpwd[1503]: password check failed </code><code>for</code> <code>user (user1)</code>

<code>Apr 21 22:03:46 localhost sshd[1499]: Failed password </code><code>for</code> <code>user1 from 192.168.22.1 port 50591 ssh2</code>

<code>Apr 21 22:03:49 localhost unix_chkpwd[1504]: password check failed </code><code>for</code> <code>user (user1)</code>

<code>Apr 21 22:03:51 localhost sshd[1499]: Failed password </code><code>for</code> <code>user1 from 192.168.22.1 port 50591 ssh2</code>

<code>Apr 21 22:03:52 localhost sshd[1499]: Failed password </code><code>for</code> <code>user1 from 192.168.22.1 port 50591 ssh2</code>

<code>Apr 21 22:03:54 localhost sshd[1500]: Received disconnect from 192.168.22.1: 0:</code>

根据访问日志的来源IP,我们可以对来源设置iptables规则,禁止访问服务器的22端口,或者封闭ip地址;

暂时只有这么多,小小的骄傲一下,给自己增加点自信心,相信之后的学习中会更加深入了解linux;

和大家分享一下,共勉之。

本文转自 模范生 51CTO博客,原文链接:http://blog.51cto.com/mofansheng/1636847,如需转载请自行联系原作者

继续阅读