我最近将我的一台服务器迁移到了 RHEL8 同等版本,这意味着 (i) 留下 tcp_wrappers(因为 openssh 不再针对 libwrap 进行编译),(ii) 不再能够轻松灵活地简单地调整hosts.deny和hosts.allow ,以及 (iii) 开始与防火墙之类的东西搏斗。
然而,对于这个特定的盒子,安全要求非常简单:
让 sshd 侦听备用端口(例如 1234)。
有 2 个“远程”用户(服务器上的用户 ID 为“fred”和“barney”)。
用户“fred”居住在阳光明媚的加利福尼亚州,并使用 ISP,他的 IP 是在每个连接上动态分配的。 “巴尼”住在潮湿的德克萨斯州——同样的 DHCP 故事。
他们的 ISP 会以一定的频率改变 IP 块,因此我通常在 Hosts.allow 文件中使用带有通配符的 ISP 名称。例如
sshd : .calif.isp.net : ALLOW sshd : .texas.isp.com : ALLOW
(分别代表“fred”和“barney”)。
- 似乎很难 - >不可能在firewalld中按名称进行过滤,但是......我相当确定我可以(理论上)调整 sshd_config 来处理这类事情。
理论上......但我不确定如何调整 sshd 配置文件来做到这一点。我已经设置了允许用户限制我自己(例如,“wilma”,使用来自佛蒙特州的 ISP - .vermont.com)、“fred”和“barney”
AllowUsers wilma fred barney
但这只是一层洋葱。我们使用密码验证,所以我的猜测(我希望有人能够确认或纠正)是(i)首先关闭密码身份验证,
PasswordAuthentication no
然后 (ii) 将以下内容添加到 sshd 配置文件的底部:
Match Address *.calif.isp.net, *.texas.isp.com, *.vermont.com
PasswordAuthentication yes
这(即使是远程)正确吗?而且,如果正确的话,是否有更有效的方法来列出匹配的地址?在我的示例中,只有 3 个,但假设我有 300 个,而不是 3 个。有没有办法将所有这些地址放在某个“块”中(称之为“友好”),然后简单地使用类似
Match Address friendly
PasswordAuthentication yes
提前谢谢了。
答案1
您的假设是正确的
PasswordAuthentication no
和
Match Address *.calif.isp.net, *.texas.isp.com, *.vermont.com
PasswordAuthentication yes
没有这个概念块,不过,所以这是一个不在friendly
。
但考虑到这个规模(300 个 ISP?公路战士?),您可能会开始考虑使用 2FA 或类似方式设置 VPN,并强制 ssh 通过它,并在 ssh 配置上更加放松。