Featured image of post ssh 防爆破自定义工具

ssh 防爆破自定义工具

这是一个公网服务器ssh登录保护的实践,我自己的博客是在京东云,开放了公网ssh登录的端口,原来是22,总有黑客在不断地扫,每天lastb一堆,非常烦人。

fail2ban

然后我启用了fail2ban:

1
$ dnf install -y fail2ban

编辑配置文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
cat > /etc/ <<-EOF
[DEFAULT]
# 用于指定哪些地址ip可以忽略 fail2ban 防御,以空格间隔
ignoreip = 127.0.0.1/8
# 客户端主机被禁止的时长(默认单位为秒)
bantime = 2592000
# 匹配到的密码输入次数阈值
maxretry = 3
# 过滤的时长(秒)
findtime = 86400

# SSH servers
[sshd]
enabled = true
port = 22222
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
#backend = systemd
logpath = %(sshd_log)s
backend = %(sshd_backend)s
EOF

我只能说,有效但是我不喜欢,这种事后治理的黑名单模式,别人还是能扫到。对于有洁癖的我来说是不可接受的,改了ssh端口,只能说有改善,但是不大。也曾想过关了密码验证用证书验证,但是我自己的场景不适合。

白名单模式

没办法了,自己写代码实现吧,大概的逻辑就是我自己实现一个http服务器,这个http server需要实现一个接口,这个接口负责监听一个承担放行ssh端口的路由。

  • 当调用这个接口的时候 -> 会要求你做认证 -> 如果认证通过 -> 那我就把你的IP加到白名单中。你就可以ssh远程了

  • 当调用这个接口的时候 -> 会要求你做认证 -> 如果认证不通过 -> 后台开始计数 -> 同一客户端多次错误访问触发尝试限值 -> 获得了12小时冷静期 -> 再访问的话直接返回400。

其中获取IP有几个优先级,分别是:

  1. 用户在header中自定义的(这个优先级最高)

  2. x-fowarded-for

  3. x-real-ip

  4. 上一级的remote_addr

代码我就不贴了,怕人搞事情。总之改完以后世界非常清净,如果你也有一样的烦恼,提供一个思路啦。