可靠(加密)方式验证NAT后面的设备公共IP地址

问题描述 投票:0回答:2

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

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

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

linux bash security cryptography dyndns
2个回答
0
投票

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

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


0
投票

假设$IP是服务器的新外部IP地址,首先通过在localhost上运行ssh-keyscan并生成临时已知主机文件来获取服务器SSH密钥。然后它用给定的127.0.0.1替换$IP并启动与临时已知主机文件到远程IP地址的ssh会话。如果会话已建立且密钥验证成功,则命令将完全退出。否则它将输出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
© www.soinside.com 2019 - 2024. All rights reserved.