我正在尝试弄清楚我的大学 Ubuntu 22.04 计算机需要向其他计算机提供哪些服务。我经常ssh
进入这台机器,并在我实验室的其他计算机中使用它作为NFS
服务器。然而,我想不出这台机器需要提供任何其他服务。因此,我试图通过关闭不必要的服务来强化计算机。不幸的是,鉴于我对 Linux 服务和端口的了解,我不确定哪些是必要的,哪些是不必要的。
如果我跑$ netstat -A inet --listening
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:37725 0.0.0.0:* LISTEN
tcp 0 0 localhost:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:nfs 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8787 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:42757 0.0.0.0:* LISTEN
tcp 0 0 localhost:51144 0.0.0.0:* LISTEN
tcp 0 0 localhost:17603 0.0.0.0:* LISTEN
tcp 0 0 localhost:17600 0.0.0.0:* LISTEN
tcp 0 0 localhost:12546 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:56703 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:56607 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:db-lsp 0.0.0.0:* LISTEN
tcp 0 0 localhost:44911 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:58017 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 localhost:32997 0.0.0.0:* LISTEN
udp 0 0 0.0.0.0:17500 0.0.0.0:*
udp 0 0 0.0.0.0:53815 0.0.0.0:*
udp 0 0 0.0.0.0:55047 0.0.0.0:*
udp 0 0 0.0.0.0:57529 0.0.0.0:*
udp 0 0 localhost:domain 0.0.0.0:*
udp 0 0 0.0.0.0:sunrpc 0.0.0.0:*
udp 0 0 localhost:864 0.0.0.0:*
udp 0 0 0.0.0.0:33798 0.0.0.0:*
udp 0 0 0.0.0.0:35842 0.0.0.0:*
udp 0 0 0.0.0.0:36165 0.0.0.0:*
udp 0 0 0.0.0.0:mdns 0.0.0.0:*
udp 0 0 0.0.0.0:40000 0.0.0.0:*
udp 0 0 0.0.0.0:43526 0.0.0.0:*
因为最近被用来放大DNS攻击,所以暂时停止了sunrpc服务。我的理解是我需要将该服务作为 NFS 的一部分(但我的理解很容易是错误的)。
根据我的需要,我需要向其他机器提供哪些服务(如果有的话)。
在我确实需要提供的那些中,除了用于
ssh
连接的fail2ban之外,我还需要采取哪些步骤来强化我的机器?
这可能是一组过于宽泛或天真的问题,如果是这样,任何见解仍然将不胜感激。
答案1
您的第一步(与防火墙一起)是查找哪些实际服务正在侦听哪些端口。然后根据以下情况做出决定netstat -p
服务,不在端口号上。
例如,您是否需要在服务器上运行 Dropbox Sync?您的防火墙规则不应该只是“允许端口 8787”,而应该是“允许 8787因为我们托管绑定在该端口上的服务 XYZ”。
您可以忽略所有绑定到localhost
或 的套接字127.0.0.1
;无论如何,它们都无法从外部访问,因此它们可能用于内部进程通信。
(另外,不要将你的输出限制为inet
- 你将要这样就忘记了 IPv6,即使您认为自己已经严格锁定了 IPv4 规则,您也会碰巧将其完全开放。)
在我确实需要提供的那些中,除了用于 ssh 连接的fail2ban 之外,我还需要采取哪些步骤来强化我的机器?
至少,决定每项服务是否应该“向全世界开放”或“向大学开放”或“向实验室开放”,并相应地设置防火墙规则。
例如,如果 SSH 一开始就不允许来自 Internet 的连接,那么对 SSH 的fail2ban 的需求就会减少。 (即使您在家进行管理,您的大学也可能为此目的提供 VPN 服务。)
类似地,具有基于 UID 的身份验证的 NFS 应该向尽可能少的“受信任”机器开放(因为任何在自己机器上拥有 root 权限的人都可以绕过 NFS 安全性)——绝对不是向全世界开放——而具有 Kerberos 身份验证的 NFS 可以几乎可以访问互联网(也许不明智,但协议足够强大)。
将一些服务拆分到它们自己的机器(容器、虚拟机或物理)中通常是一个好主意。
由于我最近被用来放大 DNS 攻击,所以我暂时停止了 sunrpc 服务。我的理解是我需要该服务作为 NFS 的一部分(但我的理解很容易出错)。
“sunrpc”是客户端用来查找动态端口号的端口映射器服务,因为旧的 NFSv3 版本由多种不同的协议组成(NFS 本身、MOUNT 协议、STATD 协议)。它类似于 Windows 上的 MS-RPC 端口 135。
仅 NFSv2/NFSv3 需要端口映射器。如果您专门使用 NFSv4,那么您只需要单个 TCP(而不是 UDP)端口 2049。
如果您需要 NFSv3,请记住“动态”部分 - 使用防火墙,您将需要为涉及的每个 RPC 服务手动选择一些静态端口号,以便它不会在每次重新启动时发生变化。如今,它们都可以通过通用/etc/nfs.conf
文件进行设置。