您的位置:首页 > 其它

如何对抗ssh探测或攻击

2010-09-30 15:36 211 查看
通过日志,我们时常看到有人想要拆解我们的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:

[Copy to clipboard]

CODE:
#!/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:

[Copy to clipboard]

CODE:
#!/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:

[Copy to clipboard]

CODE:
#!/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

[Copy to clipboard]

CODE:
table <ssh-violations> persist file "/etc/ssh-violations"

...

block drop in from <ssh-violations> to any

  然后设置crontab:

[Copy to clipboard]

CODE:
*/1 * * * * root /operator/sshd-fwscan.sh

  好了,现在可以自己测试一下子。

  注意,测试不要把自己搞定了啊,呵呵!

注意IPFW和IPF之中的2000,根据你自己的实际情况设定规则号或者组号。

把SSH的端口改了,然后装上portsentry,把22端口打开,只要他一扫描你的22端口立马让他进黑名单!

原文地址:http://www.freebsdwiki.net/index.php/Block_repeated_illegal_or_failed_SSH_logins

原文版权声明:

# 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: