设为首页
加入收藏
交流论坛
网站首页 | 操作系统 | 服务器应用 | 数 据 库 | 程序设计 | 网管技术 | 综合交流 |
ad here
搜索 热门搜索:
当前位置: 主页 - 操作系统 - Linux - 文章内容
[原创] 如何禁掉扫描机器的 IP(通过 ssh 认证记录
将本页收藏到: [新浪ViVi] [POCO网摘] [天极网摘] [和讯网摘] [百度搜藏][收藏到QQ书签]    更换背景颜色:黑色 灰色 白色


刚写了一个分析 /var/log/secure 日志,自动阻断入侵者 IP 的 script
适用系统:Linux
有不足之处请大家指点

#! /bin/bash
# 获取前 1 分钟内的 secure 记录,统计 ssh 认证失败的 IP 和其 失败次数
SCANNER=`grep "\`date \"+ %e %H:%M\" -d \"-1min\"\`" /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $1"="$2;}'`

for i in $SCANNER
do
        # 取认证失败次数
        NUM=`echo $i|awk -F= '{print $1}'`

        # 取其 IP 地址
        IP=`echo $i|awk -F= '{print $2}'`

        # 若其在失败次数超过 5 次且之前没有被阻断过,那么添加一条策略将其阻断,并记录日志
        if [ $NUM -gt 5 ] && [ -z "`iptables -vnL INPUT|grep $IP`" ]
        then
                iptables -I INPUT -s $IP -j DROP
                echo "`date` $IP($NUM)" >;>; /var/log/scanner.log
        fi
done




执行方式
用 crond 来运行,1 分钟运行 1 次


运行效果
引用:
[root@platinum root]# iptables -vnL INPUT
Chain INPUT (policy DROP 548 packets, 67283 bytes)
 pkts bytes target     prot opt in     out     source               destination
  101 10240 DROP       all  --  *      *       211.248.100.100          0.0.0.0/0
        state NEW,RELATED,ESTABLISHED
[root@platinum root]#


引用:
[root@platinum root]# cat /var/log/scanner.log
Sat Jul 16 10:27:22 CST 2005 211.248.100.100(15)
[root@platinum root]#





  回复于:2005-07-16 10:40:09

我想问下啊.我通过规则以后

在我不登陆ssh的情况下

我的secure是没有其他记录的

要如何禁止其他人来扫描我啊 :em06:  :em06:


  回复于:2005-07-16 10:48:05

引用:原帖由 "扫净缘客" 发表:
我想问下啊.我通过规则以后

在我不登陆ssh的情况下

我的secure是没有其他记录的

要如何禁止其他人来扫描我啊 :em06:  :em06:


装了防盗门是为了防撬,你家没有门,买了一个防盗门放在家里,怎么防撬?
这个仅仅是通过 ssh 记录来判断是否扫描的


  回复于:2005-07-16 11:28:13

能用tail 来取1分钟不?


  回复于:2005-07-16 11:40:28

引用:原帖由 "零二年的夏天"]能用tail 来取1分钟不?
 发表:


我想过,取多少不好定
少了可能漏信息,多了可能掺杂了其他时间的信息
如果用 tail,我没想好怎么取。。。。。
请夏天老师指教 :em06:


  回复于:2005-07-16 11:43:10

我没有实验环境,不知道这个命令行不行。我只是觉得pipe太多了。呵呵;)

tail -s 60 -f /var/log/secure|awk ... 


----------
我是赋闲在家的劳力。


  回复于:2005-07-16 11:48:09

tail -s 60 -f /var/log/secure|awk ... 
这样以后 tail 一直接收 /var/log/secure 的信息,并每 60 秒显示一次最新的
我不清楚这样的信息能用来 for 吗?
for i in `tail -s 60 -f /var/log/secure|awk ......`


  回复于:2005-07-16 12:58:51

经测试,for i in `tail -s 60 -f /var/log/secure|awk ......` 的方法无法将新增加的内容提交给变量 i 去进入循环


  回复于:2005-07-16 16:14:04

是的。

呵呵,劳动的时候在想这个问题,发觉应该是错误的想法。

:)


  回复于:2005-07-25 10:28:25

经常在CU上见到这样的帖子,可我觉得费解的是:在实际情况中,真有必要这样做吗?

我的观点是:
1.系统安全的加固要根据具体的实际需求和定级别。
2.系统是开放的。如果你要怕别人攻击的话,那就把你的所有端口关掉吧。。。。
3。每天Internet上的类似的探测,扫描多了,你还真这样过滤啊。晕。。。。
4.安全是相对的。


  回复于:2005-07-25 10:55:21

