【问题标题】:Reliable (cryptographic) way to verify a devices public IP address behind a NAT验证 NAT 后设备公共 IP 地址的可靠(加密)方式
【发布时间】:2018-02-27 09:25:47
【问题描述】:

我正在编写一个相对较小的 bash 脚本,它应该为 NAT 后面的服务器更新 DNS 记录,这可能会更改其外部 IP 地址。本质上是一个免费的 DynDNS,使用我的 DNS 提供商的 API。

我正在使用对外部服务的简单查询来检索服务器的 IP 地址。但为了安全起见,在将我的 DNS A 记录指向外部服务提供给我的新任意 IP 地址之前,我首先需要验证这确实是服务器的 IP 地址。并且此检查需要涉及加密步骤,因为可能会发生活动的 MITM 攻击,并且只会将流量转发到服务器的真实 IP 地址。

那么验证这确实是服务器的 IP 地址的最简单方法是什么(如果可能通过 bash)?

【问题讨论】:

  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Cryptography Stack ExchangeInformation Security Stack Exchange 会是一个更好的提问地点。
  • 直接的答案可能类似于,签署更新 DNS 信息的请求。但是,缺少很多上下文,因此进一步推测是不明智的。您应该在另一个网站上讨论您的协议,例如 Cryptography Stack ExchangeInformation Security Stack Exchange
  • 关于“我正在使用对外部服务的简单查询来检索服务器的IP地址......”的部分,您通常使用DNSSEC。不清楚为什么不能在这里使用。
  • @jww 这是手动 Dyn DNS 方案。所以情况正好相反。

标签: linux bash security cryptography dyndns


【解决方案1】:

我想你的意思是 bash 脚本运行的不是你需要确定其 IP 的服务器吗?

显而易见的解决方案是使用带有严格主机检查(和记住的服务器密钥)的 ssh 或通过带有证书验证的 SSL(您可以使用自签名证书)进行连接。前者更容易开箱即用。

【讨论】:

  • bash 脚本在 NAT 后面的服务器上运行,它应该更新它自己的 A 记录。
  • 你在做某事。我可以连接到 IP 并根据localhost 上的指纹验证指纹。我将发布确切的语法以供参考。
  • ssh 已经检查指纹重新实现该逻辑将是一种方法,但我只需使用严格的主机密钥检查并通过 scp 复制文件 - 然后检查退出代码或存在文件
  • 没有ssh。只需ssh-keyscan
  • 只使用 ssh-keyscan 是不安全的。它容易受到 MITM 的攻击。它从来没有打算作为验证主机密钥的一种方式 - 只是作为填充 known_hosts 的快速修复。您需要一个完整的加密握手来验证主机的身份。它在 ssh-keyscan 的手册页上告诉你所有这些
【解决方案2】:

假设$IP 是服务器的新外部IP 地址,首先通过在本地主机上运行ssh-keyscan 并生成一个临时的已知主机文件来获取服务器的SSH 密钥。然后它将127.0.0.1 替换为给定的$IP 并使用临时已知主机文件启动ssh 会话到远程IP 地址。如果会话建立并且密钥验证成功,该命令将完全退出。否则它将输出Host key verification failed. 消息。即使与服务器的身份验证失败,这也将起作用,因为主机密钥验证是在身份验证之前完成的。脚本最后检查 ssh 输出是否包含给定的错误信息,并相应返回validinvalid

TMP_KNOWN_HOSTS=$(mktemp)
ssh-keyscan 127.0.0.1 > $TMP_KNOWN_HOSTS
sed -i "s/127\.0\.0\.1/$IP/" $TMP_KNOWN_HOSTS
RESPONSE=$(ssh -n -o "UserKnownHostsFile $TMP_KNOWN_HOSTS" -o "StrictHostKeyChecking yes" $IP true 2>&1)

if ! [[ $RESPONSE = *"Host key verification failed."* ]]; then
  echo "valid"
else
  echo "invalid"
fi

【讨论】:

    猜你喜欢
    • 2019-03-16
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    相关资源
    最近更新 更多