可靠(加密)方式验证NAT后面的设备公共IP地址
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可靠(加密)方式验证NAT后面的设备公共IP地址相关的知识,希望对你有一定的参考价值。
我正在编写一个相对较小的bash脚本,它应该更新NAT后面的服务器的DNS记录,这可能会改变其外部IP地址。基本上是使用我的DNS提供商API的免费DynDNS。
我正在使用对外部服务的简单查询来检索服务器的IP地址。但为了安全起见,在将我的DNS A
记录指向由外部服务提供给我的新任意IP地址之前,我首先需要验证这确实是服务器的IP地址。此检查需要涉及加密步骤,因为可能发生活动的MITM攻击并且仅将流量转发到服务器的真实IP地址。
那么最简单的方法(如果可能通过bash)验证这确实是服务器的IP地址是什么?
我认为你的意思是bash脚本运行的地方不是你需要确定其IP的服务器吗?
显而易见的解决方案是使用ssh进行严格的主机检查(以及记住的服务器密钥)或通过带有证书通用的SSL进行连接(您可以使用自签名证书)。前者更容易开箱即用。
假设$IP
是服务器的新外部IP地址,首先通过在localhost上运行ssh-keyscan
并生成临时已知主机文件来获取服务器SSH密钥。然后它用给定的127.0.0.1
替换$IP
并启动与临时已知主机文件到远程IP地址的ssh
会话。如果会话已建立且密钥验证成功,则命令将完全退出。否则它将输出Host key verification failed.
消息。即使在服务器验证失败,因为在验证之前完成主机密钥验证,这也会起作用。该脚本最终检查ssh输出是否包含给定的错误消息并相应地返回valid
或invalid
。
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
以上是关于可靠(加密)方式验证NAT后面的设备公共IP地址的主要内容,如果未能解决你的问题,请参考以下文章