ssh恶意攻击防范
今天遇到了一个问题,布好了cacti之后使用了syslog插件,然后发现自己的搜集的系统日志中包含了很多的
Failed password for root from 183.3.202.190 port 47805 ssh2,
这时因为自己的主机被别人远程使用ssh暴力破解密码,以前没有注意到过这种事情,但是发生了还是去了解了下防范的方法
1.修改ssh登录用户以及端口
这时最简单的方式,修改过程如下:
1.首先,禁用root 远程登录,改ssh端口
2.创建一个普通用户用作远程登录,然后通过su -转为root 用户
3.改到偏远的端口(从20 扫到 36301)
4重启ssh服务
$ vi /etc/ssh/sshd_config
PermitRootLogin no #禁用root 登录
Port 36301 #
$ /etc/init.d/sshd restart
2.封锁ip
封锁所有ip
$ vi /etc/hosts.deny
sshd:all:deny
#拒绝所有的ip访问主机ssh服务
设置允许ip
$ vi /etc/hosts.allow
sshd:210.13.218.*:allow
sshd:222.77.15.*:allow
#以上写法表示允许210和222两个ip段连接sshd服务
重启xinetd服务
$ service xinetd restart
3. SSH禁止10分钟内登陆失败次数多的IP地址
首先感谢下作者的分享,原文地址.
创建sh脚本
$ vim /usr/local/cron/ssh_scan.sh
添加如下内容
#!/bin/bash
# Script: /usr/local/cron/ssh_scan.sh
# Author cnscn <http://www.redlinux.org>
# Date: 2012-05-11
export LC_ALL=UTC
#扫描10分钟内的登陆失败的IP
SCANNER=$( tm=$(date -d '10 minutes ago' +"%h %d %H") && \
awk -v tm="$tm" ' $0 ~ tm && /Failed password/ && /ssh2/ { print $(NF-3) ; } ' /var/log/secure \
| sort \
| uniq -c \
| awk '{print $1"="$2;}' \
)
for i in $SCANNER
do
#截取IP与数量
IP=`echo $i|awk -F= '{print $2}'`
NUM=`echo $i|awk -F= '{print $1}'`
#数量大于8次,则使用iptables禁止IP
if [ $NUM -gt 8 ]
then
iptables -vnL | grep DROP | grep $IP &>/dev/null
[ $? -eq 0 ] || /sbin/iptables -I INPUT -s $IP -j DROP
echo "`date` $IP($NUM)" >> /var/log/scanner.log
fi
done
#End of Script
设置文件可执行
chmod 777 /usr/local/cron/ssh_scan.sh
设置定时任务文件
$ vim /etc/cron.d/ssh-scan
设置定时任务内容
*/10 * * * * root /usr/local/crontab/ssh_scan.sh
重启定时任务
$ service crond restart