家庭服务器之网络安全篇

Categories: 学习分享

保护服务器免受 SSH 攻击的故事

几天前,我发布了一个新的项目,想着能让我的粉丝们试用这个项目,便把服务器的访问地址公布了出去。起初,一切都很顺利,访问量也逐渐增加。然而,第二天,我的服务器却遭遇了前所未有的攻击——大量的 SSH 登录请求蜂拥而至。那些恶意的攻击者似乎毫不妥协,不断尝试用暴力破解的方式,甚至某些 IP 地址短时间内就发起了成千上万次的登录尝试。

那一刻,我意识到我的服务器已经暴露在了攻击者的面前,必须采取一些防御措施来保护它。于是,我决定实施一系列有效的安全策略。

禁止 root 用户 SSH 登录

首先,我决定禁止 root 用户直接通过 SSH 登录。因为 root 用户是服务器的最高权限账户,如果攻击者获取到这个账户的访问权限,后果将不堪设想。我进入了服务器,编辑了 /etc/ssh/sshd_config 配置文件,将 PermitRootLogin 设置为 no:

PermitRootLogin no

做完这一切后,我重新启动了 SSH 服务。搞笑的是,我自己都不知道我的root密码是什么。

禁止使用密码登录,使用 SSH 密钥认证

接下来,我禁用了密码登录,转而使用 SSH 密钥认证。密码可以被暴力破解,尤其是一些简单或默认的密码,攻击者可以轻松猜到。相比之下,密钥认证更加安全,也更加不容易被破解。

我生成了 SSH 密钥对,然后将公钥复制到了服务器上,确保只有通过密钥对验证的用户才能登录。为了避免密码登录的漏洞,我在 /etc/ssh/sshd_config 中设置了:

PasswordAuthentication no

然后重新启动 SSH 服务。这个步骤让攻击者无法再通过密码进行登录,只能依赖密钥认证。

安装并配置 Fail2Ban

然而,我知道仅仅靠这两步还不足以彻底解决问题。为了应对暴力破解,我决定安装 Fail2Ban,一个能够自动识别并拦截多次尝试登录的 IP 地址的工具。

安装完成后,Fail2Ban 默认就会监控 SSH 服务。如果某个 IP 地址在短时间内多次尝试登录失败,它会自动将该 IP 地址封禁。这为我提供了一个额外的防线,防止恶意攻击者反复尝试暴力破解。

我打开了 /etc/fail2ban/jail.local 文件,确保 SSH 防护已经启用:

[sshd]
enabled = true
port    = ssh
logpath = /var/log/auth.log
maxretry = 3

设置完后,我重新启动了 Fail2Ban 服务。自此,如果有任何 IP 地址尝试进行暴力破解,Fail2Ban 会迅速封锁它们,免去我手动干预的麻烦。

修改 SSH 端口号

我还知道,攻击者大多会直接扫描默认的 22 端口。因此,为了增加攻击难度,我决定修改 SSH 的端口号。我在 /etc/ssh/sshd_config 文件中,将 Port 设置为一个不常见的端口号,比如 2222:

Port 2222

更改完端口后,我还更新了防火墙规则,允许新的端口通过:

sudo ufw allow 2222/tcp

这样,攻击者就必须知道新的端口号才能尝试攻击了,这无形中增加了入侵的难度。

配置防火墙来限制 SSH 访问

为了进一步加强安全,我配置了防火墙,仅允许我信任的 IP 地址访问 SSH 服务。我打开了 ufw 配置,限制只有特定的 IP 地址才能访问 SSH 端口。通过这种方法,我能够确保只有自己和信任的人员能够登录到服务器上。

sudo ufw allow from 192.168.1.100 to any port 2222

最后,启用了防火墙:

sudo ufw enable

定期检查日志与更新系统

在防护措施都到位后,我没有松懈。我知道,安全是一项长期的工作,因此我决定定期查看 SSH 登录日志,监控是否有异常登录行为。同时,我也为服务器配置了自动更新,确保所有的软件和系统补丁能及时安装。

总结

这些措施的确有效地提高了我的服务器安全性。SSH 攻击虽然仍然时有发生,但通过这些防护措施,我的服务器再也没有受到严重的侵害。我相信,只有时刻保持警惕、不断加强防护,才能确保自己的服务器不被黑客攻击。

如果你也正在面临类似的问题,或者刚刚将自己的服务器暴露在互联网上,希望这篇文章对你有所帮助。记住,网络安全没有终点,只有不断的提升和完善。

Read More

homeassistant集成系列之zigbee wifi开关

【2025-02-07】今天更新了一下Home Assistant那篇blog,但是GitHub给我报错了,简单记录一下排障过程的学习过程。