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 强密码

避免被爆破成功

6 还有添加其他用户不让root登录,这个感觉比较鸡肋。

文章目录