保护云服务器的安全并实现自动化
当我第一次启动云服务器时,我以为最困难的部分已经结束了。事实并非如此。该服务器对全世界开放:启用了根用户登录,端口 22 向互联网上的每个扫描器广播自身,没有防火墙,也没有证书。
几小时后,我检查了 /var/log/auth.log,发现了数百次失败的登录尝试。那一刻,我明白了为什么 SSH 加固不是可选项。
为什么 SSH 加固至关重要
SSH 是通往您服务器的大门。默认情况下,这扇门是大开着的:端口 22,允许密码认证,并允许根用户登录。自动化机器人每小时扫描数百万个 IP 地址,寻找的正是这种情况。
加固 SSH 意味着在任何其他事物接触服务器之前先堵住这个漏洞:
- 禁用根用户登录:
PermitRootLogin no - 禁用密码认证并仅使用密钥:
PasswordAuthentication no - 将 SSH 移出端口 22——我使用端口
2247 - 限制仅一个用户可以登录:
AllowUsers deploy -
在 10 分钟后断开空闲会话:
ClientAliveInterval 300ClientAliveCountMax 2
这五项更改消除了绝大多数自动化攻击。您并非隐形,但不再是一个容易下手的目标。
UFW 的作用
UFW(非复杂防火墙)是 Ubuntu 提供的易于使用的 iptables 接口。您无需编写底层规则,而是直接表达意图:
ufw default deny incoming
ufw default allow outgoing
ufw allow 2247/tcp # 自定义端口上的 SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw --force enable
所有未明确允许的流量都会被阻止。这是应用于网络的最小权限原则,也是管理良好的 Kubernetes NetworkPolicies、身份和访问管理角色以及基于角色的访问控制所遵循的相同原则。
从这里开始学习。
Let's Encrypt 的工作原理
Let's Encrypt 是一家免费、自动化的证书颁发机构,受主流浏览器信任。其流程简单明了:
- 您将域名指向服务器的 IP 地址。
- Certbot 通过 HTTP 提供挑战文件,以证明您拥有该域名的控制权。
- Let's Encrypt 颁发有效期为 90 天的证书。
- Certbot 重写您的 Nginx 配置,以提供 HTTPS 服务并自动重定向 HTTP。
- 计划任务会在证书过期前续订——无需人工操作。
结果是一个免费且自动维护的 HTTPS 网站。
以下命令确认续订流程正常工作,且不会修改您当前的有效证书:
certbot renew --dry-run
幂等性的含义及其重要性
幂等性意味着运行同一操作两次产生的结果与运行一次相同。
这听起来很学术化。其实不然。
在实践中,这意味着:
- 如果
deploy用户已存在,则跳过创建步骤,而不是返回错误。 - 如果证书已存在,则跳过申请步骤,而不是请求重复证书。
- 如果软件包已安装,
apt-get会妥善处理。
如果没有幂等性,在部分失败后重新运行设置脚本可能会导致您将自己锁在系统之外
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。