|
|
|
|
 如何限制 ssh 的密码尝试次数 - laye [ 2006-02-12 15:17 | 108 byte(s)]
 Re: 如何限制 ssh 的密码尝试次数 - tclwp [ 2006-02-15 17:06 | 56 byte(s)]
 Re: 如何限制 ssh 的密码尝试次数 - ElTopo [ 2006-02-15 20:58 | 303 byte(s)]
 Re: 如何限制 ssh 的密码尝试次数 - tclwp [ 2006-02-16 08:34 | 4 byte(s)]
 Re: 如何限制 ssh 的密码尝试次数 - scotti [ 2006-02-16 12:50 | 45 byte(s)]
 Re: 如何限制 ssh 的密码尝试次数 - tclwp [ 2006-02-16 16:39 | 1,885 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
MaxAuthTries 只会把登录的连接断开,并不会将登录失败的来源加入黑名单的。
我以前是这样做的:写个脚本用 grep 检查系统日志中 ssh 登录失败的 IP 和失败次数,超过某个值就将该 IP 加入 /etc/hosts.deny。用 crond 每隔一段时间运行这个脚本。每天凌晨4点重置 /etc/hosts.deny,并 logrotate 系统日志。
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
是的
这是我保存的资料里的一段
# cat > /etc/iptables/sshblock.sh <<END
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
LOG_FILE=/var/log/secure
KEY_WORD="Illegal user"
KEY_WORD1="Failed password for root"
PERM_LIST=/etc/firewall/bad.list.perm
LIMIT=5
MAIL_TO=root
IPT_SAV="$(iptables-save)"
bad_list=$(egrep "$KEY_WORD" $LOG_FILE | awk '{print $NF}' | xargs)
bad_list1=$(egrep "$KEY_WORD1" $LOG_FILE | awk '{print $11}' | xargs)
bad_list="$bad_list $bad_list1"
for i in $(echo -e "${bad_list// /
}" | sort -u)
do
hit=$(echo $bad_list | egrep -o "$i" | wc -l)
[ "$hit" -ge "$LIMIT" ] && {
echo "$IPT_SAV" | grep -q "$i .*-j DROP" || {
echo -e "
$i was dropped on $(date)
" | mail -s "DROP by ${0##*/}: $i" $MAIL_TO
iptables -I INPUT -s $i -j DROP
}
egrep -q "^$i$" $PERM_LIST || echo $i >> $PERM_LIST
}
done
END
# chmod +x /etc/firewall/sshblock.sh
# cat >> /etc/hosts.allow <<END
sshd: ALL: spawn ( /etc/firewall/sshblock.sh )& : ALLOW
END
顶多能试 5 次(LIMIT 可调整), 然后就给 BLOCK 掉了.
此外, 在 PERM_LIST 的 ip, 也可提供给 iptables 的初始 script , 来个永久性封闭:
for i in $(< $PERM_LIST)
do
/sbin/iptables -I INPUT -s $i -j DROP
done
|
|
|
[Original]
[Print]
[Top]
|
|
|