安全是相对的,而我们做的每种方法也都是为了达到相对的安全


  回复于:2005-07-25 10:59:47

可是这些措施我觉得就真一点必要都没有。Internet上尝试扫描登陆的人多,IP也多了。
把SSH等配置好,完全不必要这样做。
就好比,你开个WWW服务,你与其花各种办法阻止SQL 注入,还不如把程序代码写好。


  回复于:2005-07-25 11:03:35

是的这个 script 也许有点脱离实际用途,主要应该加强各个 service 的安全,重要的在疏通,而不是堵
这个 script 仅仅是一个研究,对于脆弱的 sshd 还是很有一定帮助的


  回复于:2005-07-25 11:04:42

有个问题请教一下:假如机器真的被人盯上了,疯狂扫描,这个脚本的性能如何?对机器的整体性能有影响吗?


  回复于:2005-07-25 11:06:37

引用:原帖由 "我爱钓鱼"]有个问题请教一下:假如机器真的被人盯上了,疯狂扫描,这个脚本的性能如何?对机器的整体性能有影响吗?
 发表:


扫描的前 1 分钟和正常机器被扫描一样,机器负载可能比较高
之后这个 IP 马上被尽掉(处理过程大概 1 秒都不到),被 iptables 挡到外面,机器恢复平常状态


  回复于:2005-07-25 11:12:54

在CU上看到这类的贴子多了, 本来从来都是看贴不回贴的,但今天实在忍不住想说几句。
我想我们的研究如果脱离实际情况将有什么意义?想调查一下发言的几位有多少实际做过大型的实际运维工作?

与其把精力放在iptables上还不如去做点其他事情呢。iptables是个好东东,但想请问拿iptables + TC做流量控制,以及iptables 做什么拒绝SYNFlood连接,iptables自动拒绝SSH登陆,等等,这些想法很好,但适合实际的运维吗?

注:我很佩服CU里iptables的高手,但我觉得我们做这些工作的时候要更加的切合实际。
比如iptables+TC做流量控制,这事情不太可行的根本原因就在于iptables+TC无法根据应用层报文进行协议的分析。就好比dst port =25并不意味这就是SMTP服务


  回复于:2005-07-25 11:16:39

对于实际生产系统,可以会用专业的防火墙去处理
这些方法只是给我们这些没有对 TCP/IP 编程经验的“菜鸟”们用的^_^


  回复于:2005-07-25 11:19:27

注:我很佩服CU里iptables的高手,但我觉得我们做这些工作的时候要更加的切合实际。 
比如iptables+TC做流量控制,这事情不太可行的根本原因就在于iptables+TC无法根据应用层报文进行协议的分析。就好比dst port =25并不意味这就是SMTP服务,对这种情况下显然就无法应用于实际中


  回复于:2005-07-25 11:28:02

没有绝对,只有相对,就好比 TCP/25 ,是 SMTP 的概率有多少?没有 100% 可能也有 99% 了,所以就没必要去分析 packet 中的具体数据内容来判断是否为 SMTP
但好比 TCP/16881,这个虽然 BT 用的很多,但不一定就代表BT,且 BT 还会用到其他端口,因此要想匹配 BT 就需要分析 packet 里面的具体数据内容
任何事都没有绝对的,就好比这个 script,我的机器很烂,366MHz,如果有人扫描我,机器就受不了了,变得异常迟钝,因此我写了这样一个脚本,并贴出来大家共享,我并没有告诉大家要把这个用于生产,但这个对我来说确实实用,仅此而已:)


  回复于:2005-07-25 12:01:57

引用:原帖由 "lxdlj" 发表:
注:我很佩服CU里iptables的高手,但我觉得我们做这些工作的时候要更加的切合实际。 
比如iptables+TC做流量控制,这事情不太可行的根本原因就在于iptables+TC无法根据应用层报文进行协议的分析。就好比dst port =2..........



啥场合需要“根据应用层报文进行协议的分析” :roll:


  回复于:2005-07-26 08:36:17

这个方式还是有必要的。

当然,我这里设置更加严格一些,从主机前面的网络层面做了比较笨的ip地址限制。

也是因为我曾经一次发现好几个地方的破解测试。


  回复于:2005-07-26 08:56:00

引用:原帖由 "lxdlj" 发表:
注:我很佩服CU里iptables的高手,但我觉得我们做这些工作的时候要更加的切合实际。 
比如iptables+TC做流量控制,这事情不太可行的根本原因就在于iptables+TC无法根据应用层报文进行协议的分析。就好比dst port =2..........



