这个环境几乎所有东西都是双胞胎,包括两个网络服务器/防火墙/网关系统,而且它们的版本已经很老了,所以我决定从其中一个升级Fedora Server 30 to 38
。当然,这个想法是将两者都“带入现代时代”,但一次一个。
我的时机很奇怪,因为就在我开始升级的同时,甚至没有接触(物理或电子)另一台服务器,它就决定失败了!所以,现在我有一个“服务器停机”的场景。-呃- 不幸的是,这也意味着我没有可供查看的工作示例。
我没有接触的那个显然有硬件问题,我现在无法解决它们,所以我专注于我已经开始的那个,它现在已经从 Fedora Server 38 的升级/更新中出现了。 . 除了它有一个问题,它不是一个真正的网关!确认!
需要明确的是,从它你可以很好地访问互联网和内部网络。但它并没有通过它传递位。
当然,它都是通用的 Fedora Server(Fedora Core 38,服务器版本进行了任何调整)并且 30 和 38 之间的任何差异都可能是巨大的,尽管这里最重要的是网络。
它有两个 NIC,我按原样配置它们(即 IP 地址、掩码等),实际上安装过程似乎有助于识别哪个 NIC 是内部的,哪个是外部的。我使用了我过去的经验,并且非常确定我做对了。
事实上,一旦启动,我就可以立即通过内部网络通过 ssh 访问该框。而且,好吧,在这样的系统上有很多事情要做,但很快我就了解了这一切的防火墙方面。(那时我没有意识到另一个系统没有响应。)
我做的第一件事是将接口移动到内部和外部区域,然后打开外部区域的伪装。我使用 forward-port 命令等转发邮件等等,最终得到的外部看起来像这样:
# firewall-cmd --zone=external --list-all
external (active)
target: default
icmp-block-inversion: no
interfaces: enp1s0
sources:
services: http https ssh
ports:
protocols:
forward: yes
masquerade: yes
forward-ports:
port=25:proto=tcp:toport=25:toaddr=192.168.1.1
source-ports:
icmp-blocks:
rich rules:
另一个,内部:
# firewall-cmd --zone=internal --list-all
internal (active)
target: default
icmp-block-inversion: no
interfaces: enp2s0
sources:
services: dhcpv6-client mdns samba-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
顺便说一句,我没有向内部区域添加任何服务——我猜它们显然只是默认设置。
我花了很多时间在路由上,因为从一开始我就觉得它很麻烦。然而,现在是这样的:
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default router 0.0.0.0 UG 100 0 0 enp1s0
router 0.0.0.0 255.255.255.255 UH 100 0 0 enp1s0
192.168.1.1 0.0.0.0 255.255.255.0 U 101 0 0 enp2s0
192.168.1.1 0.0.0.0 255.255.255.0 U 101 0 0 enp2s0
仅供参考,这个版本的 Fedora 不使用 IP 表,而是使用网络管理器——我从一开始就讨厌的工具集,但现在看起来更成熟了。无论如何,在网上可以找到的大多数资料都谈到了这种较旧的策略,但没有任何帮助。但是,此页面为人们指明了正确的总体方向。
更新 1
我得到了显然备份失败的旧硬件。这并不难做到,但它增加了我们的胜算。...我说“我们的”,因为一位同事加入了我的行列;他专注于旧盒子,而我专注于新盒子。
NEITHER 没有将位作为网关/防火墙传递,这让我感到困惑。然而,我的同事提醒说,一个系统已经不能正常工作,可能是由于尝试让特定的 OpenVPN 安装运行失败。既然他做了那项工作,那么,他将继续在那里。
这必须很简单;什么基本原则被忽视了?!
dhcpv6-client
事实证明,系统正在阻止除服务、mdns
、之外的所有服务的传递samba-client
,ssh
因为这些服务已经配置为已接受。从某种意义上说,它工作正常,只是没有配置为传递所有位。
任何改变从内部接口接受数据包的防火墙指令,无论是通过 or 命令
firewall-cmd
还是nmcli
通过配置文件(例如/etc/NetworkManager/system-connections/enp1s0.nmconnection
.实际上,您最快的选择是对内部界面进行以下更改之一:
将接口置于“受信任”区域,或者;
启用每个单独的“服务”和/或端口(这对我们这些拥有我们刚刚发明的服务的人来说很烦人——你知道,“黑客”这样做……),或者;
将内部区域的“目标”设置为“接受”,如下所示:
firewall-cmd --zone=internal --set-target=ACCEPT
,或;请注意,我从未尝试过选项 3,但根据文档,它应该有效。
在我看来,安全架构存在缺陷,并且鉴于 Network Manager 仍在进行实质性开发,我将发表这些评论,希望能扩展对此事的思考。以机智:
它已经具备了基础知识,但人为地限制了灵活性,应该加以改进。请注意,它已经必须执行该区域是否恰好被称为“受信任”的布尔检查,因此让“受信任”只是所有区域的单位属性更有意义。这将允许权限是加法的或减法的;如果该位为零,则从不允许任何内容的前提开始,然后列出例外情况,或者如果设置,则使用允许所有内容的前提,然后列出例外情况。这是更好地设计(通常是大型)、复杂的软件包做事的方式,比如BigSur 系统,例如,它恰好提供了这种安全逻辑——加法或减法;您要么全部授予然后显式删除,要么不授予任何特权然后添加一些。它对于系统管理来说要快得多,而且更容易理解,而不是像区域恰好被命名为“受信任”那样出现奇怪的异常。
但是后来,我读到 Network Manager 的初衷是为不太熟练的普通观众服务,因为 IP 表被认为太难处理了。(虽然 IP 表具有挑战性,但网络管理人员不得不向其复杂的“丰富规则”低头。......但我离题了。