透過 IP 位址限制對特定客戶端的 SSH 訪問

透過 IP 位址限制對特定客戶端的 SSH 訪問

我們如何允許某些私有IP透過SSH登入(RSA金鑰對)進入Linux伺服器?

答案1

您可以透過設定來限制哪些主機可以連接TCP 包裝器 或使用過濾網路流量(防火牆)iptables。如果您想根據用戶端 IP 位址使用不同的驗證方法,請設定 SSH 守護程式(選項 3)。

選項 1:使用 IPTABLES 過濾

iptables 規則按順序評估,直到第一個匹配。

例如,允許來自 192.168.0.0/24 網路的流量,否則丟棄流量(到連接埠 22)。DROP如果您的 iptables 預設策略配置為 ,則不需要該規則DROP

iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

您可以在丟棄規則之前新增更多規則以符合更多網路/主機。如果您有很多網路或主機位址,您應該使用IP集模組。還有伊普蘭格允許使用任意範圍的 IP 位址的模組。

Iptables 在重新啟動後不會持續存在。您需要設定一些機制來在啟動時還原 iptables。

iptables僅適用於 IPv4 流量。具有 ssh 偵聽 IPv6 位址的系統可以使用 來完成必要的設定ip6tables

選項 2:使用 TCP 包裝器

注意:這可能不是現代發行版的一個選項,因為對 tcpwrappers 的支援已從OpenSSH 6.7

您也可以設定哪些主機可以使用 TCP 包裝器進行連線。使用 TCP 包裝器,除了 IP 位址之外,您還可以在規則中使用主機名稱。

預設情況下,拒絕所有主機。

/etc/hosts.deny

sshd : ALL

然後在hosts.allow 中列出允許的主機。例如允許網絡192.168.0.0/24本機

/etc/hosts.allow

sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]

選項 3:SSH 守護程式配置

您可以在 sshd_config 中設定 ssh 守護進程,以根據用戶端位址/主機名稱使用不同的驗證方法。如果您只想阻止其他主機連接,則應該使用 iptables 或 TCP 包裝器。

首先刪除預設的身份驗證方法:

PasswordAuthentication no
PubkeyAuthentication no

Match Address然後在文件末尾的a 之後添加所需的身份驗證方法。放置Match在檔案末尾很重要,因為它後面的所有配置行都放置在條件區塊內,直到下一Match行。例如:

Match Address 127.0.0.*
    PubkeyAuthentication yes

其他客戶端仍然能夠連接,但登入將失敗,因為沒有可用的身份驗證方法。

匹配參數和允許的條件配置選項記錄在 sshd_config 手冊頁。匹配模式記錄在ssh_config 手冊頁

答案2

這裡有一些 SSH 守護程式的附加配置來擴充之前的答案:

  • AllowUsers使用文件中的選項新增使用者過濾sshd_config

    AllowUsers [email protected].* [email protected].* otherid1 otherid2
    

    這允許約翰多管理員2僅來自192.168.1.*地址和頂部1,頂部2來自任何地方。

  • .ssh/authorized_keys將 ssh 金鑰或基於 ca 的金鑰限制為給定使用者主目錄的檔案中的一組位址:

    from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
    

    在此範例中,使用者別名的公鑰僅對給定位址有效。

答案3

如果您不介意安裝 UFW(簡單防火牆):

sudo ufw allow from 192.168.1.0/24 to any port 22

編輯:如前所述,最好只使用金鑰而不是密碼進行身份驗證,這可以透過編輯來完成/etc/ssh/sshd_config

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

答案4

如果您使用 SSH CA 進行用戶端驗證,則可以source-address在簽署憑證時指定選項:

ssh-keygen -s ca_privkey -O source-address=172.16.0.0/16 id_rsa.pub
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

該憑證id_rsa-cert.pub只能用於從172.16.0.0/16位址登入主機(除非127.0.0.1您也指定了該位址)。

man 1 ssh-keygen如果您想了解更多詳細信息,這是一個很好的文檔。

相關內容