如何使用端口碰撞為SSH登錄確保安全?
譯文【51CTO.com快譯】Secure Shell是登錄到遠(yuǎn)程Linux服務(wù)器的一種事實上的標(biāo)準(zhǔn)。多年來,它為許多管理員提供了良好的服務(wù)。但僅僅因為名稱中有“Secure”(安全)這個詞,并不意味著它總是很安全。事實上,您總是可以采取一些措施使SSH更安全。
其中一個方法就是借助端口碰撞(port knocking)。現(xiàn)在,在我們開始之前,我想明確指出,任何使用SSH的人都應(yīng)該始終做兩件事:
- 使SSH保持最新版本。
- 使用SSH密鑰驗證。
應(yīng)該將以上兩項都視為使用Secure Shell的標(biāo)準(zhǔn)優(yōu)秀實踐。話雖如此,我還是想向您介紹一種已存在一段時間的工具。其想法是在您的服務(wù)器上創(chuàng)建兩個碰撞序列,一個打開SSH端口,一個關(guān)閉該端口。在您發(fā)送打開碰撞序列之前,SSH訪問是被關(guān)閉的。發(fā)送打開序列后,您可以通過SSH連接到該機(jī)器。完成工作后,發(fā)送關(guān)閉序列,SSH將重新被鎖起來。
這并不完美,但結(jié)合SSH密鑰驗證,SSH在您的服務(wù)器上會安全得多。
下面介紹如何安裝和使用knockd以便在SSH上進(jìn)行端口碰撞。
您需要什么?
我將在Ubuntu Server 20.04 上進(jìn)行演示,因此您需要該操作系統(tǒng)的運行中實例和擁有sudo權(quán)限的用戶。您還需要在客戶機(jī)上擁有sudo權(quán)限的用戶。至于客戶端,我將在Pop!_OS上進(jìn)行演示。
如何安裝knockd?
我們要做的第一件事是在服務(wù)器和客戶端上安裝knockd。登錄到服務(wù)器,并執(zhí)行命令:
- sudo apt-get install knockd -y
前往客戶端,執(zhí)行同樣的命令。
安裝完后,您需要注意幾個配置。
如何配置knockd?
我們需要做的第一件事是配置knockd 服務(wù)。使用以下命令打開knockd配置文件:
- sudo nano /etc/knockd.conf
在該文件中,將打開序列從默認(rèn)的7000,8000,9000改成您想要使用的任何端口序列。您最多可以為此配置七個端口。要配置的行在[openSSH]下:
- sequence = 7000,8000,9000
將端口號改成您能記住的序列。
接下來,以相同的方式更改關(guān)閉序列(使用不同的端口號)。這一行在[closeSSH]下:
- sequence = 9000,8000,7000
接下來,您需要在[openSSH]命令行中將-A改成-I,以便它將是iptables鏈中的第一條規(guī)則。
保存并關(guān)閉文件。
接下來,我們需要找到用于SSH流量的網(wǎng)絡(luò)接口的名稱。執(zhí)行命令:
- ip a
找到您使用的IP地址,然后找到如下所示的序列:
- 2:ens5:
以本文為例,接口的名稱是ens5。
使用以下命令打開 Knockd 守護(hù)程序文件:
- sudo nano /etc/default/knockd
在該文件中,通過將下面行中的0改成1,使守護(hù)程序能夠在引導(dǎo)時運行:
- START_KNOCKD=
接下來,將下面這行中的eth0 改成您網(wǎng)絡(luò)接口的名稱(并刪除那個前導(dǎo)#字符):
- #KNOCKD_OPTS="-i eth0"
所以這一行看起來像這樣:
- KNOCKD_OPTS="-i ens5"
保存并關(guān)閉文件。
使用以下命令運行并啟用knockd:
- sudo systemctl start knockd
- sudo systemctl enable knockd
如何關(guān)閉端口22?
接下來,我們需要關(guān)閉端口22,這樣流量無法繞過knockd 系統(tǒng)。執(zhí)行命令:
- sudo ufw numbered
如果您有允許SSH流量的規(guī)則,它們將被編號并需要被刪除。比如說,您的SSH規(guī)則是1和2,用以下命令刪除它們:
- sudo ufw delete 2
- sudo ufw delete 1
如何使用knockd?
進(jìn)入到您的客戶機(jī)。我們先要做的是發(fā)送打開碰撞序列,以便允許SSH流量通過。如果您的碰撞序列是7001,8001,9001,您將執(zhí)行以下命令:
- knock -v SERVER 7001 8001 9001
其中Server是遠(yuǎn)程服務(wù)器的IP地址。
您應(yīng)該會看到如下輸出:
- hitting tcp 192.168.1.111:7001
- hitting tcp 192.168.1.111:8001
- hitting tcp 192.168.1.111:9001
碰撞序列后,您應(yīng)該隨后可以通過SSH連接到該服務(wù)器。完成遠(yuǎn)程工作后,您退出該服務(wù)器,然后發(fā)送關(guān)閉碰撞序列,就像這樣:
- knock –v SERVER 9001 8001 7001
關(guān)閉碰撞序列后,您應(yīng)該再也無法通過SSH訪問該遠(yuǎn)程服務(wù)器(除非您再次發(fā)送打開碰撞序列)。
這就是使用knockd以便在遠(yuǎn)程Linux服務(wù)器上更有效地為SSH訪問確保安全的方法。記得將knockd安裝在需要通過SSH訪問那些服務(wù)器的任何客戶機(jī)上。
原文標(biāo)題:How to secure SSH logins with port knocking,作者:Jack Wallen
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】