TCP 包装器“例外”选项

TCP 包装器“例外”选项

/etc/hosts.allow在机器 192.168.122.50 上配置了以下选项。

sshd : ALL EXCEPT 192.168.122.1

并从机器 192.168.122.1 尝试,我能够以 root 身份连接到机器 192.168.122.50。ssh [email protected]

然后我将以下规则添加到/etc/hosts.deny192.168.122.50 的文件中

sshd : 192.168.122.1

我再次从机器 192.168.122.1 进行尝试。但这次我是ssh [email protected]无法连接我得到了错误

ssh_exchange_identification: Connection closed by remote host

/etc/hosts.allow这让我怀疑和中 EXCEPT 指令的实际行为/etc/hosts.deny。以下是我从中了解到的。

如果我们把除了Hosts.allow 中的指令,仅意味着我们不允许其后的特定主机/网络,但仍然可以建立连接直到我们在 中明确提到了特定的主机/网络/etc/hosts.deny。简而言之不允许并不代表拒绝

如果我们把除了Hosts.deny 中的指令,这意味着我们间接允许特定主机/网络建立连接。简而言之不否认意味着允许

我的判断正确吗?

注 1:每当我进行更改时,ssh 守护进程都会重新启动/etc/hosts.allow/etc/hosts.deny即使这不是必需的。

注2:据我所知,允许比拒绝具有更高的优先级。

答案1

您可能假设有一个隐式的“默认拒绝”:没有。

ALL EXCEPT 192.168.122.1根本不适用于主机 192.168.122.1,因此会检查后续条目。

假设您没有古老的 tcpwrappers(即它支持并构建-DHOSTS_ACCESS)你真的应该只使用hosts.allow

sshd: 192.168.122.1 : DENY
sshd: ALL : ALLOW

(注意默认允许当然是不好的做法)

答案2

问题是 tcp_wrappers 无法拒绝特定主机,只能通过使用EXCEPT指令(我建议)。因此,对我来说,我只找到了 1 个可行的解决方案:在hosts.allow 中使用allow ALL(除了特定主机)并在hosts.deny 中使用deny ALL:

# hosts.allow
sshd : ALL EXCEPT 11.22.33.44

# hosts.deny
sshd : ALL : DENY

我知道这有点奇怪,但它确实有效。

解决方案如

sshd: 192.168.122.1 : DENY
sshd: ALL : ALLOW

不适合我。

相关内容