iptables有一个模式支持应用层 :m01: l7


  回复于:2005-07-26 09:16:56

http://bbs.chinaunix.net/forum/viewtopic.php?t=542583

科学就是在不断重复发现别人已经发现的东西:mrgreen:


  回复于:2005-07-26 09:28:43

引用:原帖由 "waker" 发表:
http://bbs.chinaunix.net/forum/viewtopic.php?t=542583

科学就是在不断重复发现别人已经发现的东西:mrgreen:


这个我早看过,和我这个原理不同,而且差很多
一个是统计总次数,一个是分析频率,当然,我若为他的方法好:)


  回复于:2005-07-26 15:11:59

谢谢platinum贡献这么好的方法,目前正好在学shell~~~
不知能不能将此句分析一下(看了半天也没弄懂是什么意思,上机试也报错),platinum谢谢了

SCANNER=`grep "\`date \"+ %d %H:%M\" -d \"-1min\"\`" /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $1"="$2;}'`


  回复于:2005-07-26 15:39:13

获取前 1 分钟内的 secure 记录,统计 ssh 认证失败的 IP 和其失败次数


  回复于:2005-08-04 06:13:24

用tail总是不可靠,不能阻止flood以及应对logrotate对文件的截断,而且每分钟都运行对系统资源也是一种浪费,尤其是系统负荷高的时候。
我用java写了个监控程序,对所有failed login都记录其ip地址和失败的时间,如果30分钟内失败超过10次,那么就调用iptables屏蔽这个ip,至于怎么读取log,我用mkfifo 创建一个pipe,然后设置syslog把有关的日志同时也发送一份到这个pipe设备上,然后在java程序的单独线程里面读取这个pipe文件,这个程序以后台服务运行,这样重要的日志一条也漏不掉。为了防止内存占用过多,我只记录100个ip,超过100个最前面的自动删除,每个ip只记录10个login的时间,新记录进来最前面的自动删除。


  回复于:2005-09-29 08:17:57

现在还在用这个脚本吗?


  回复于:2005-09-29 08:23:15

引用:原帖由 "枫影谁用了"]现在还在用这个脚本吗?
 发表:


引用:
Mon Sep 26 00:39:00 CST 2005 203.114.66.243 (20)
Mon Sep 26 02:21:01 CST 2005 219.140.167.51 (123)
Mon Sep 26 04:05:00 CST 2005 210.66.72.29 (11)
Mon Sep 26 05:49:00 CST 2005 156.63.113.49 (8)
Mon Sep 26 11:46:00 CST 2005 221.12.29.103 (18)
Mon Sep 26 21:05:01 CST 2005 202.54.18.153 (11)
Mon Sep 26 23:30:00 CST 2005 59.87.56.244 (62)
Tue Sep 27 07:46:01 CST 2005 61.127.245.210 (8)
Tue Sep 27 09:37:00 CST 2005 210.53.138.21 (85)
Tue Sep 27 12:53:00 CST 2005 68.165.227.135 (9)
Tue Sep 27 13:00:00 CST 2005 203.114.66.243 (10)
Tue Sep 27 15:27:00 CST 2005 210.0.142.182 (100)
Tue Sep 27 16:27:00 CST 2005 212.103.206.158 (9)
Tue Sep 27 20:43:00 CST 2005 61.221.232.70 (17)
Wed Sep 28 01:39:01 CST 2005 80.200.241.86 (29)
Wed Sep 28 03:25:00 CST 2005 221.12.141.171 (18)
Wed Sep 28 09:49:01 CST 2005 218.28.44.145 (7)
Wed Sep 28 11:42:01 CST 2005 221.124.79.145 (99)
Wed Sep 28 11:47:00 CST 2005 132.66.141.14 (6)
Wed Sep 28 16:09:01 CST 2005 210.53.138.21 (36)
Wed Sep 28 17:26:01 CST 2005 201.2.137.98 (7)
Wed Sep 28 18:39:01 CST 2005 210.131.249.241 (123)
Wed Sep 28 22:08:01 CST 2005 210.51.191.173 (317)
Thu Sep 29 06:36:01 CST 2005 60.248.193.86 (36)
Thu Sep 29 07:26:01 CST 2005 83.142.49.15 (12)




  回复于:2005-09-29 13:47:19

我想请教一下楼主,当这个脚本发现许多IP并添加到iptable中之后,这样会不会影响iptables的过滤性能啊,因为会有很多IP被添加iptabls表中啊,有什么好办法解决吗?像上面那位兄弟那样,当iptables中drop的IP达到一定数的时候,可 以自动替换掉。

