作者選擇了自由和開放源碼基金作為寫作以換取捐款計劃的受益者。
介紹
當您查看身份驗證日誌時,您可能會看到來自各種IP地址的多個登錄嘗試失敗。這些失敗的登錄嘗試通常來自一個利用預設憑證掃描整個網絡以尋找易受攻擊服務器的僵尸網絡節點。雖然大多數人會使用安全密碼或SSH密鑰防止攻擊者登錄他們的服務器,但某些服務器可能會對這種掃描易受攻擊。儘管您可能無法阻止這些攻擊,但您可以使用網絡陷阱來減緩其速度。
在本教程中,您將安裝和配置Endlessh,一個將無限長的標語慢慢發送給任何嘗試登錄的用戶的網絡陷阱。您還將配置SSH服務以在不同端口運行,這將使您的身份驗證日誌更易讀。
完成本教程後,您將能夠在非標準端口連接到您的服務器,而任何掃描您的服務器的機器人將會發現他們的時間被浪費在敲打永遠不會打開的門上。
先決條件
完成本教程,您需要以下東西:
- 一台擁有sudo非根用戶、防火牆和至少1GB RAM的Ubuntu伺服器,您可以按照使用Ubuntu 22.04進行初始伺服器設置來設置。
- 在您的伺服器上安裝了Git,您可以通過Git安裝教程完成。
步驟1 – 將SSH移動到非標準端口
在這一步中,您將把SSH移動到一個非標準端口,以便為Endlessh釋放一個端口。因為殭屍網絡沒有無窮無盡的資源,它們通常只掃描默認的SSH端口(22
)。通過將您的SSH移動到非標準端口,您可以將殭屍網絡困在Endlessh的捕獲器中。
首先,使用以下命令備份您伺服器上的SSH配置文件:
如果出現問題或您決定將SSH移回默認端口,可以使用此文件恢復原始設置。
打開SSH配置文件/etc/ssh/sshd_config
,使用nano或您喜歡的文本編輯器:
找到#Port 22
這一行。通過刪除#
來取消對這一行的注釋,然後將端口更改為服務器上未使用的端口:
...
Port 2222
...
一個通常未使用的端口的例子是2222
。您可以選擇任何您想要用於常規SSH連接的端口。保存並關閉文件。
如果您的服務器使用防火牆,比如ufw
,您需要允許流量通向新端口:
接下來,重新啟動SSH服務:
在另一個終端會話中,嘗試使用新端口連接到您的服務器:
警告:除非您確認可以使用新端口的SSH,否則不要關閉活動的SSH會話。如果無法通過新端口連接,關閉會話將使您失去對服務器的訪問權限。如果在另一個終端會話中無法連接到服務器,可以通過運行以下命令恢復原始的SSH設置:
如果遇到進一步的問題,請檢查sshd
是否成功重新啟動,並檢查您的防火牆設置以確保端口2222
接受tcp流量。
一旦您驗證了您可以對端口2222
進行新連接,您可以安全地關閉原始終端。在將來連接到您的服務器時,您將始終需要指定新端口,如下所示:
現在您已成功將SSH移動到非標準端口,是時候設置Endlessh了。
第2步 – 安裝 Endlessh
Endlessh 沒有官方套件,因此您將克隆存儲庫以手動構建它。您將使用 Git 克隆存儲庫,build-essential
套件(用於編譯項目)和 libc6-dev
套件。
使用 apt 套件管理器安裝所需的套件:
在提示時使用 y
確認安裝。
然後從 GitHub 克隆 Endlessh 存儲庫到您的主目錄:
進入項目目錄並使用 make
命令編譯 Endlessh:
現在,您可以使用以下命令啟動 Endlessh:
為了測試 Endlessh 是否正常工作,您可以嘗試使用 -v
詳細標誌對端口 22
進行 SSH 連接,這將顯示傳輸無限的橫幅。在新的終端窗口中,使用以下任一命令對端口 22
進行 SSH 連接:
當您的新 SSH 會話嘗試連接到端口 22
時,您將在連接終端中每 10 秒看到一串隨機字符,直到會話被關閉,如下面的輸出:
Outputdebug1: kex_exchange_identification: banner line 0: NvnHF>]&W4p+tg*"+
debug1: kex_exchange_identification: banner line 1: n<
debug1: kex_exchange_identification: banner line 2: @/O5c0/;>1b{qd(M,vK
debug1: kex_exchange_identification: banner line 3: i+ OZ
debug1: kex_exchange_identification: banner line 4: yn
debug1: kex_exchange_identification: banner line 5: T[V\\[HUg
一旦您確認它正常工作並嘗試使用新會話進行連接,您可以關閉新終端並在原始終端會話中使用 Ctrl+C
停止 Endlessh。
在這一步,您已經從源代碼中下載並構建了 Endlessh。接下來,您將對其進行配置並將其部署為一個服務,使其在登出和重新啟動服務器時保持持久性。
步驟 3 – 配置 Endlessh
在此步驟中,您將設置 Endlessh 為一個服務,該服務將在您的會話結束後持續存在並在系統重新啟動後保持持久性。
將編譯的二進制文件移動到 /usr/local/bin
目錄:
如果提示,輸入您的密碼。
將項目中的服務文件複製到 /etc/systemd/system
目錄:
您將稍微更改服務文件以在 1024
以下的端口上運行 Endlessh。在 nano 或您喜歡的文本編輯器中打開服務文件:
找到有關在 1024
以下端口上運行 Endlessh 的部分。
通過刪除開頭為 AmbientCapabilities=CAP_NET_BIND_SERVICE
的行上的 #
,並在開頭添加 #
到行 PrivateUsers=true
,像這樣:
...
## 如果您希望 Endlessh 在端口 < 1024 上綁定
## 1) 執行:
## setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
## 2) 取消以下行的註釋
AmbientCapabilities=CAP_NET_BIND_SERVICE
## 3) 註釋以下行
#PrivateUsers=true
...
保存並退出文件。
接下來,您將允許 Endlessh 在低於 1024
的端口上運行,也被稱為 Internet 域特權端口。使用 setcap
命令為 Endlessh 二進制文件設置此功能:
您需要為 Endlessh 定義一個配置文件,告訴它使用哪個端口。創建並打開一個名為 /etc/endlessh/config
的配置文件:
在配置文件中,將要使用的端口定義為 22
:
Port 22
保存並關閉文件。
現在您可以持久地啟動 Endlessh 服務:
包括 --now enable
將使服務在重新啟動服務器後持久存在。
要檢查服務是否成功啟動,您可以使用 systemctl status
命令:
如果成功啟動,您將看到以下輸出:
Output● endlessh.service - Endlessh SSH Tarpit
Loaded: loaded (/etc/systemd/system/endlessh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-22 11:20:39 UTC; 1 months 11 days ago
Docs: man:endlessh(1)
Main PID: 34007 (endlessh)
Tasks: 1 (limit: 1081)
Memory: 380.0K
CGroup: /system.slice/endlessh.service
└─34007 /usr/local/bin/endlessh
如果它正在運行,您可以在新的終端會話中嘗試連接到端口 22
:
因為您的 tar 坑正在運行,新的終端會話將無法連接並將永久運行,直到在連接終端中手動使用 Ctrl+C
停止它。
如果您想要停止服務運行,您可以使用以下命令:
停止服務後,您可以按照第 1 步警告中的 SSH 恢復說明恢復原始服務器配置。您可以使用 sudo systemctl --now enable endlessh
重新啟用服務,而不必再次進行設置過程,但請確保在此操作時 SSH 未在端口 22
上運行。
結論
您已成功安裝並配置了Endlessh,幫助清理了您的身份驗證日誌,並準備好浪費隨機SSH機器人的時間。
設置好Endlessh陷阱後,請查看其他建議的安全措施來保護您的伺服器。
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-endlessh-tarpit-on-ubuntu-22-04