我在网络上有三个 Linux 机器(设它们为 A、B 和 C)。
A 是一台提供一些服务(ftp、samba、http)的服务器。我希望只有 B 机器可以访问这些服务。有没有办法,比如使用 ssh 或 VPN 来实现这个目标?您也可以提供相关链接吗?
编辑:从您的回答中,我明白我对身份验证的关注点不是很清楚,而且我把问题简化了太多。基本上没有真正的网络。只有 A 有一个“浮动”以太网插槽。当我们的客户想要进行维护时,他使用普通交叉电缆连接其笔记本电脑 (B)。我只是想避免恶意员工连接自己的笔记本电脑 (C) 并开始使用 ftp 等服务。是的,我可以使用密码来保护服务,但我想在较低级别上使用保护(即基于连接而不是基于服务)。
编辑2:基本上,我只希望拥有正确证书的人能够与 A 建立联系。
答案1
您可以使用 iptables 来阻止除 SSH 之外的所有内容。
SSH 服务 (sshd) 可以配置为需要基于密钥的登录,而不允许基于密码的登录。您可以在服务器上为每个用户生成 RSA 密钥对,并在用户 ~user/.ssh/authorized_keys 文件中安装公钥后,向用户提供生成的私钥的副本。
授权用户可以使用SSH 隧道用于 SAMBA 和 HTTP 服务(并使用 SFTP 而不是 FTP)
您可以通过重命名 ~user/.ssh/authorized_keys 来撤销或禁用访问权限
我不完全确定在服务器端如何控制隧道的意外其他用途。但也许这不是问题 - 只要受信任的用户保护好他们的私钥,不受信任的用户就无法访问服务器。
答案2
有几种不同的方法可以完成这项任务,这取决于你想投入多少工作以及你想要拥有的偏执程度。
- 物理网络:您可以设置一个私有 VLAN,B 和 A 在其中建立连接,并且 B 的服务只监听该特定网络。这不一定是最灵活的,因为任何您想要访问 B 服务的主机也必须连接到该 VLAN。
- TCP 包装器:比在 iptables 中执行此操作要简单得多,并且更容易排除故障。
- IPtables:与物理网络结合使用,会相当紧密,您可以按照 Zypher 的链接进行操作。
答案3
最好的选择是,最简单的方法就是使用 iptables。
让服务器 B 的 IP 为 192.168.1.20
在服务器 A 上创建如下链:
iptables -A INPUT -m tcp -p tcp -s 192.168.1.20/32 --dport 80 -j ACCEPT
iptables -A INPUT -m tcp -p tcp -s 192.168.1.20/32 --dport 21 -j ACCEPT
iptables -A INPUT -m tcp -p tcp -s 192.168.1.20/32 --dport 389 -j ACCEPT
...
iptables -A INPUT -m state --state RELATED,ESTABLISHED --j ACCEPT
iptables -A INPUT -j DROP
这基本上告诉防火墙允许来自一个 IP 的特定端口的连接以及相关流量。对于 ftp,您还必须安装 ftp_contrak 模块。
一些iptables帮助您入门的文档。
重新编辑:
在您给出的案例中,我只会关闭端口,而不会在启动时启动它。当您需要进行维护时,请打开端口。此外,如果您的员工具有物理访问权限并且有恶意意图,那么网络连接就是您最不用担心的事情。
答案4
您是否考虑过使用 VPN?例如,在服务器上安装 OpenVPN,并设置 iptables,以便在此交叉维护接口上仅允许使用 OpenVPN 端口。如果您想为他们提供一个地址,而不是让他们手动调出 IP,也许可以使用 DHCP。然后仅允许 FTP 和您想要的其他协议访问 VPN 上的网络地址。
每个授权员工都有自己的密钥,如果员工离职,您可以撤销他们的密钥。这样,您甚至可以免受前员工的攻击。或者,如果您不想要这种级别的保护,您可以使用共享密钥而不是证书颁发机构。