linux下高級(jí)SSH安全技巧

SSH服務(wù)器配置文件是/etc/ssh/sshd_conf。在你對(duì)它進(jìn)行每一次改動(dòng)后都需要重新啟動(dòng)SSH服務(wù),以便讓改動(dòng)生效。
1、修改SSH監(jiān)聽(tīng)端口
默認(rèn)情況下,SSH監(jiān)聽(tīng)連接端口22,攻擊者使用端口掃描軟件就可以看到主機(jī)是否運(yùn)行有SSH服務(wù),將SSH端口修改為大于1024的端口是一個(gè)明智的選擇,因?yàn)榇蠖鄶?shù)端口掃描軟件(包括nmap)默認(rèn)情況都不掃描高位端口。
打開(kāi)/etc/ssh/sshd_config文件并查找下面這樣的行:
Port 22
修改端口號(hào)并重新啟動(dòng)SSH服務(wù):
/etc/init.d/ssh restart
2、僅允許SSH協(xié)議版本2
有兩個(gè)SSH協(xié)議版本,僅使用SSH協(xié)議版本2會(huì)更安全,SSH協(xié)議版本1有安全問(wèn)題,包括中間人攻擊(man-in-the-middle)和注入(insertion)攻擊。編輯/etc/ssh/sshd_config文件并查找下面這樣的行:
Protocol 2,1
修改為
Protocol 2
3、僅允許特定的用戶通過(guò)SSH登陸
你不一個(gè)允許root用戶通過(guò)SSH登陸,因?yàn)檫@是一個(gè)巨大的不必要的安全風(fēng)險(xiǎn),如果一個(gè)攻擊者獲得root權(quán)限登陸到你的系統(tǒng),相對(duì)他獲得一個(gè)普通用戶權(quán)限能造成更大的破壞,配置SSH服務(wù)器不允許root用戶通過(guò)SSH登陸,查找下面這樣的行:
PermitRootLogin yes
將yes修改為no,然后重新啟動(dòng)服務(wù)?,F(xiàn)在,如果你想使用特權(quán)用戶,你可以先以其他用戶登陸,然后再轉(zhuǎn)換到root。
創(chuàng)建一個(gè)沒(méi)有實(shí)際權(quán)限的虛擬用戶是一個(gè)明智的選擇,用這個(gè)用戶登陸SSH,即使這個(gè)用戶遭到破解也不會(huì)引起什么破壞,當(dāng)創(chuàng)建這個(gè)用戶時(shí),確保它屬于wheel組,因?yàn)槟菢幽悴拍芮袚Q到特權(quán)用戶。
如果你想讓一列用戶都能通過(guò)SSH登陸,你可以在sshd_config文件中指定它們,例如:我想讓用戶anze、dasa、kimy能通過(guò)SSH登陸,在sshd_config文件的末尾我添加下面這樣一行:
AllowUsers anze dasa kimy
4、創(chuàng)建一個(gè)自定義SSH banner
如果你想讓任何連接到你SSH服務(wù)的用戶看到一條特殊的消息,你可以創(chuàng)建一個(gè)自定義SSH banner,只需要?jiǎng)?chuàng)建一個(gè)文本文件(我的是/etc/ssh-banner.txt),然后輸入你想的任何文本消息,如:
*This is a private SSH service. You are not supposed to be here.*
*Please leave immediately. *
編輯好后,保存這個(gè)文件,在sshd_config中查找下面這樣一行:
#Banner /etc/issue.net
取消掉注釋【將#去掉】,然后將路徑修改為你自定義的SSH banner文本文件。
5、使用DSA公鑰認(rèn)證
代替使用用戶名和密碼對(duì)SSH進(jìn)行認(rèn)證,你可以使用DSA公鑰進(jìn)行認(rèn)證,注意你既可以使用登陸名,也可以使用DSA公鑰進(jìn)行認(rèn)證,使用DSA公鑰認(rèn)證可以預(yù)防你的系統(tǒng)遭受字典攻擊,因?yàn)槟悴恍枰玫顷懨兔艽a登陸SSH服務(wù),而是需要一對(duì)DSA密鑰,一個(gè)公鑰和一個(gè)私鑰,在你本地機(jī)器上保存私鑰,將公鑰放在服務(wù)器上。當(dāng)你發(fā)起一個(gè)SSH登陸會(huì)話時(shí),服務(wù)器檢查密鑰,如果它們匹配的話,你就可以直接進(jìn)入shell,如果它們不匹配,你的連接將被自動(dòng)斷開(kāi)。
在本例中的私人計(jì)算機(jī)叫‘工作站1’,服務(wù)器叫‘服務(wù)器1’。在兩個(gè)機(jī)器上我有相同的home目錄,如果服務(wù)器和客戶端上的home目錄不同將不能工作,實(shí)現(xiàn),你需要在你的私人計(jì)算機(jī)上創(chuàng)建一對(duì)密鑰,命令:~$ ssh-keygen -t dsa,它將要求你為私鑰輸入一個(gè)密語(yǔ),但是你可以保留為空,因?yàn)檫@不是一個(gè)推薦的做法。密鑰對(duì)創(chuàng)建好了:你的私鑰在~/.ssh/id_dsa,你的公鑰在.ssh/id_dsa.pub。
接下來(lái),拷貝~/.ssh/id_dsa.pub中的內(nèi)容到‘服務(wù)器1’的~/.ssh/authorized_keys文件中,~/.ssh/id_dsa.pub的內(nèi)容看起來(lái)象下面這樣:
~$ cat .ssh/id_dsa.pub ssh-dss AAAAB3NzaC1kc3MAAACBAM7K7vkK5C90RsvOhiHDUROvYbNgr7YEqtrdfFCUVwMWc JYDusNGAIC0oZkBWLnmDu+y6ZOjNPOTtPnpEX0kRoH79maX8NZbBD4aUV91lbG7z604ZTdr LZVSFhCI/Fm4yROHGe0FO7FV4lGCUIlqa55+QP9Vvco7qyBdIpDuNV0LAAAAFQC/9ILjqII7n M7aKxIBPDrQwKNyPQAAAIEAq+OJC8+OYIOeXcW8qcB6LDIBXJV0UT0rrUtFVo1BN39cAWz5pu Fe7eplmr6t7Ljl7JdkfEA5De0k3WDs 9/rD1tJ6UfqSRc2qPzbn0p0j89LPIjdMMSISQqaKO4m2fO2VJcgCWvsghIoD0AMRC7ngIe6bta NIhBbqri10RGL5gh4AAACAJj1/rV7iktOYuVyqV3BAz3JHoaf+H/dUDtX+wuTuJpl+tfDf61rb WOqrARuHFRF0Tu/Rx4oOZzadLQovafqrDnU/No0Zge+WVXdd4ol1YmUlRkqp8vc20ws5mLVP 34fST1amc0YNeBp28EQi0xPEFUD0IXzZtXtHVLziA1/NuzY= anze@station1.example.com
如果文件~/.ssh/authorized_keys已經(jīng)存在,請(qǐng)將上面的內(nèi)容附加在該文件的后面。剩下的只是給該文件設(shè)置正確的權(quán)限了:
~$ chmod 600 ~/.ssh/authorized_keys
現(xiàn)在,配置sshd_config文件使用DSA密鑰認(rèn)證,確保你將下面三行前的注釋去掉了:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
重新啟動(dòng)服務(wù),如果你的配置沒(méi)有錯(cuò)誤,現(xiàn)在你就可以SSH到你的服務(wù)器,而且無(wú)需任何交互動(dòng)作(如輸入用戶名和密碼)就直接進(jìn)入你的home目錄了。
如果你只想使用DSA認(rèn)證登陸,確保你在sshd_config中取消掉注釋并修改PasswordAuthentication這一行,將yes改為no:
PasswordAuthentication no
任何在服務(wù)器上沒(méi)有公鑰的人試圖連接到你的SSH服務(wù),它就被拒絕,給它顯示如下一個(gè)拒絕提示信息:
Permission denied (publickey).
6、使用TCP wrappers僅允許指定的主機(jī)連接
如果你想在你的網(wǎng)絡(luò)上只允許特定的主機(jī)才能連接到你的SSH服務(wù),但又不想使用或弄亂你的iptables配置,那這個(gè)方法非常有用,你可以使用TCP wrappers。在這個(gè)例子中對(duì)sshd進(jìn)行TCP包裹,我將創(chuàng)建一條規(guī)則允許本地子網(wǎng)192.168.1.0/24和遠(yuǎn)程193.180.177.13的自己連接到我的SSH服務(wù)。
默認(rèn)情況下,TCP wrappers首先在/etc/hosts.deny中查找看主機(jī)是否允許訪問(wèn)該服務(wù),接下來(lái),TCP wrappers查找/etc/hosts.allow看是否有規(guī)則允許該主機(jī)服務(wù)指定的服務(wù),我將在/etc/hosts.deny中創(chuàng)建一個(gè)規(guī)則,如下:
sshd: ALL
這意味著默認(rèn)情況下所有主機(jī)被拒絕訪問(wèn)SSH服務(wù),這是應(yīng)該的,否則所有主機(jī)都能訪問(wèn)SSH服務(wù),因?yàn)門(mén)CP wrappers首先在hosts.deny中查找,如果這里沒(méi)有關(guān)于阻止SSH服務(wù)的規(guī)則,任何主機(jī)都可以連接。
接下來(lái),在/etc/hosts.allow中創(chuàng)建一個(gè)規(guī)則允許指定的主機(jī)使用SSH服務(wù):
sshd: 192.168.1 193.180.177.13
現(xiàn)在,只有來(lái)自192.168.1.0/24和193.180.177.13的主機(jī)能夠訪問(wèn)SSH服務(wù)了,其他主機(jī)在連接時(shí)還沒(méi)有到登陸提示符時(shí)就被斷開(kāi)了,并收到錯(cuò)誤提示,如下:
ssh_exchange_identification: Connection closed by remote host
7、使用iptables允許特定的主機(jī)連接
作為T(mén)CP wrappers的一個(gè)代替品,你可以使用iptables來(lái)限制SSH訪問(wèn)(但可以同時(shí)使用這個(gè)兩個(gè)的),這里有一個(gè)簡(jiǎn)單的例子,指出了如何允許一個(gè)特定的主機(jī)連接到你的SSH服務(wù):
~# iptables -A INPUT -p tcp -m state --state NEW --source 193.180.177.13 --dport 22 -j ACCEPT
并確保沒(méi)有其他的主機(jī)可以訪問(wèn)SSH服務(wù):
~# iptables -A INPUT -p tcp --dport 22 -j DROP
保存你的新規(guī)則,你的任務(wù)就完成了,規(guī)則是立即生效的
8、SSH時(shí)間鎖定技巧
你可以使用不同的iptables參數(shù)來(lái)限制到SSH服務(wù)的連接,讓其在一個(gè)特定的時(shí)間范圍內(nèi)可以連接,其他時(shí)間不能連接。你可以在下面的任何例子中使用/second、/minute、/hour或/day開(kāi)關(guān)。
第一個(gè)例子,如果一個(gè)用戶輸入了錯(cuò)誤的密碼,鎖定一分鐘內(nèi)不允許在訪問(wèn)SSH服務(wù),這樣每個(gè)用戶在一分鐘內(nèi)只能嘗試一次登陸:
~# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
~# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP
第二個(gè)例子,設(shè)置iptables只允許主機(jī)193.180.177.13連接到SSH服務(wù),在嘗試三次失敗登陸后,iptables允許該主機(jī)每分鐘嘗試一次登陸:
~# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
~# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP
9、結(jié)論
這些技巧都不是很難掌握,但是它們對(duì)于保護(hù)你的SSH服務(wù)卻是很強(qiáng)勁的手段,花一點(diǎn)代價(jià)換來(lái)的是睡一個(gè)好覺(jué)。
相關(guān)文章
Fedora Linux 42 穩(wěn)定版發(fā)布: 帶來(lái)大量新功能和軟件更新
Fedora 42昨日發(fā)布,這是 Red Hat 贊助開(kāi)發(fā)的杰出前沿 Linux 發(fā)行版的最新版,包含大量新功能和軟件更新,使其成為 2025 年上半年發(fā)布的一款出色的 Linux 操作系統(tǒng)之一,內(nèi)2025-04-16如何在Linux查看硬盤(pán)信息? 查看Linux硬盤(pán)大小類型和硬件信息的5種方法
使用Linux系統(tǒng)的過(guò)程中,查看和了解硬盤(pán)信息是非常重要的工作,尤其是對(duì)于系統(tǒng)管理員而言,那么在Linux系統(tǒng)中如何查看硬盤(pán)信息?以下是具體內(nèi)容介紹2025-03-12如何在 Linux 中查看 CPU 詳細(xì)信息? 3招輕松查看CPU型號(hào)、核心數(shù)和溫度
在日常運(yùn)維工作中,獲取 CPU 信息是系統(tǒng)運(yùn)維管理員常見(jiàn)的工作內(nèi)容,無(wú)論是為了性能調(diào)優(yōu)、硬件升級(jí)還是僅僅滿足好奇心2025-03-11什么是 Arch Linux? 獨(dú)樹(shù)一幟的Arch Linux發(fā)行版分析
Arch Linux是為簡(jiǎn)化,優(yōu)化,現(xiàn)代化,實(shí)用主義,用戶中心和多功能性而創(chuàng)建Linux發(fā)行版,究竟是什么讓 Arch 與眾不同?下面我們就來(lái)簡(jiǎn)要解讀2025-02-19如何在Linux環(huán)境下制作 Win11裝機(jī)U盤(pán)?
一直用的linux辦公,想要將筆記本電腦從 Linux 系統(tǒng)切換回 Windows 11,我們可以制作一個(gè)win11裝機(jī)u盤(pán),詳細(xì)如下2025-02-17Rsnapshot怎么用? 基于Rsync的強(qiáng)大Linux備份工具使用指南
Rsnapshot 不僅可以備份本地文件,還能通過(guò) SSH 備份遠(yuǎn)程文件,接下來(lái)詳細(xì)介紹如何安裝、配置和使用 Rsnapshot,包括創(chuàng)建每小時(shí)、每天、每周和每月的本地備份,以及如何進(jìn)2025-02-06Linux Kernel 6.13發(fā)布:附更新內(nèi)容及新特性解讀
Linux 內(nèi)核 6.13 正式發(fā)布,新版本引入了惰性搶占支持,簡(jiǎn)化內(nèi)核搶占邏輯,通過(guò)減少與調(diào)度器相關(guān)的調(diào)用次數(shù),讓內(nèi)核在運(yùn)行時(shí)表現(xiàn)更優(yōu),從而提高效率2025-01-23五大特性引領(lǐng)創(chuàng)新! 深度操作系統(tǒng) deepin 25 Preview預(yù)覽版發(fā)布
今日,深度操作系統(tǒng)正式推出deepin 25 Preview版本,該版本集成了五大核心特性:磐石系統(tǒng)、全新DDE、Treeland窗口合成器、AI For OS以及Distrobox子系統(tǒng)2025-01-18Linux Mint Xia 22.1重磅發(fā)布: 重要更新一覽
Beta 版 Linux Mint“Xia” 22.1 發(fā)布,新版本基于 Ubuntu 24.04,內(nèi)核版本為 Linux 6.8,這次更新帶來(lái)了諸多優(yōu)化和改進(jìn),進(jìn)一步鞏固了 Mint 在 Linux 桌面操作系統(tǒng)領(lǐng)域的2025-01-16LinuxMint怎么安裝? Linux Mint22下載安裝圖文教程
Linux Mint22發(fā)布以后,有很多新功能,很多朋友想要下載并安裝,該怎么操作呢?下面我們就來(lái)看看詳細(xì)安裝指南2025-01-16