如何將 SSH 限制為僅偵聽來自本地網路的請求?
我是開發板和整個 Linux 的初學者和新手,並且一直在使用 Debian 的精彩 SSH 包(我相信這是 OpenSSH)來修補和了解更多資訊,而無需通過物理連接到我的 Pi串列電纜。
我關注了這個論壇上的各種網站和主題來強化和調整我的 SSH 以更安全。然而,我想對我的
sshd_config
文件進行的一項重要更改讓我很煩惱 -ListenAddress
。據我了解,中的ListenAddress
值sshd_config
定義了伺服器應偵聽來自請求的 IP 地址的嚴格參數。
ListenAddress
in的預設值為,sshd_config
已0.0.0.0
被註釋掉。我了解在**“註釋掉預設值”**策略上工作,應用程序將預設使用此值。我讀過男人$$ ual $$指示預設為的頁面偵聽目前路由域上的所有本地地址
雖然我不能自稱對網路了解很多,但我在其他地方讀到表明伺服器將偵聽來自網際網路上任何
0.0.0.0
IPv4 地址的請求?我擔心這可能會使我的(面向網際網路的)Pi 成為攻擊的目標,限制只監聽來自我的內部網路的請求似乎是明智的。除了家裡,我不需要訪問任何地方。ListenAddress
我的路由器(Apple Airport)DHCP 範圍為
10.0.1.2
,10.0.1.200
路由器位於10.0.1.1
。(這似乎是預設設置,如果我知道更多,也許我應該將其更改為192.168.1.1
)。我嘗試設置以下ListenAddress
值,所有這些都將我鎖定在 SSH 之外,需要使用 USB 串列電纜連接以恢復ListenAddress
預設值:
10.0.1.0
- 我認為將最後一個八位字節設置為可能表示該範圍內0
的所有 IP10.0.1.
10.0.1.*
- 我認為使用*
萬用字元可以按照上面的第一個範例工作
10.0.1.**
- 如果單個萬用字元*
僅表示.1
範圍.9
10.0.1.1
- 現在看起來很傻,但我認為設置路由器的 IP 可以解決問題,因為這是分發 IP 地址的神奇“盒子”
10.0.1.1/24
-/24
用於定義前三個八位字節,將最後一個八位字節作為開放的“範圍”。但是好像sshd_config
不認識這個/
角色
127.0.0.1
- 我了解 了or環localhost
回地址選項,但這也不起作用
10.0.1.24
- 我電腦的IP。最後一次擲骰子沒有用,執行時systemctl status ssh.service
返回error: Bind to port 22 on 10.0.1.24 failed: Cannot assign requested address
,fatal: Cannot bind any address
和Failed to start OpenBSD Secure Shell server
消息。我希望這能在某種程度上解釋我的想法,以及到目前為止我所嘗試的 - 我覺得我已經用盡了所有合乎邏輯的選擇,也許
0.0.0.0
是我想要實現的唯一允許的選擇。如果我的問題更適合網路論壇,請告訴我。令人擔憂的是,
systemctl status ssh.service
還建議Deprecated option
以下sshd_config
值:Deprecated option KeyRegenerationInterval Deprecated option RhostsRSAAuthentication Deprecated option RSAAuthentication Deprecated option KeyRegenerationInterval Deprecated option RhostsRSAAuthentication Deprecated option RSAAuthentication
但是,我不知道該程序對這些的青睞值應該是什麼。
到目前為止,我正在推動我(非常有限)知識的極限,但我從我之前的詢問中了解到這個委員會的豐富性和冗長性,以幫助您的友好回复。
我的
sshd_config
預設值是 v1.103 ,我所做的更改是:AddressFamily inet AllowUsers keith Protocol 2 LoginGraceTime 30 KeyRegenerationInterval 3600 PermitRootLogin no StrictModes yes MaxAuthTries 3 MaxSessions 1 PubkeyAuthentication yes IgnoreUserKnownHosts yes IgnoreRhosts yes RhostsRSAAuthentication no RSAAuthentication yes PasswordAuthentication no PermitEmptyPasswords no ChallengeResponseAuthentication no AuthenticationMethods publickey keyboard-interactive UsePAM yes X11Forwarding no PrintMotd no TCPKeepAlive no ClientAliveInterval 360 ClientAliveCountMax 0
我一直在使用各種網站和資源作為指導,因此其中一些值現在可能已經過時了。我了解 SSH 安全性在不斷發展,是一場流動的盛宴。
我希望這能解釋我的思維過程和方法,並為缺乏簡潔性表示歉意。感謝大家迄今為止的友好幫助,非常感謝。從未停止學習!
這
ListenAddress
實際上是在告訴 SSH 伺服器應該偵聽哪個系統介面(0:0:0:0 使它偵聽所有介面)。例如,如果您的系統有一個 Wifi(在 10.0.1.4 上)和一個乙太網(10.0.1.12),ListenAddress 10.0.1.12
它將使其僅在乙太網介面上偵聽,而其他電腦必須通過 SSH 才能10.0.1.12
獲得連接。要將外部使用者限制在給定的地址範圍內,您可以
iptables
直接使用防火牆(但它不適合單純的人類)或更可口的前端,例如ufw
.但是,由於您在路由器後面,路由器可能已經阻止了外部訪問,路由器另一側的系統看不到您的
10.0.1.*
地址,因為它們的所有內容都來自一個地址:您的路由器,並從外部發起連接到您的一臺本地電腦必須將路由器設置為執行埠轉發(到路由器上某個指定埠的連接被轉發到特定的本地地址:本地網路上的埠)。