A:使用公鑰認證

A:使用公鑰認證

我家裡有一個 Raspberry Pi,已連接到我的家庭網路。我用它來運行 VPN 伺服器、SSH 隧道,有時我會透過 SSH 進入它來維護。

在我的路由器上開啟連接埠 (TCP) 以便我在外出時可以遠端連接到我的 Pi 是一個壞主意嗎?我不使用通常的22個連接埠;這是我選擇的隨機連接埠。但是,當我使用nmapon掃描我的 IP 位址時pentest-tools.com,我看到了我選擇用於 SSH 的開放連接埠。我的 Pi 受密碼保護,據我所知,其上沒有任何敏感資料或信用卡號碼。但考慮到我將它用於 VPN 或 SSH 隧道,敏感資料可能會透過它傳輸。那麼在我的路由器上開啟這個 SSH 連接埠有什麼壞處嗎?考慮到我的 Pi 始終處於打開狀態並偵聽該端口,任何人都可以通過打開此端口對我的家庭網絡進行惡意操作嗎?

答案1

在安全性方面,我想到了另外三種方法。

A:使用公鑰認證

為了增加安全性,您可以將 SSH 伺服器設定為使用公鑰身份驗證。也就是說,除了強密碼之外,或取代強密碼,只有當 SSH 用戶端提供與伺服器上的公鑰相符的私鑰時,才會開啟連線。即使攻擊者能夠以某種方式獲得公鑰,他也無法從中恢復私鑰。但是,這不會對連接埠掃描器隱藏您的連接埠。

B:使用不同的連接埠

/etc/ssh/sshd_config此外,透過將 SSH 伺服器配置為偵聽 22 以外的端口,我在減少端口掃描方面取得了良好的經驗。

Port 22

您可以將其變更為 54322:

Port 54322

之後記得重新啟動SSH伺服器;根據您的 Raspberry 上的 Linux,它可能是其中之一

# service sshd restart
# systemctl restart sshd

#如果該符號不在文件中,則在我的範例中表示根提示符。)

不用擔心,您目前的 SSH 會話將保持活動狀態。可能值得嘗試開啟連接埠 54322 的第二個 SSH 會話,看看登入是否仍然有效。記得

  • 將 SSH 用戶端設定為新連接埠
  • 如適用,將網際網路路由器中的新連接埠轉送至 Raspberry Pi

C:關閉端口,僅根據您的要求打開

如果您確實不想向“互聯網”顯示您已打開此端口,請查看端口敲門守護程序,例如knockd。這些程式監聽您定義的(關閉的)端口,並根據同樣由您定義的敲擊序列打開不同的端口,例如您的 SSH 端口。您可以透過手機或筆記型電腦啟動敲門序列,然後 Raspberry Pi 上的敲門守護程序會開啟根本不可見的 SSH 連接埠。

iptables更詳細地說,連接埠碰撞將在您的配置中添加一行。此行將開啟 Raspberry 上的連接埠。這也意味著,之前必須關閉 SSH 連接埠iptables。這意味著您無法透過 SSH 登入。

一個例子knockd.conf可能是這樣的:

[openclosessh]
    sequence    = 1000,2020,3015,65432
    seq_timeout = 15
    tcpflags    = syn
    start_command   = /usr/local/bin/knockd-open.sh %IP%
    cmd_timeout = 30
    stop_command    = /usr/local/bin/knockd-close.sh %IP%

另外,請記得將要存取的連接埠從您的網路路由器轉送到您的 Raspberry。

對應的開啟/關閉腳本可能如下所示:

#!/bin/bash
# /usr/local/bin/knockd-open.sh
# adds two lines at the top of iptables which allow all incoming and outgoing traffic on tcp port 54322
iptables -I INPUT -s $1 -p tcp --dport 54322 -j ACCEPT
iptables -I OUTPUT -d $1 -p tcp --sport 54322 -j ACCEPT

#!/bin/bash
# /usr/local/bin/knockd-close.sh
# deletes those two lines again
iptables -D INPUT -s $1 -p tcp --dport 54322 -j ACCEPT
iptables -D OUTPUT -d $1 -p tcp --sport 54322 -j ACCEPT

請記住使這兩個腳本都可以通過chmod +x /usr/local/bin/knockd*.另外,您應該使用以下其中之一啟動並啟用 Knockd 服務:

# service knockd start && update-rc.d knockd enable
# systemctl start knockd && systemctl enable knockd

特別是如果您使用敲擊無法存取控制台的遠端計算機,您可能希望使用它atd來自動撤銷任何更改和/或重新啟動 Raspberry,以防配置錯誤。

由於 iptables 不會在重新啟動後自動存儲,因此在範例中,您可以是 root(通過su)並且

# at now + 5 minutes
> reboot
> (hit ctrl-d)
# ./script-which-closes-iptables.sh

一個範例./script-which-closes-iptables.sh可能如下所示(請記住使用 使其可執行chmod +x

#!/bin/bash
# allow everything on the loopback interface
iptables -A INPUT -i lo -j ACCEPT
# allow only related or established incoming ssh sessions
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp --dport 54322 -j ACCEPT
# allow outgoing related or established ssh sessions
iptables -A OUTPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp --sport 54322 -j ACCEPT
# allow everything on the loopback interface
iptables -A OUTPUT -o lo -j ACCEPT
# drop everything else in and out
iptables -P INPUT DROP
iptables -P OUTPUT DROP

如果您的 SSH 會話現在即將終止,Raspberry 將在 5 分鐘內重新啟動。如果您的 SSH 會話仍處於活動狀態,請使用下列命令撤銷掛起的重新啟動

# atq
15 reboot
# atrm 15

如果您的 SSH 會話仍然處於活動狀態,請嘗試透過第二個 SSH 會話登入。那不應該起作用。然後用你的手機敲你配置的連接埠/etc/knockd.conf。之後,再次嘗試透過第二個 SSH 會話登入。這次,應該可以了。

然後你可以讓你的 iptables 在重新啟動後保持不變。在您的系統上,您可能必須透過以下方式安裝軟體包

# apt-get install iptables-persistent

保存你的 iptables

# iptables-save > /etc/iptables/iptables-rules

並啟用 iptables 服務

# systemctl enable iptables

答案2

如果您的 Raspberry Pi 具有強密碼和強大的 SSH 安全性,那就沒問題;如果攻擊者無法登入或利用 SSH,則無法使用 SSH 執行任何操作。不過,他們一定會找到港口的。

歷史記載:在過去,出了問題與 SSH 配置;自動產生的密鑰是可以預測的。這已經解決了。

如果攻擊者設法獲得 SSH 訪問權限,他們實際上擁有該設備。然後他們可以用它來做壞事,例如ARP中毒,這使他們能夠捕獲和更改網路上的未加密資料。他們還可以使用 Pi 作為攻擊您其他主機的發動點。 Pi 與其他電腦一樣,您需要小心保護它的安全。

相關內容