防止服务器SSH暴力破解
SH端口为22,如果有看登入记录会发现一旦IP地址暴露到网络,每时每刻都有人在尝试破解密码,每次登录都能看到成百上千,有时甚至几万的失败次数。
而修改端口则是最一劳永逸的办法,只要没有人定点爆破的话基本上就足够安全了。
手动修改端口
修改ssh配置文件并重启ssh服务
1 | vi /etc/ssh/sshd_config |
找到Port行,去掉头部的#,修改为自定义端口(10000以上)
1 | # Debian / Ubuntu |
这是方法效率最高,因为90%以上的通过脚本的暴力破解都是盯着22端口去,很少有人会耗费精力扫描其他端口,除非被特殊照顾。
脚本添加ip到host.deny
在 /var/log/secure
中,可以查看所有的ssh访问记录,通过命令行 #cat /var/log/secure | grep Failed
统计失败的ip访问
添加 allow
先把始终允许的IP填入 /etc/hosts.allow
,这很重要!比如:
sshd:132.213.:allow
脚本添加 deny
/etc/hosts.deny
中添加禁止ip,脚本如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#!/bin/bash
#Denyhosts SHELL SCRIPT
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"=" $1;}' >/root/blocklist.txt
DEFINE="10"
for i in `cat /root/blocklist.txt`
do
IP=`echo $i|awk -F= '{print $1}'`
NUM=`echo $i|awk -F= '{print $2}'`
if [ $NUM -gt $DEFINE ]
then
ipExists=`grep $IP /etc/hosts.deny |grep -v grep |wc -l`
if [ $ipExists -lt 1 ]
then
echo "sshd:$IP" >> /etc/hosts.deny
fi
fi
done
定时任务 10分钟一次
crontab -e
1 */10 * * * * sh /usr/local/bin/secure_ssh.sh
在vim中 i表示进入编辑,esc退出编辑 :wq保存退出 :q!不保存退出
最后查看屏蔽列表 cat /root/blocklist.txt
一键脚本Fail2ban
Fail2ban是Github上的一键脚本
功能齐全,支持 Centos 6/7 Ubuntu 14.04/16.10 Debian 7/8 (x86/x64)
- 自助修改SSH端口
- 自定义最高封禁IP的时间(以小时为单位)
- 自定义SSH尝试连接次数
- 一键完成SSH防止暴力破解
安装
1 | wget https://raw.githubusercontent.com/FunctionClub/Fail2ban/master/fail2ban.sh && bash fail2ban.sh 2>&1 | tee fail2ban.log |
- 第一步选择是否修改SSH端口。
- 第二部输入最多尝试输入SSH连接密码的次数
- 第三部输入每个恶意IP的封禁时间(单位:小时)
卸载
1 | wget https://raw.githubusercontent.com/FunctionClub/Fail2ban/master/uninstall.sh && bash uninstall.sh |
注意事项
如果你需要更改SSH端口,请记得在防火墙或者安全组中开放新的SSH端口
安装完成后请会重启SSH服务,请重新连接SSH会话
若出现SSH无法连接的情况,请检查是否修改过SSH端口,请填写写改后的正确端口进行连接