Linux

如何將 SSH 限制為僅偵聽來自本地網路的請求?

  • June 21, 2020

我是開發板和整個 Linux 的初學者和新手,並且一直在使用 Debian 的精彩 SSH 包(我相信這是 OpenSSH)來修補和了解更多資訊,而無需通過物理連接到我的 Pi串列電纜。

我關注了這個論壇上的各種網站和主題來強化和調整我的 SSH 以更安全。然而,我想對我的sshd_config文件進行的一項重要更改讓我很煩惱 - ListenAddress。據我了解,中的ListenAddresssshd_config定義了伺服器應偵聽來自請求的 IP 地址的嚴格參數。

ListenAddressin的預設值為,sshd_config0.0.0.0被註釋掉。我了解在**“註釋掉預設值”**策略上工作,應用程序將預設使用此值。我讀過男人$$ ual $$指示預設為的頁面

偵聽目前路由域上的所有本地地址

雖然我不能自稱對網路了解很多,但我在其他地方讀到表明伺服器將偵聽來自網際網路上任何0.0.0.0IPv4 地址的請求?我擔心這可能會使我的(面向網際網路的)Pi 成為攻擊的目標,​​限制只監聽來自我的內部網路的請求似乎是明智的。除了家裡,我不需要訪問任何地方。ListenAddress

我的路由器(Apple Airport)DHCP 範圍為10.0.1.210.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 addressFailed 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.*地址,因為它們的所有內容都來自一個地址:您的路由器,並從外部發起連接到您的一臺本地電腦必須將路由器設置為執行埠轉發(到路由器上某個指定埠的連接被轉發到特定的本地地址:本地網路上的埠)。

引用自:https://unix.stackexchange.com/questions/591448