服务器防止SSH暴力破解
脚本内容如下:
文件名secure_ssh.sh ,我存放在/opt目录下面(centos系统)
#! /bin/bash
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/bin/black.txt
for i in `cat /usr/local/bin/black.txt`
do
IP=`echo $i |awk -F= '{print $1}'`
NUM=`echo $i|awk -F= '{print $2}'`
if [ $NUM -gt 5 ];then
grep $IP /etc/hosts.deny > /dev/null
if [ $? -gt 0 ];then
echo "sshd:$IP:deny" >> /etc/hosts.deny
fi
fi
done
原理是 根据 /var/log/secure 文件,捞取密码失败五次以上IP信息 ,然后写入到/etc/hosts.deny,禁止相关ip ssh访问服务器,加入服务器没有secure 文件,则可以使用lastb 命令(用于查看失败登录ip信息
)
效果如下:
lastb -n 10
awk 命令 检索 信息
sort|uniq -c 排序。并汇总出现次数,并将找到的ip输出到black.txt 并遍历black文件再和/etc/hosts.deny文件比较
处理完脚本,再给加到定时任务里面
先查看下定时任务:
crontab -l
然后编辑:
crontab -e
在出现的定时任务编辑加上下面语句,每隔一分钟(linux定时任务表达式从分钟起)执行一下脚本,汇总下攻击IP,并加入黑名单
*/1 * * * * sh /opt/secure_ssh.sh
然后按 esc 输入wq!命令保存
如果担心自己密码输入错误次数多,就把自己的 ip 加入的 hosts.allow里面
注:定时任务自动执行,无需启动
/etc/hosts.allow和/etc/hosts.deny两个文件是控制远程访问设置的,通过他可以允许或者拒绝某个ip或者ip段的客户访问linux的某项服务。
我们通常只对管理员开放SSH登录,那我们就可以禁用不必要的IP,而只开放管理员可能使用到的IP段。
1.修改/etc/hosts.allow文件
sshd:192.168.137.*:allow
以上写法表示允许192.168.137.*一个ip段连接sshd服务(这还需要hosts.deny这个文件配合使用),当然:allow完全可以省略的。
当然如果管理员集中在一个IP那么这样写是比较省事的
all:192.168.137.111
以上写法表示接受111这个ip的所有请求!
2.修改/etc/hosts.deny文件
此文件是拒绝服务列表,文件内容如下:
sshd:all:deny
sshd:all:deny表示拒绝了所有sshd远程连接。如上 :deny 可以省略。
注:当hosts.allow和 host.deny相冲突时,以hosts.allow设置为准。