我們如何允許某些私有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
如果您想了解更多詳細信息,這是一個很好的文檔。