Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1154809
  • 博文数量: 221
  • 博客积分: 10152
  • 博客等级: 上将
  • 技术积分: 1518
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-22 10:42
文章分类

全部博文(221)

文章存档

2018年(1)

2015年(6)

2014年(3)

2013年(4)

2012年(1)

2011年(5)

2010年(14)

2009年(10)

2008年(28)

2007年(33)

2006年(114)

2005年(2)

我的朋友

分类: LINUX

2006-11-13 11:59:44

.建立脚本内容
$ cat /home/cnscn/sh/ssh_scan_crontab.sh
#!/bin/bash
# Author http://jabin.cublog.cn
# Modify cnscn http://cnscn2008.cublog.cn
# Modify xinyv

#设置时区
export LC_ALL=UTC

# 获取前 1 分钟内的 secure 记录,统计 ssh 认证失败的 IP 和其 失败次数, 并用Iptables阻止之
SCANNER=$(awk 'BEGIN{ tm=strftime("%b %e %H:%M",systime()-60);}  $0 ~ tm && /Failed password/ && /ssh2/ {print $(NF-3)}' /var/log/secure |sort|uniq -c |awk '{print $1"="$2;}')


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

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

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



.把下面脚本放入/etc/crontab

   #扫描ssh密码猜测次数超过5次的记录
   * * * * *  root /home/cnscn/sh/ssh_scan_crontab.sh >/dev/null 2>&1


.把脚本/home/cnscn/sh/ssh_scan_iptables.sh加入到开机启动的myiptables.sh防火墙脚本
$ cat myiptables.sh
#!/bin/bash
#chkconfig: 345 85 15
#description: my iptables rules, which can auto run when system start

# This is a script
# Edit by liwei, cnscn
# establish a static firewall

#网络接口
interdevice="eth0"

#端口
#21       ftp
#15022    sshd
#25       smtp
#53       named
#80       http
#110      pop3

#外界可以访问的端口
Open_ports="21 20 22 80"

#可以外出的端口,其它端口都可以外出
Allow_ports="21 20 80 "

#清除所有以前设置的规则
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

#执行非法IP阻止规则
/home/cnscn/sh/ssh_scan_iptables.sh

#允许211.167.xxx.xxx, 防止自己输入错误而导致的IP被封锁
/sbin/iptables -I INPUT -s 211.167.xxx.xxx -j ACCEPT

#定义每一个网络接口规则
for eths in $interdevice ; do

  #接受所有的,来源不是网络接口$interdevice的数据(对不是eths端口则放行)
  #iptables -A INPUT -i ! $eths -j ACCEPT

  #定义外界可以访问的端口规则(--dport)
  for Port in $Open_ports ; do
    iptables -A INPUT -i $eths -p tcp --dport $Port -j ACCEPT
    iptables -A INPUT -i $eths -p udp --dport $Port -j ACCEPT
  done

  #给不应该进入我们机器的数据,一个欺骗性的回答
  iptables -A INPUT -i $eths -p tcp -j REJECT --reject-with tcp-reset
  iptables -A INPUT -i $eths -p udp -j REJECT --reject-with icmp-port-unreachable
done

#forbidden ping
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

#End of Script
阅读(2915) | 评论(0) | 转发(0) |
0

上一篇:udev轻松上路

下一篇:ssh tunnel

给主人留下些什么吧!~~