ssh爆破防御
综述
目前看到的防御方法有下面几种:
1 启用密钥登录,并禁止密码登录。
2 修改ssh的默认端口
3 使用软件和脚本监测记录多次登录失败的ip,并加入黑名单。
4 给22端口下毒,endlessh,拖慢爆破节奏
5 强密码
6 还有添加其他用户不让root登录,这个感觉比较鸡肋。
1 启用密钥登录,并禁止密码登录。
参考博客:https://blog.csdn.net/qq_16069927/article/details/88952167
这个如果服务器在本地可以接触到的话是可以采用的,并且效果非常好。
但是如果你是用的云服务器,那么这个使用会有风险,万一你的本地电脑坏了打不开了,密匙找不到后,无法登录服务器代价会有些高。
方法如下:
首先使用ssh-copy-id 命令 或者 手动复制的方式将自己的ras公匙放到服务器的authorized_keys中
然后测试一下是不是可以免密登录了。
成功后去修改sshd_config
#启用密钥验证
PubkeyAuthentication yes
关闭密码登录,慎重!!!!!!!
#PasswordAuthentication yes 改为
PasswordAuthentication no
然后重启ssh服务即可
service sshd restart
2 修改ssh的默认端口
这个比较方便安全
默认是22,随便搞个其他的端口
/etc/ssh/sshd_config
Port 2345
3 使用软件和脚本监测记录多次登录失败的ip,并加入黑名单。
系统自带了iptables这个工具,另一个博客用的ufw,这个看着简单,但与fail2ban结合比较麻烦。
可以选择直接用iptables, 这样只需要配置ssh的东西就好。
这里选用的是使用ufw,参考博客:https://ezlost.com/2024/11/10/fail2ban-debian12-%e9%85%8d%e7%bd%ae%e5%8f%8a%e8%87%aa%e5%ae%9a%e4%b9%89%e4%bd%bf%e7%94%a8/
ban ip使用的是ufw
sudo apt install ufw
检查防火墙状态
service ufw status
首先把ssh的端口打开,然后再开开ufw。
默认的ssh端口是22,所以就像下面这样
ufw allow 22
如果改了端口就加入自己的ssh端口
ufw allow 2345
监测访问使用的是fail2ban
ubuntu安装ufw并使用fail2ban的参考博客:https://cn.linux-console.net/?p=3403
sudo apt install fail2ban
安装后的目录如下:
/etc/fail2ban/
├── action.d # 各种动作,默认自带很多常用的
│ ├── dummy.conf
│ ├── hostsdeny.conf
│ ├── iptables.conf
│ ├── mail-whois.conf
│ ├── mail.conf
│ ├── shorewall.conf
│ └── xxxxx.conf
│ .......
├── fail2ban.conf # 默认缺省配置
├── fail2ban.d # 启动目录
├── filter.d # 各种过滤器,默认自带很多常用的
│ ├── apache-auth.conf
│ ├── apache-noscript.conf
│ ├── couriersmtp.conf
│ ├── postfix.conf
│ ├── proftpd.conf
│ ├── qmail.conf
│ ├── sasl.conf
│ ├── sshd.conf
│ └── xxxxx.conf
│ .......
├── jail.conf # 默认监视配置
└─ jail.d
└── defaults-debian.conf ## SSH 相关配置
查看服务状态:
service fail2ban status
关闭配置的一个参考链接:https://linuxize.com/post/install-configure-fail2ban-on-debian-10/
中文的:https://www.myfreax.com/install-configure-fail2ban-on-ubuntu-20-04/
我自己是把/etc/fail2ban/jail.d/defaults-debian.conf 复制为了defaults-debian.local
起到一个覆盖的作用
[sshd]
enabled = true
maxretry = 3
findtime = 1d
bantime = 1w
action = ufw
filter = sshd
修改ufw的action行为
在/etc/fail2ban/action.d/ufw.conf
同样复制一份为ufw.local
修改其中的blocktype
#blocktype = reject
blocktype = deny
在/etc/fail2ban/jail.conf中可以看到默认的banaction用的是iptables-multiport
如果想全部使用ufw,所以这个文件也要改
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
然后在jail.local中修改,他的逻辑是jail.local 覆盖 jail.conf
配置完成后重启fail2ban。
service fail2ban restart
service fail2ban status
如果失败了可以看/var/log/syslog 来检查是哪个配置文件出错了
检查fail2ban状态
fail2ban-client status
只看sshd
fail2ban-client status sshd
看到状态没问题的话就可以最后检查一遍ufw的端口,开启ufw了。
看/etc/ufw/user.rules
检查一下ssh的端口和其他希望开放的端口是否正确配置了。!!!!!!!!检查ssh端口,检查ssh端口,检查ssh端口,小心上不来。
如果没问题就可以打开ufw了。
sudo ufw enable
检查ufw状态
ufw status
4 给22端口下毒,endlessh,拖慢爆破节奏
参考博客:https://www.techsyncer.com/zh-hans/how-to-set-up-an-endlessh-tarpit-on-ubuntu-22-04.html
参考博客:https://askubuntu.com/questions/1385002/endlessh-failed-to-start-endlessh-ssh-tarpit
使用的是一个endlessh的项目
可以直接使用apt 安装的
apt install endlessh
检查状态
service endlessh status
创建config文件来配置port
vim /etc/endlessh/config
配置你的ssh端口,注意这个应该是默认的22端口,你真实的ssh端口应该是别的
Port 22
修改endlessh的配置
/lib/systemd/system/endlessh.service
如果不在这里用命令找一下
find / -name "endlessh.service"
取消以下行的注释
AmbientCapabilities=CAP_NET_BIND_SERVICE
将其中的PrivateUsers 注释掉
#PrivateUsers=true
允许endlessh允许在1024之下的端口
setcap 'cap_net_bind_service=+ep' `which endlessh`
重启服务
systemctl daemon-reload
service endlessh restart
检查服务状态
service endlessh status
5 强密码
避免被爆破成功