Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15141985
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: BSD

2008-03-19 16:43:35

以下翻译多自己针对中文习惯组织内容,并非与原版一一对应。

  限制多次失败或者无效的ssh登录

  介绍:

  通过日志,我们时常看到有人想要拆解我们的ssh登录密码。我们现在要做的就是屏蔽这样子的攻击。

  首先,限制ssh的登录回话:
  man 5 sshd_config,可以看到如下的配置:
    * LoginGraceTime 120
        如果用户在规定的时间之内没有正确的登录,则断开。如果为0,则不限制;默认120秒

   MaxStartups 10
  设置同时发生的未验证的并发量,即同时可以有几个登录连接,默认为10
      也可以使用start:rate:full这样子的配置,例如:15:30:60,如果当前的登录连接数为15个,则30%被抛弃;如果达到了60个,则全部抛弃

  然后,使用防火墙,限制多次失败或者无效的ssh登录。
  其原理很简单,通过检查auth.log,如果一个ip登录失败达到或者超过5次,我们就认为是捣乱的。
  先检查/etc/syslog.conf,看看是否存在:
  auth.*                                          /var/log/auth.log
  没有就加上,我们需要记录登录的日志来进行判断。

  随后,我们就使用防火墙来做我们想要做得事情了。

IPFW:


CODE:[Copy to clipboard]#!/bin/sh
if ipfw show | awk '{print $1}' | grep -q 20000 ; then
        ipfw delete 20000
fi
for ips in `cat /var/log/auth.log | grep sshd | grep "Illegal" | awk '{print $10}' | uniq -d` ; do
        ipfw -q add 20000 deny tcp from $ips to any
done
cat /var/log/auth.log | grep sshd | grep "Failed" | rev | cut -d\ -f 4 | rev | sort | uniq -c | \
( while read num ips; do
    if [ $num -gt 5 ]; then
         if ! ipfw show | grep -q $ips ; then
                ipfw -q add 20000 deny tcp from $ips to any
        fi
    fi
done
)
IPF:


CODE:[Copy to clipboard]#!/bin/sh
IFS='
'
for rules in `ipfstat -i | grep "group 20000"` ; do
       echo "$rules" | ipf -r -f -
done
for ips in `cat /var/log/auth.log | grep sshd | grep "Illegal" | awk '{print $10}' | uniq -d` ; do
       echo "block in quick from $ips to any group 20000" | ipf -f -
done
cat /var/log/auth.log | grep sshd | grep "Failed" | rev | cut -d\ -f 4 | rev | sort | uniq -c | \
( while read num ips; do
   if [ $num -gt 5 ]; then
        if ! ipfstat -i | grep $ips ; then
               echo "block in quick from $ips to any group 20000" | ipf -f -
       fi
    fi
done
)
PF:


CODE:[Copy to clipboard]#!/bin/sh
pfctl -t ssh-violations -T flush
for ips in `cat /var/log/authlog | grep sshd | grep "Illegal" | awk '{print $10}' | uniq -d` ; do
       pfctl -t ssh-violations -T add $ips
done
cat /var/log/authlog | grep sshd | grep "Failed" | rev | cut -d\ -f 4 | rev | sort | uniq -c | \
( while read num ips; do
    if [ $num -gt 5 ]; then
         if ! pfctl -s rules | grep -q $ips ; then
                pfctl -t ssh-violations -T add $ips
        fi
    fi
done
)
  PF还需要如下设置:
/etc/pf.conf


CODE:[Copy to clipboard]table persist file "/etc/ssh-violations"
...
block drop in from to any
  然后设置crontab:


CODE:[Copy to clipboard]*/1    *       *       *       *       root    /operator/sshd-fwscan.sh
  好了,现在可以自己测试一下子。
  注意,测试不要把自己搞定了啊,呵呵!

原文地址:

原文版权声明:
# Copyright (c) 2004,2005 RPTN.Net,
# Copyright (c) 2005 DaveG.ca,
# Copyright (c) 2006 Bob (kba at ats32.ru)
# You may use this code under the GPL, version 2 or newer.
# Updates for IPF by Sasha.by

阅读(623) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~