ssh恶意攻击防范

  • ssh恶意攻击防范
    • 修改ssh登录用户以及端口
    • 封锁ip
    • SSH禁止10分钟内登陆失败次数多的IP地址

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 
# 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

你可能感兴趣的:(linux,工具使用,syslog)