谢谢。


  回复于:2005-09-29 14:05:06

一定会的,也有可能会造成误匹配
因为很多 IP 都是动态的,这个 IP 明天就可能是别人在用了,而那个人恰好也要访问服务器,那么就访问不了了
所以,建议定期清除一次 DROP 规则,至于多长时间合适可由自己来定


  回复于:2005-09-29 17:35:58

嗯,不错,platinum,别人没有用但对我们这些还不是高手的人来说,是不错的,鼓励platinum
知识就是应该交流


  回复于:2005-09-29 22:43:47

引用:原帖由 "yanyp" 发表:
嗯,不错,platinum,别人没有用但对我们这些还不是高手的人来说,是不错的,鼓励platinum
知识就是应该交流


对啊,高手们自己可能都可以做入侵检测系统,而对我们这些鸟儿们来说,只能玩玩这些了 ^_^


  回复于:2005-09-30 08:24:40

引用:原帖由 "platinum" 发表:

对啊,高手们自己可能都可以做入侵检测系统,而对我们这些鸟儿们来说,只能玩玩这些了 ^_^




站内短信联系一下....俺现在用这个脚本没反应哦!好像没人对俺做坏事.... :em03:  :em03: 
要不帮个忙..你扫扫俺 :em02:  :em02:  :em02:


  回复于:2005-10-06 00:07:14

我直接用portsentry, 自动禁止这些恶意用户


  回复于:2005-10-06 20:37:38

好热闹啊,哈哈

楼主的机子配置怎么这么低来?

咋不申请换个好的啊?

难道用linux就这种待遇嘛?


  回复于:2006-10-08 10:00:30

echo "`date` $IP($NUM)" >;>; /var/log/scanner.log

有一下错误,是怎么回事呢?
./block_ssh2: line 17: syntax error near unexpected token `;'
./block_ssh2: line 17: `                echo "`date` $IP($NUM)" >;>; /var/log/scanner.log'


  回复于:2006-10-08 12:30:22

引用:原帖由 yangprc 于 2006-10-8 10:00 发表
echo "`date` $IP($NUM)" >;>; /var/log/scanner.log

有一下错误,是怎么回事呢?
./block_ssh2: line 17: syntax error near unexpected token `;'
./block_ssh2: line 17: `              ... 


已经解决了,原来是论坛错误,应该是>>


  回复于:2006-10-08 12:31:36

我把ssh端口改成其他的了,好像世界安静了许多




上一篇:[原创] 集群LVS+GFS+ISCSI+TOMCAT
下一篇:[保留] proxy_arp实验的问题
作  者:xok.la
时  间:2009-04-01
ad here
热门文章
·[精华] 用命令gcc test.c出的
·[精华] ftp命令大全
·[精华] [分享]一些比较经典
·[精华] [分享]一些比较经典
·[精华] [分享]一些比较经典
·[精华] 如何在一个硬盘上
·[精华] [分享] Linux 使用技
·[精华] 如何用ROOT远程登陆
·[精华] 使用Linux的8个小技
·[精华] 请各位指正(BIND
·[精华] LILO的问题好多呀,
·[精华] RH7。1 中使用SENDM
·[精华] 关于Oracle数据库安
·[精华] 怎么我的Red hat Li
·[精华] Oracle 8.1.7 for RedHa
·[精华] [求助]我如何可以远
·[精华] [转]100个最佳Linux站
相关文章
·[保留] [原创]装多系统wi
·[精彩] 个人学习笔记,希
·[精华] Linux 2.4 内核说明文
·[精华] 搭建集群负载均衡
·[精彩] 最佳的75个安全工具
·[原创] 硬盘安装LINUXFC4全过
·[保留] Red Hat Linux 9.0与Tp
·[保留] 【原创】让win2k P
·[原创] PPPOE + FreeRADIUS + M
·[保留] 成功配置了CVS(首先
·[保留] 如何禁止telnet 80
·[精彩] DHCP 的讨论(iptab
·[保留] 自動產生 電信(C
·[原创] 集群LVS+GFS+ISCSI+TO
·[原创] 如何禁掉扫描机器
·[保留] proxy_arp实验的问题
·[精彩] redhat认证考试介绍
视频广告
Ad
栏目直达 返回顶端
设为首页 - 加入收藏 - 关于我们 - 联系本站 - 意见递交 - 网站地图
Copyright © 2007 - 2008 All Rights Reserved
蜀ICP备07505478号