sukip …sukipai@localhost:~/.ssh$ cat id_ed25519*
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdj.....DNkDf8Npu5p1hBouUlRpY9vg6YAHq
GrPbyulGf7NGWUpvfPsrAAAAFnlvdXJfZW1haWxAZXhhbXBsZS5jb20BAgMEBQYH
-----END OPENSSH PRIVATE KEY-----
ssh-ed25519 AAAAC3NzaC1.....RpY9vg6YAHqGrPbyulGf7NGWUpvfPsr [email protected]
sukipai@localhost:~/.ssh$ ls
agent id_ed25519 id_ed25519.pub
保存好 id_ed25519,id_ed25519.pub 这两份密钥文件。
id_ed25519:私钥,必须严格保密,不要泄露给任何人。id_ed25519.pub:公钥,需要安全地放到远程服务器上。
关系别搞错了,如果私钥不幸泄露,立即停止并检查使用所有使用对应公钥的设备,重新生成密钥并部署。
外网禁止,内网允许密码登录
这是我当前采用的安全策略,最初我是完全禁止了密码登录,但有时候我会使用别人的电脑通过虚拟局域网接入我的内网,这时候如果将密钥部署在别人的电脑上,不就直接泄露了吗?
因此我开放了内网的密码登陆权限,直接我接入局域网,就可以通过密码登录。而接入局域网这一操作本身就已经是安全加密的,因此完全不存在安全问题。
完全这个操作也非常简单,只需在 /etc/ssh/sshd_config.d 中添加一个 99-user.conf 配置文件,并写入以下内容
# 放置在 /etc/ssh/sshd_config.d/,拒绝非内网密码登录
# 全局默认:禁止密码登录
PasswordAuthentication no
# 全局允许:密钥登录
PubkeyAuthentication yes
# 关闭交互式/二次验证,防止绕过密码限制
ChallengeResponseAuthentication no
# 禁止空密码、root 账号登录
PermitEmptyPasswords no
PermitRootLogin no
# 仅允许 10.0.0.0/24 网段内的设备使用密码登录
Match Address 10.0.0.0/24
passwordAuthentication yes
就可以完美实现前面所述的功能。
fail2ban 放爆破
Fail2ban 就像一个看门狗,它会盯着服务器的日志文件,一旦发现某个 IP 在短时间内多次登录失败,就立刻把这个 IP 扔进“小黑屋”(防火墙黑名单),有效防止暴力破解。
安装 fail2ban:
sudo dnf install fail2ban
不要直接修改主配置文件 /etc/fail2ban/jail.conf,因为软件升级会覆盖它。正确的做法是创建一个 jail.local 文件来覆盖设置。
执行命令创建配置文件:
sudo vi /etc/fail2ban/jail.local
然后写入以下配置,里面的内容可以酌情更改:
[DEFAULT]
# 所有监狱的通用设置:忽略本地IP,避免把自己锁在外面
ignoreip = 127.0.0.1/8 ::1
# 发现违规后,封禁时长(秒)
bantime = 3600
# 在多久时间窗口内统计失败次数(秒)
findtime = 600
# 在 findtime 时间内失败超过几次就封禁
maxretry = 5
# 针对 SSH 服务的专门设置
[sshd]
# 启用该规则
enabled = true
# 监听的日志文件路径
logpath = %(sshd_log)s
# 采用系统自带的 SSH 过滤规则
filter = sshd
# 动作:调用防火墙拦截,并发送邮件通知(如果有配置邮件的话)
action = %(action_mwl)s
配置保存后,重启服务并设为开机自启:
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
# 查看所有被激活的监控规则(监狱)状态
sudo fail2ban-client status
# 专门查看 SSH 监控状态,能看到当前被封禁的 IP 列表
sudo fail2ban-client status sshd
由于 fail2ban 只是判断某个人该不该被 ban 掉,实际执行 ban 这个动作的是防火墙,因此 fail2ban 与防火墙高度相关,必须开启防火墙才能使用这个功能。
不过说实话,fail2ban 只是一个不起眼的保险,如果你按我推荐的方法配置 SSH 免密,或者把 SSH 端口改为高位端口(不用 22),攻击者连密码框都摸不到(公网只能密钥连接),根本不可能触发防 ban 机制。
如果你担心 fail2ban 弄乱防火墙规则,也可以不启用。 收起

