Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

如何禁掉扫描机器的 IP(通过 ssh 认证记录分析)

[复制链接]
platinum 发表于 2005-7-16 11:04:32 | 显示全部楼层 |阅读模式
刚写了一个分析 /var/log/secure 日志,自动阻断入侵者 IP 的 script
适用系统:Linux
有不足之处请大家指点

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

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

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

  10.         # 若其在失败次数超过 5 次且之前没有被阻断过,那么添加一条策略将其阻断,并记录日志
  11.         if [ $NUM -gt 5 ] && [ -z "`iptables -vnL INPUT|grep $IP`" ]
  12.         then
  13.                 iptables -I INPUT -s $IP -m state --state NEW,RELATED,ESTABLISHED -j DROP
  14.                 echo "`date` $IP($NUM)" >> /var/log/scanner.log
  15.         fi
  16. 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]#
xlink 发表于 2005-7-16 12:32:17 | 显示全部楼层
白金原来是一个shell编程大虾,向你学习!

有一个问题一直在困绕我,帮我看看。
有一个文本文件txt,内容是:
aaa         bbb
我现在需要生成另一个文件:
[左对齐](第10个字符上)aaa       bbb[右对齐](第30个字符上)
我试过printf和awk '{print加参数}'都不行。

白金指点一下,先谢了!!!

[ 本帖最后由 xlink 于 2005-7-16 13:06 编辑 ]
回复

使用道具 举报

 楼主| platinum 发表于 2005-7-16 13:21:54 | 显示全部楼层
原帖由 xlink 于 2005-7-16 12:32 发表
白金原来是一个shell编程大虾,向你学习!

有一个问题一直在困绕我,帮我看看。
有一个文本文件txt,内容是:
aaa         bbb
我现在需要生成另一个文件:
[左对齐](第10个字符上)aaa       bbb[右对齐] ...

和高手们比起来,我的水平很菜了。。。。

你的问题用 awk 的 printf 可以解决

[root@PT-LINUX root]# cat data
aaa bbb
12345 1234567
[root@PT-LINUX root]# awk '{printf "%-10s %10s\n",$1,$2}' data
aaa       bbb
12345    1234567
[root@PT-LINUX root]#
回复

使用道具 举报

xlink 发表于 2005-7-16 15:32:00 | 显示全部楼层
晕~~~~~~~~你的例子正是我要的结果!
回复

使用道具 举报

xlink 发表于 2005-7-16 15:42:12 | 显示全部楼层
另外,还有一个小问题:
echo 2/3|bc
运行的结果是0

我知道可以用scale=x来调整精度,也知道可以用
bc txt
来运算我想要的结果.

现在的问题是:
我不想把"2/3"放进文本文件里运算.
怎么才可以得到:0.67这个结果?
回复

使用道具 举报

xlink 发表于 2005-7-16 22:21:36 | 显示全部楼层

awk '{printf "%-10s %10s\n",$1,$2}' data

做到的是
(第1个字符左对齐)aaa       bbb(第10个字符左对齐)
(第1个字符左对齐)12345    (第10个字符左对齐)1234567
我希望的是:
(第10个字符开始左对齐)aaa               bbb(第30个字符结束右对齐)
(第10个字符开始左对齐)12345    1234567(第30个字符结束右对齐)

(第n个字符要是绝对值,不是相对值)
右对齐是做到了,左对齐没做到。

[ 本帖最后由 xlink 于 2005-7-16 22:31 编辑 ]
回复

使用道具 举报

xlink 发表于 2005-7-16 23:56:53 | 显示全部楼层
我已经找到答案了,谢谢白金。
我的方法是:awk '{printf "%-10s%-10s%10s\n",$9,$1,$2}' data
加一个不存在的列$9做为填充。
回复

使用道具 举报

呼唤 发表于 2005-7-17 02:25:34 | 显示全部楼层
收藏一下,等下去搞~
回复

使用道具 举报

 楼主| platinum 发表于 2005-7-17 13:18:25 | 显示全部楼层
原帖由 xlink 于 2005-7-16 23:56 发表
我已经找到答案了,谢谢白金。
我的方法是:awk '{printf "%-10s%-10s%10s\n",$9,$1,$2}' data
加一个不存在的列$9做为填充。

其实有很多种方法实现啊
# awk '{printf "%10s%-10s%10s\n","",$1,$2}' data
# awk '{printf "          %-10s%10s\n",$1,$2}' data
都可以
回复

使用道具 举报

绝对痴心 发表于 2005-7-18 10:29:05 | 显示全部楼层
都是高手,路过学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-23 20:57 , Processed in 0.027594 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表