ssh 防爆破自定义工具
fail2ban
然后我启用了fail2ban:
$ dnf install -y fail2ban
编辑配置文件:
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有几个优先级,分别是:
-
用户在header中自定义的(这个优先级最高)
-
x-fowarded-for
-
x-real-ip
-
上一级的remote_addr
代码我就不贴了,怕人搞事情。总之改完以后世界非常清净,如果你也有一样的烦恼,提供一个思路啦。
浙公网安备 33010602011771号