TCP 包裝器“除外”選項
我
/etc/hosts.allow
在機器 192.168.122.50 上配置了以下選項。sshd : ALL EXCEPT 192.168.122.1
並從機器 192.168.122.1 嘗試
ssh root@192.168.122.50
,我能夠以 root 身份連接到機器 192.168.122.50。然後我將以下規則添加到
/etc/hosts.deny
192.168.122.50 的文件中sshd : 192.168.122.1
再次,我
ssh root@192.168.122.50
從機器 192.168.122.1 嘗試。但是這次我無法連接,我得到了錯誤ssh_exchange_identification: Connection closed by remote host
/etc/hosts.allow
這讓我懷疑和中的 EXCEPT 指令的實際行為/etc/hosts.deny
。以下是我對此的理解。如果我們將EXCEPT指令放在 hosts.allow 中,這僅意味著我們不允許其後出現的特定主機/網路,但在我們明確提及特定主機/網路之前
/etc/hosts.deny
,連接仍然是可能的。簡單地說,不允許並不意味著否認如果我們將EXCEPT指令放在 hosts.deny 中,這意味著我們間接允許特定主機/網路建立連接。簡單地說,不否認意味著允許
我的判斷是否正確?
注意 1:每當我進行更改時,ssh 守護程序都會重新啟動
/etc/hosts.allow
,/etc/hosts.deny
即使它不是必需的。注意2:我知道允許比拒絕具有更高的優先級。
您可能假設存在隱含的“預設拒絕”:沒有。
ALL EXCEPT 192.168.122.1
根本不適用於主機 192.168.122.1,因此檢查後續條目。假設你沒有一個古老
tcpwrappers
的(即它支持和建構-DHOSTS_ACCESS
)你真的應該只使用hosts.allow
:sshd: 192.168.122.1 : DENY sshd: ALL : ALLOW
(請注意,預設允許當然是不好的做法)
問題是 tcp_wrappers 不能拒絕特定的主機,只能通過使用
EXCEPT
指令(我建議)。因此,對我來說,我發現只有 1 個可行的解決方案,方法是在 hosts.allow 中使用 allow ALL,除了特定主機之外,在 hosts.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
不適合我。