刚写了一个分析 /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端口改成其他的了,好像世界安静了许多
|