我们的服务器(所有 CentOS)都受 IP 限制,但我经常外出时被困在动态 IP 地址上。使用 DynDNS 小部件,我已将此动态 IP 设置为始终与 DynDNS 主机名同步,但我应如何将其解析为 hosts.allow 中的 IP。目前,我编写了一个 cron 脚本,每隔几分钟运行一次,检查分配给该主机名的 IP,并将动态 IP 写入 hosts.allow,但我不太热衷于将其作为解决方案。有没有更优雅的方式来做到这一点?
谢谢。
答案1
下面的脚本会 ping 你的动态地址并仅抓取 ip,然后与 last_ip.txt 中存储的 ip 进行比较,如果它们不同,则 hosts.allow 中的 ip 将被删除并替换为新的 ip 以及 last_ip.txt 中的 ip。
然后,您可以在 crontab 上设置此代码每 5 分钟或 10 分钟或任何您认为合适的时间运行一次。
它并不那么复杂,可能会解决您的问题......
#!/bin/bash
DYN_IP="www.google.com.br"
CMD=$(ping -c1 $DYN_IP | head -1 | awk -F' ' '{ print $3}' | sed 's/(\|)//g')
FILE="./last_ip.txt"
NEW_IP=$CMD
if [ -e $FILE ]; then
OLD_IP=$(cat $FILE)
else
OLD_IP="0"
fi
if [ $OLD_IP != $NEW_IP ]; then
echo $NEW_IP > last_ip.txt
sed -i "/^sshd: $OLD_IP/d" /etc/hosts.allow
echo "sshd: $NEW_IP" >> /etc/hosts.allow
echo "Allow ip changed to $NEW_IP"
fi
答案2
我目前的解决方案是网状结构我首先向一个特殊的网页发出请求(可以选择使用我的用户名/密码),该网页会为我请求的 IP 打开 SSH 门。这就是我从手机 ssh 进入一些服务器的方式。这样可以将涉及的额外软件降到最低,这样我就可以坐在咖啡馆的电脑前,在几秒钟内授权它进行标准 ssh 访问,但可以防止入侵者甚至能够使用我的 ssh 端口。任何敲门解决方案的缺点是额外的故障点。我的安全网是一些允许访问的硬编码 IP,如果敲门脚本或处理它们的 Web 服务器出现问题,我只需使用其他具有永久访问权限的机器之一进入并修复损坏的机器。
或者,一些动态 IP 系统具有“钩子”或“回调”,可用于自动获取 IP 地址更改通知。这可以通过电子邮件或可用作“敲击”的 http 请求进行。或者,您可以在本地端编写脚本,以便每当您的网络脚本运行或本地 IP 发生变化时,您都会自动触发某种敲击或触发器,强制更新动态 IP 访问列表。
答案3
我理解您对第三方使用开放 SSH 端口的担忧。我已经用不同的方式解决了这个问题。在我的私人服务器上,SSH 端口对所有人开放,但它受到 fail2ban 的监控,这是一个适用于 debian(可能也适用于大多数其他发行版)的智能小软件包。只要有人从同一个 IP 地址尝试登录 3 次后仍失败,该地址就会被防火墙封锁几天。
自从我安装了这个软件后,我的服务器就变得安静多了。而且我仍然可以从世界任何地方登录(使用 USB 上的密钥)。
如果您是唯一登录该服务器的人,您也可以在防火墙中执行简单的端口转发或在不同的端口上运行 sshd。
答案4
我会从不同的角度来处理这个问题。我不会让每台服务器都维护一个白名单 IP 列表,而是将它们全部配置为仅允许来自“内部”IP 的 ssh。然后设置一个单独的网关/登陆平台主机,您可以通过 VPN 接入。现在,您可以通过该框安全地访问其余服务器。
这会将您的攻击面限制在单个盒子上,而不是所有盒子上。此外,许多/大多数 VPN 解决方案允许您使用证书、双因素身份验证和其他内容以及(或代替)简单密码来增强连接的安全性要求。总而言之,这将为您提供更高的安全性、更大的灵活性和更好的可维护性。
有许多 VPN 选项可用(我非常喜欢OpenVPN(我自己)您可以使用它们为您的设备正确设置安全接入点。其中许多设置都相对容易,对于像这样的小型设置,它们所需的资源很少。