Security configuration of SSH login entry - enterprise security practice

Andrew.Hann發表於2015-10-15

catalog

0. 引言
1. 修改ssh埠
2. 禁用root遠端ssh登入
3. 只使用SSH v2
4. 限制使用者的SSH訪問
5. 禁用.rhosts檔案
6. 禁用基於主機的身份驗證
7. 基於公私鑰的證書登入 
8. Linux SSH配置基線檢查

 

0. 引言

關於企業IT系統建設安全性問題在任何時候都不會成為一個過時的話題,企業在構建適合自己業務需求的IT系統之初以及整個IT系統生命週期內,系統的安全執行都是一項非常重要的工作,安全健康體檢主要著眼於伺服器的入口安全,SSH服務是目前類unix系統上使用最為廣泛的遠端安全登入服務之一,預設埠為tcp 22埠。由於遠端管理的需要,很多防火牆都對外開放了22埠,這就使得SSH服務很容易成為黑客的攻擊目標。為避免系統的SSH服務被黑客攻擊,我們需要對SSH服務進行一些加固操作,以保證伺服器的安全

Relevant Link:

http://xjsunjie.blog.51cto.com/999372/691330
http://security.zdnet.com.cn/security_zone/2009/1214/1556391.shtml
http://blog.chinaunix.net/uid-25723371-id-4542221.html
http://www.cyberciti.biz/faq/ssh-passwordless-login-with-keychain-for-scripts/
http://heyihome.blog.51cto.com/2657805/480885

 

1. 修改ssh埠

SSH的預設埠是tcp 22,從最佳實踐的角度來說,將SSH入口埠修改為非預設值,有助於阻止黑客的惡意掃描攻擊

1. vim /etc/ssh/sshd_config
2. 修改為port 11220  
//ssh_config和sshd_config必須同時修改成11220,重啟ssh服務(service sshd restart)後方可生效

 

2. 禁用root遠端ssh登入

從最佳實踐的角度來說,入口點的身份授權應該遵循"最小化許可權原則",即使用者應該在準確識別自己的業務需要,建立並賦予帳號最小化僅僅夠用的許可權,使用這個帳號進行登入

1. vim /etc/ssh/sshd_config
2. 修改PermitRootLogin no
3. 重啟sshd服務: #servicesshd restart

沒有必要使用root使用者通過SSH遠端登入,普通使用者可以通過su或sudo(推薦)獲得root級別的訪問權,這樣你可以得到完整的審計資訊,誰通過sudo在系統上執行特權命令就會一清二楚

 

3. 只使用SSH v2

SSH協議的第一個版本(SSH v1或SSH-1)存在中間人攻擊問題和安全漏洞,它已經被作廢,應該避免使用SSH v1 

1. vim /etc/ssh/sshd_config
2. 增加Protocol 2

這樣啟動sshd後就只會使用SSH協議的第二個版本(SSH v2或SSH-2)了

 

4. 限制使用者的SSH訪問

預設情況下,所有系統使用者都可以用他們的密碼或公鑰通過SSH實現遠端登入,但有時你建立的UNIX/Linux使用者是用於ftp或email目的,如果不加限制,這些使用者也可以使用ssh登入到系統

1. vim /etc/ssh/sshd_config
2. 增加AllowUsers root vivek jerry
//只允許root、vivek、jerry進行ssh登入

 

5. 禁用.rhosts檔案

不要讀取使用者的~/.rhosts和~/.shosts檔案,使用下面的設定更新sshd_config配置檔案

1. vim /etc/ssh/sshd_config
2. IgnoreRhosts yes

SSH可以模擬過時的rsh命令的行為,rsh被公認為是不安全的遠端訪問協議,因此必須得禁用掉

Relevant Link:

https://www-uxsup.csx.cam.ac.uk/doc/remote_access/rhosts.html
http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.qb.server.doc/doc/t0007952.html?lang=zh
http://www.mcsr.olemiss.edu/unixhelp/tasks/3.6.1.2.html
http://www.cnblogs.com/itech/archive/2012/09/09/2678097.html

 

6. 禁用基於主機的身份驗證

禁用基於主機的身份驗證,使用下面的選項更新sshd_config配置檔案

1. vim /etc/ssh/sshd_config
2. HostbasedAuthentication no

 

7. 基於公私鑰的證書登入 

0x1: 證書登入的步驟

