1. 发现问题
只要服务器暴露在外网,就总有恶意人员试图暴力破解你的ssh登录密码。
查看机器是否被尝试暴力破解登录的方式:
centos查看 /var/log/secure 日志文件
ubuntu查看 /var/log/auth.log 日志文件
2. 寻找解决方案
在网上推荐最多的古典资料是使用file2ban,一种使用python实现,通过监控日志文件,写入iptables规则来禁止超过失败登录次数的IP登录。还有零星的通过/etc/hosts.deny配置文件的方案。
自己不想应用python和iptables方案。于是决定用go语言自写一个基于/etc/hosts.deny的程序实现。但自己在写到一半的时候,在github上发现有人已经写好类似的了,简单阅读源码后发现思路基本一模一样,所以干脆自己就不写了,用现成的得了。
在网上发现的现成工具之一的地址:github.com/caryxiao/...
原理阐述:
通过 github.com/hpcloud/tail 来监控日志文件
当发现非法(错误)登录日志时,解析并记录ip,统计登录错误次数,超过阈值(默认5)则写入/etc/hosts.deny
3. 应用方式
3.1 编译程序包
首先 clone github.com/caryxiao/...
然后编译对应平台的程序包。如我在windows powershell平台下编译linux, amd63 arm64 arm的命令如下
$env:GOOS="linux"$env:GOARCH="amd64"go build -o ssh-hosts-deny-amd64 .\cmd\main.go$env:GOARCH="arm64"go build -o ssh-hosts-deny-arm64 .\cmd\main.go$env:GOARCH="arm"go build -o ssh-hosts-deny-arm .\cmd\main.go
3.2 写一个启动文件 start.sh
centos平台
#!/bin/bashnohup ./ssh-hosts-deny-amd64 \ -log-level=4 \ -log-path=ssh-hosts-deny.log \ -sf=/var/log/secure 2>&1 &
ubuntu平台
#!/bin/bashnohup ./ssh-hosts-deny-amd64 \ -log-level=4 \ -log-path=ssh-hosts-deny.log \ -sf=/var/log/auth.log 2>&1 &
最后把编译好的程序包和启动文件上传到自己的服务器启动就可以了。
版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除