2012年(28)
分类: 网络与安全
2012-06-20 15:41:18
防止SSH攻击
DenyHost:用于发现同一IP在进行多次SSH攻击,并将其禁止,并将记录写到/etc/hosts.deny中。
软件:DenyHosts-2.6.tar.gz
环境:Red Hat Enterprise Linux Server release 6.1
tar -zxvf DenyHosts-2.6.tar.gz
cd DenyHosts-2.6
python setup.py install
cd /usr/share/denyhosts/ 此时DenyHost被安装到此目录下
cp daemon-control-dist daemon-control 生成启动文件
grep -v '^ *#' denyhosts.cfg-dist | sed '/^$/d' > denyhosts.cfg 产生配置文件
vi denyhosts.cfg
SECURE_LOG = /var/log/secure 日志文件存放位置(直接用默认即可)
HOSTS_DENY = /etc/hosts.deny 系统控制用户登录文件
PURGE_DENY =
BLOCK_SERVICE = sshd 禁止服务名称
DENY_THRESHOLD_INVALID = 5 无效用户登录失败次数(/etc/passwd文件中没有的用户)
DENY_THRESHOLD_VALID = 10 普通用户登录失败次数(/etc/passwd文件中有的用户
DENY_THRESHOLD_ROOT = 3 root登录失败次数
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /usr/share/denyhosts/data 存放denyhosts信息的位置,可以从这里看到被攻击的情况
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
HOSTNAME_LOOKUP=NO 禁止做逆向域名解析
LOCK_FILE = /var/lock/subsys/denyhosts
DAEMON_LOG = /var/log/denyhosts denyhosts自己的日志文件
DAEMON_SLEEP = 30s
DAEMON_PURGE = 1h
保存退出后
/usr/share/denyhosts/daemon-control start 启动服务
此时可以用另外一台机子进行测试:
此时你发现当另外一台机器密码输入3次错误的话,再次登录就无法登录了。
此时你会在服务器上的/etc/hosts.deny中发现里面增加了一行。
另外一种防止SSH攻击方法(通过shell脚本和防火墙来实现):
vi ban_ssh.sh
#!/bin/bash
name=(`grep 'Failed' /var/log/secure | sed 's/.*from \(.*\) port.*/\1/g' | sort | uniq -c | tr -s ' ' ':'`)
/sbin/iptables -F
/sbin/iptables -Z
/sbin/iptables -P INPUT DROP
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,PSH,URG SYN -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
for i in ${name[*]}
do
count=`echo $i | awk -F':' '{print $2}'`
ip=`echo $i | awk -F':' '{print $3}'`
if [ "$count" -gt 3 ]
then
echo "sshd:$ip" >> /etc/hosts.deny
/sbin/iptables -I INPUT -p tcp -s $ip --dport 22 -m state --state NEW -j DROP
cp /var/log/secure /var/log/secure.`date +%Y%m%d%H%M`
cat > /var/log/secure <<-EOF
EOF
fi
done
添加计划任务:
crontab –e
* */1 * * * /root/ban_ssh.sh 每小时执行一遍此脚本
/etc/init.d/crond restart
执行完该脚本后,可以发现被禁止的机子无法SSH登陆到服务器上,但是可以访问http网页。