1. 客戶端生成證書:私鑰和公鑰,然後私鑰放在客戶端,妥當儲存,一般為了安全,會設定一個密碼,以後每次登入ssh伺服器時,客戶端都要輸入密碼解開私鑰 
ssh-keygen -t rsa
/*
rsa是一種密碼演算法,還有一種是dsa,證書登入常用的是rsa 
Generating public/private rsa key pair. 
Enter file in which to save the key (/root/.ssh/id_rsa): /home/user/.ssh/id_rsa
(生成私鑰與公鑰存放位置,使用哪個賬戶操作就放在哪個賬戶下面)
Enter passphrase (empty for no passphrase): 輸入密碼
Enter same passphrase again:再次輸入密碼
Your identification has been saved in /home/user/.ssh/id_rsa. (生成的私鑰)
Your public key has been saved in /home/user/.ssh/id_rsa.pub. (生成的公鑰)
The key fingerprint is:
76:04:4d:44:25:37:0f:b1:a5:b7:6e:63:d4:97:22:6b
*/

2. 伺服器新增信用公鑰: 把客戶端生成的公鑰,上傳到ssh伺服器,新增到指定的檔案中 
將生成的公鑰id_rsa.pub複製一份並重新命名為authorized_keys放在伺服器使用者主資料夾的.ssh目錄下
//假設客戶端想通過私鑰要登入其他ssh伺服器,同理,可以把公鑰上傳到其他ssh伺服器 

3. 重新啟動ssh服務:/etc/init.d/ssh restart

4. 簡化客戶端putty、xshell配置
啟動客戶端連線軟體,點選Advanced選項,選擇User Keys,點選Import Key,在彈出的“開啟”中找到剛剛複製到本地的id_rsa檔案並開啟。輸入在製作這個私鑰時設定的密碼,輸入完確定之後為該key命名,確定後設定此證書在本地發起連線時是否需要輸入密碼,如需要則設定,不需要就留空,最後點選Ok,本地證書就製作新增完成了

真實的工作中:員工生成好私鑰和公鑰(千萬要記得設定私鑰密碼),然後把公鑰發給運維人員,運維人員會登記你的公鑰,為你開通一臺或者多臺伺服器的許可權,然後員工就可以通過一個私鑰,登入他有許可權的伺服器做系統維護等工作,所以,員工是有責任保護他的私鑰的
0x2: SSH配置加固

1. vim /etc/ssh/sshd_config
2. PermitEmptyPasswords no #不允許空密碼使用者login(僅僅是明文密碼方式,非證書方式)
3. RSAAuthentication yes #啟用RSA認證 
4. PubkeyAuthentication yes #啟用公鑰認證 
5. PasswordAuthentication no #禁止密碼認證 
//補充: 修改vi /etc/ssh/ssh_config 檔案(全域性配置檔案)
1. RSAAuthentication yes # 允許RSA私鑰方式認證 
2. PasswordAuthentication no #禁止明文密碼登陸 

Relevant Link:

http://www.edu.cn/jm_9957/20120508/t20120508_774165.shtml
http://www.jb51.net/LINUXjishu/72805.html
http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646346.html

 

8. Linux SSH配置基線檢查

所有基線檢查項都來自/etc/ssh/sshd_config

1. port 
    1) expectedvalue: 非22 
    2) vul: 預設(#)、或顯式配置為22
    3) discription: 建議將ssh預設埠改為9999之後的非預設埠,防止黑客的惡意掃描

2. PermitRootLogin 
    1) expectedvalue: no 
    2) vul: 預設(#)、或顯式配置為yes
    3) discription: 沒有必要使用root使用者通過SSH遠端登入,普通使用者可以通過su或sudo(推薦)獲得root級別的訪問權

3. Protocol 
    1) expectedvalue: 2 
    2) vul: 顯式配置為1
    3) discription: SSH協議的第一個版本(SSH v1或SSH-1)存在中間人攻擊問題和安全漏洞,它已經被作廢,應該避免使用SSH v1 

4. IgnoreRhosts 
    1) expectedvalue: yes 
    2) vul: 顯式配置為no
    2) discription: SSH可以模擬過時的rsh命令的行為,rsh被公認為是不安全的遠端訪問協議,因此必須得禁用掉

5. HostbasedAuthentication 
    1) expectedvalue: no 
    2) vul: 顯式配置為yes
    3) discription: 建議禁用基於主機的身份驗證

 

Copyright (c) 2015 LittleHann All rights reserved

 

相關文章