引言:對(duì)于Linux來(lái)說(shuō),使用SSH連接可以實(shí)現(xiàn)遠(yuǎn)程訪問(wèn)。不過(guò),這也成了黑客重點(diǎn)攻擊的目標(biāo)。如果黑客破譯了連接密碼,就可以輕松地對(duì)SSH服務(wù)器進(jìn)行滲透和破壞。因此,如何保護(hù)SSH服務(wù)的安全,是管理員必須重視的問(wèn)題。
對(duì)于Linux來(lái)說(shuō),使用SSH連接可以實(shí)現(xiàn)遠(yuǎn)程訪問(wèn)。不過(guò),這也成了黑客重點(diǎn)攻擊的目標(biāo)。如果黑客破譯了連接密碼,就可以輕松的對(duì)SSH服務(wù)器進(jìn)行滲透和破壞。因此,如何保護(hù)SSH服務(wù)的安全,是管理員必須重視的問(wèn)題。當(dāng)然,要想提高SSH的安全性,僅僅依靠單一的防護(hù)手段是遠(yuǎn)遠(yuǎn)不夠的。這就需要采取多種方法,從不同角度強(qiáng)化SSH的安全。
當(dāng)通過(guò)SSH連接到Linux服務(wù)器后,默認(rèn)會(huì)保存在“/var/log/secure”日志中。不過(guò),很多經(jīng)過(guò)認(rèn)證登錄的程序(例如vsFTPd等)都在在其中存儲(chǔ)日志信息,這給針對(duì)SSH日志的分析工作帶來(lái)了不便。
其實(shí),利用TCP_Wraper機(jī)制,可以將SSH日志信息(例如登錄實(shí)現(xiàn),IP等)單獨(dú)記錄到指定的文件中,可以讓管理員準(zhǔn)確分析SSH日志信息。
首先,需要確定當(dāng)前系統(tǒng)的SSH是否支持TCP_Wraper,執(zhí)行“which sshd”命令,來(lái)定位“shd”的路徑,例如“/usr/sbin/sshd”。執(zhí)行“l(fā)dd /usr/sbin/sshd”命令,來(lái)查看其調(diào)用了庫(kù)文件信息。執(zhí)行“l(fā)dd /usr/sbin/sshd |grep warp”命令,如果出現(xiàn)“l(fā)ibwrap.so”開(kāi)頭之類文件信息時(shí),則說(shuō)明SSH支持TCP_Wraper功能。
執(zhí) 行“vi /etc/hosts.allow”命令,在該文件中添加“sshd:192.168.2.0/25 5.255.255.0:spawn echo"`data` %a access this server %d on %A">>/var/ssh.log”行,表示運(yùn)行指定的IP范圍訪問(wèn)SSH服務(wù),本例為“192.168.2.0/255.255.255.0”。執(zhí) 行“vi /etc/hosts.deny”命 令,在該文件中添加“all:all:spawn echo "`data` %a access this server %d on%A">>/var/ssh.log”行,表示禁止非上述IP范圍外的主機(jī)進(jìn)行訪問(wèn)。不管是否允許訪問(wèn),都將訪問(wèn)時(shí)的時(shí)間,訪問(wèn)者的IP,訪問(wèn)的本機(jī)進(jìn)程信息以及所訪問(wèn)的本機(jī)的IP記錄到指定的文件中。這樣,管理員可以隨時(shí)執(zhí)行“cat /var/ssh.log”命令,來(lái)查看所記錄的信息。
也可以直接在“/etc/hosts.deny”文件中添加“sshd:ALL EXCEPT 192.168.2. spawn echo"`data` %a access this server %d on %A">>/var/ssh.log”行,而必須編輯“hosts.allow”文件,也可以實(shí)現(xiàn)同樣的效果。
當(dāng)然,TCP_Wraper機(jī)制不能記錄訪問(wèn)者的賬戶名信息,所需需要執(zhí)行“vi /var/log/secure”命令,在安全日志中查找相關(guān)用戶名信息。實(shí)際上,在SSH的配置文件中可以禁止指定的賬戶訪問(wèn),執(zhí)行“vi /etc/ssh/sshd_config”命令,在其中添加“DenyUser xxx”行,其中的“xxx”表示具體的賬戶名。執(zhí)行“service sshd restart”命令重啟SSH服務(wù),這樣該賬戶就會(huì)被拒之門外了。注意,如果在該配置文件中只添加“AllowUsers xxx”行,那么則只允許該賬戶登錄SSH,其余的賬戶(包括Root)都將被拒之門外。而如果兩者都存在,則“DenyUser xxx”是優(yōu)先于“AllowUsers xxx”的。
使用PAM安全認(rèn)證機(jī)制,可以最大限度的保護(hù)SSH的安全。對(duì)于PAM來(lái)說(shuō),實(shí)際上分為多個(gè)層面,第一個(gè)部分為應(yīng)用程序?qū)用?,第二部分是名為“Libpam.so”模塊層面,第三部分為每個(gè)程序?qū)?yīng)的PAM配置文件,最后一個(gè)層面是根據(jù)上述配置文件,來(lái)調(diào)用與之對(duì)應(yīng)的安全模塊。執(zhí)行“l(fā)dd /usr/sbin/sshd |grep pam”命令,可以看到與SSH服務(wù)相關(guān)的PAM模塊文件。進(jìn)入“/etc/pam.d”目 錄,執(zhí)行“vim sshd”命令,在其中 的“account required pam_nologin.so”行下添加“account required pam_access.so accessfile=/etc/sshaccessuser”行,其作用是使用“pam_access.so”模塊對(duì)SSH的登錄進(jìn)行控制。
為了不影響其他程序,這里指定了專門的賬戶管理文件“/etc/sshaccessuser”。執(zhí)行“vi /etc/sshaccessuser”命令,在其中添加允許登錄的賬戶信息,例如添加“+:user1:ALL”以及“+:user2:ALL”等行,允許“user1”、“User2”賬戶正常登錄SSH服務(wù),其中的“ALL”表示可以從任何地方登錄。添加完允許登錄的賬戶后,在最后一行輸入“-:ALL:ALL”行,其作用是禁止其他的賬戶從任何地方訪問(wèn)SSH服務(wù)。
這樣,當(dāng)非法的賬戶試圖登錄本機(jī)的SSWH服務(wù)時(shí),系統(tǒng)會(huì)提示“Commection closed”信息,禁止其進(jìn)行登錄。
當(dāng)然,也可以使用“pam_listfile.so”模 塊,來(lái) 實(shí)現(xiàn)相同的功能。例如將上述語(yǔ)句替換為“auth reqiired pam_listfile.so iten=user sense=denyfile=/etc/sshlistonerr=succeed”一行,之后執(zhí) 行“vi /etc/sshlist”命令,在該列表文件中輸入對(duì)應(yīng)的賬戶名。這樣,只要是該列表文件中的賬戶名,都禁止登錄SSH服務(wù)。對(duì)應(yīng)的,如果將上述語(yǔ)句中的“sense=deny” 修改為“sense=allow”的話,則情況剛好相反,只有該列表文件中的所有賬戶才可以訪問(wèn)SSH服務(wù)。
對(duì)于開(kāi)啟了SSH服務(wù)的主機(jī)來(lái)說(shuō),一旦其密碼被黑客破解,系統(tǒng)就沒(méi)有安全性可言了。為了防止黑客暴力破解SSH密碼,可以采取多種措施加以應(yīng)對(duì)。例如修改SSH登錄賬戶名稱,將其設(shè)置為很不常用的名稱,同時(shí)禁用Root賬戶。將SSH登錄帳號(hào)的密碼設(shè)置了足夠復(fù)雜,避免其被輕易猜測(cè)出來(lái)。對(duì)SSH服務(wù)的端口號(hào)進(jìn)行修改,不再使用TCP 22,同時(shí)只使用SSH2而不使用SSH1。對(duì)SSH服務(wù)進(jìn)行合理的配置,當(dāng)用戶在規(guī)定的時(shí)間內(nèi)沒(méi)有正確連接的話,則自動(dòng)斷開(kāi)其連接。嚴(yán)格限制允許同時(shí)連接的SSH登錄數(shù)量,以防止黑客快速破解密碼。為SSH服務(wù)配置密鑰認(rèn)證功能,讓無(wú)關(guān)用戶無(wú)法連接等。
例如執(zhí)行“useradd xxx”命令,創(chuàng)建一個(gè)不太常見(jiàn)的賬戶名, “xxx”為具體的賬戶名。執(zhí)行“password!$”命令,為其設(shè)置一個(gè)復(fù)雜的密碼。接著執(zhí)行“vi /etc/passwd”命令,在密碼文件中將該“xxx”賬戶的UID設(shè)置為0,同時(shí)可以根據(jù)需要修改其主目錄。執(zhí)行“passwd -l root”命令,將root賬戶鎖定。執(zhí)行“vi /etc/ssh/sshd_config”命令,在SSH配置文件中添加“Port 22219”行,將其連接端口設(shè)置為22219,當(dāng)然可以自由定義該端口。這樣,在客戶機(jī)上執(zhí)行諸如“ssh xxx@192.168.1.100 -p 22219”之類的命令,才可以進(jìn)行連接,假設(shè)SSH主機(jī)IP為192.168.1.100。
添 加“LoginGraceTime 120”行,其作用是在120秒時(shí)間內(nèi)客戶端沒(méi)有正確登錄,則斷開(kāi)連接,您可以根據(jù)需要進(jìn)行設(shè)定,默認(rèn)為0表示無(wú)限制。添加“MaxStartups 3”行,其作用是設(shè)置同時(shí)發(fā)生的未驗(yàn)證的并發(fā)量,即允許同時(shí)有幾個(gè)登錄連接,其默認(rèn)值為10。添加“MaxAuthTries 3”行,其作用是最多允許嘗試3此密碼,超過(guò)該次數(shù)則斷開(kāi)連接。添加“MaxSessions 3”行,表示最多允許3個(gè)連接會(huì)話。
執(zhí) 行“ssh-keygen -t rsa”命令,根據(jù)提示信息保持默認(rèn)密鑰存儲(chǔ)路徑,確認(rèn)后生成一對(duì)密鑰文件。進(jìn)入當(dāng)前用戶的主目錄,在其中的“.ssh”目錄中看到名為“id_rsa”的私鑰文件和名為“id_rsa.pub”的公鑰文件。執(zhí)行“scp id_rsa.pub xxx.xxx.xxx.xxx:~/.ssh/authorized_keys”之類的命令,將公鑰文件復(fù)制到別的主機(jī)的相應(yīng)目錄中,并將其更名為“authorized_keys”。這樣,當(dāng)本機(jī)使用ssh命令連接上述主機(jī)時(shí),可以直接連接而無(wú)需密碼了。但是如果想希望指定的賬戶從別的主機(jī)上使用密鑰認(rèn)證直接連接本機(jī),則需要根據(jù)需要將上述“id_rsa.pub”文件復(fù)制到本機(jī)對(duì)應(yīng)賬戶的主目錄下。
例如在本機(jī)上存在名為“sshuser1”的賬戶,將上述“id_rsa.pub”文件復(fù)制到該賬戶的主目錄下,并將其更名 為“authorized_keys”。之后將上述“id_rsa”的私鑰文件復(fù)制到U盤上,之后將其復(fù)制到目標(biāo)主機(jī)當(dāng)前賬戶主目錄。在該主機(jī)上SSH遠(yuǎn)程訪問(wèn)本主機(jī),而無(wú)需輸入密碼就可以進(jìn)行登錄。其他用戶因?yàn)闆](méi)有該私鑰文件,自然就無(wú)法順利本機(jī)的訪問(wèn)SSH服務(wù)。
當(dāng)然,前提是需要對(duì)“sshd_config” 文件進(jìn)行編輯,將其中的“PaswordAuthentication”的值設(shè)置為“no”,以禁止使用密碼認(rèn)證。當(dāng)然,使用SecureCRT等連接工具,可以選擇密鑰認(rèn)證的功能,選擇該私鑰文件,也可以實(shí)現(xiàn)和SSH服務(wù)器的直接連接操作。