我正在尝试使用不同的 Ubuntu 服务器构建 VM-Home Lab。我想让每个服务器都无法从外部/互联网访问,我认为我可以通过配置 iptables 来实现这一点。
我尝试了几个教程,建议我丢弃所有流量并将其设置为仅接受来自我的内部网络的流量(例如 10.10.0.0/24)。
然而,当我按照这些教程操作时,我总是会遇到几个错误:
- 首先,如果我从该命令开始,
iptables -P INPUT DROP
我就无法继续执行其余命令,因为服务器不知何故无法解析自己的主机名 - 当我添加本地 IP 范围时,
iptables -A INPUT -i eth0 -s 192.168.100.0/24 -m state --state NEW,ESTABLISHED -j ACCEPT
我无法通过 ssh 从主机访问我的服务器,甚至无法加载托管在其上的网页
我的主要目标是使服务器可从家庭网络中的每台计算机、笔记本电脑等访问,但不能从外部访问。这样,当朋友们带着笔记本电脑时,我和他们就可以一起进行编码项目。
也许我做得过头了,也许还有更简单的方法(使用 VirtualBox 虚拟机管理程序)。
机器上运行的服务是gitlab-ce,另一台是jira。
任何帮助都将不胜感激,因为这是我第一次处理这样的事情(我实际上只是一名软件开发人员:P)
干杯
答案1
您可以通过多种方式配置虚拟机管理程序来实现您的目标:
每个虚拟机都有其网络适配器附于
bridged adapter
然后,您必须为每个网络适配器配置一个公共 IP(例如 10.10.0.0/24)。最后,您可以在主机上执行以下 iptables 命令:
iptables -P INPUT DROP
将默认策略设置为 DROPiptables -A INPUT -i eth0 -s 10.10.0.0/24 -j ACCEPT
:允许来自内部网络的数据包。
每个虚拟机都有其网络适配器附于
NAT
。然后,您必须为每个 VM 的每个服务配置端口重定向(VM 设置 > 网络 > 高级 > 底部的端口转发按钮)。有关端口转发配置的更多详细信息,请参阅文章末尾的注释。然后你必须在你的主机上执行以下 iptables 命令:
iptables -P INPUT DROP
iptables -A INPUT -i eth0 -s 10.10.0.0/24 -j ACCEPT
- 与最后一个命令相比,您可以更精确地进行授权:
iptables -A INPUT -i eth0 -s 10.10.0.0/24 --dport ssh -j ACCEPT
但如果您向虚拟机添加更多服务,有时可能必须重新配置 iptables。
在这种情况下,假设您的整个内部网络是 10.0.0.0/8,那么您的虚拟机将无法从互联网和其余内部网络访问。 笔记 您将获得有关桥接/NAT和转发端口 这里
编辑
考虑到请求下方的评论,我没有意识到您的本地网络“仅”是 10.10.0.0/24(而不是 10.0.0.0/8)。最重要的是,10.10.0.0/24 属于更广泛的私有网络10.0.0.0/8 (https://en.wikipedia.org/wiki/Private_network),无法在互联网上路由(我的意思是没有 VPN,但从技术上讲它不是路由)。因此来自互联网的客户端将无法访问内部虚拟机。