20個OpenSSH伺服器最佳安全實踐

來源:互聯網
上載者:User

OpenSSH是SSH協議的一種實現,它是遠程登入,通過scp或sftp實現備份和遠程檔案傳輸等的推薦安全性通訊協定,SSH保證兩個網路或兩個系統之間資料互動的機密性和完整性,它的主要優點是通過公開金鑰加密技術實現伺服器身分識別驗證。但時有OpenSSH零日漏洞爆出,因此OpenSSH伺服器本身也需要調整才能提高整體安全性。
預設設定檔和SSH連接埠

/etc/ssh/sshd_config:OpenSSH伺服器設定檔;

/etc/ssh/ssh_config:OpenSSH用戶端設定檔;

~/.ssh/:使用者SSH配置目錄;

~/.ssh/authorized_keys:使用者公開金鑰(RSA或DSA);

/etc/nologin:如果存在這個檔案,sshd會拒絕除root使用者外的其它使用者登入;

/etc/hosts.allow和/etc/hosts.deny:定義tcp-wrapper執行的存取控制清單;

SSH預設連接埠:22 

 

圖 1 SSH會話視窗

1、禁用OpenSSH伺服器

工作站和膝上型電腦可以不用OpenSSH伺服器,如果你不需要提供SSH遠程登入和檔案傳輸功能,可以禁用並刪除SSHD伺服器,CentOS / RHEL / Fedora Linux使用者可以使用下面的yum命令禁用和刪除openssh-server:

# chkconfig sshd off# yum erase openssh-server
 


Debian / Ubuntu Linux使用者可以使用下面的apt-get命令禁用和刪除openssh-server:

# apt-get remove openssh-server


你可能需要更新你的iptables指令碼,移除ssh例外規則,在CentOS / RHEL / Fedora下,開啟etc/sysconfig/iptables和/etc/sysconfig/ip6tables檔案,刪掉與ssh相關的例外規則,然後使用下面的命令重啟iptables:

# service iptables restart# service ip6tables restart
 


2、只使用SSH v2

SSH協議的第一個版本(SSH v1或SSH-1)存在中間人攻擊問題和安全性漏洞,它已經被作廢,應該不惜一切代價避免使用SSH v1。開啟sshd_config設定檔,如果沒有就增加下面這一行設定:

Protocol 2
 


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

3、限制使用者的SSH訪問

預設情況下,所有系統使用者都可以用他們的密碼或公開金鑰通過SSH實現遠程登入,但有時你建立的UNIX/Linux使用者是用於ftp或email目的,如果不加限制,這些使用者也可以使用ssh登入到系統,並且可以使用編譯器,指令碼語言,如Perl或Python,這些工具已經足夠利害,可以開啟任意網路連接埠,執行任意操作。我的一個用戶端上有過時的PHP指令碼,攻擊者可以通過PHP指令碼在系統上建立一個新帳號,但攻擊者不能通過該帳號ssh登入,因為它沒有在允許的使用者列表範圍內(AllowUsers)。

假設我們只要root,vivek和jerry使用者能通過SSH使用系統,向sshd_config設定檔中添加:

AllowUsers root vivek jerry

 


另外,你還可以允許所有使用者通過SSH登入,但拒絕一部分使用者,這時就需要向sshd_config設定檔中添加:

DenyUsers saroj anjali foo
 


你也可以配置Linux PAM允許或拒絕通過sshd伺服器登入,你也可以指定一列使用者組有權訪問或拒絕他們訪問ssh。

4、配置空閑逾時退出時間間隔

使用者可以通過ssh登入到伺服器,你可以設定一個空閑逾時時間間隔避免出現孤兒ssh會話,開啟sshd_config設定檔,確保有如下的配置項:

ClientAliveInterval 300ClientAliveCountMax 0
 


上面的例子設定的空閑逾時時間間隔是300秒,即5分鐘,過了這個時間後,空閑使用者將被自動踢出出去(可以理解為退出登入/登出)。

5、禁用.rhosts檔案

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

IgnoreRhosts yes


SSH可以類比過時的rsh命令的行為,rsh被公認為是不安全的遠端存取協議,因此必須得禁用掉

6、禁用基於主機的身分識別驗證

為了禁用基於主機的身分識別驗證,使用下面的選項更新sshd_config設定檔:

HostbasedAuthentication no


7、禁用root通過SSH登入

沒有必要使用root使用者通過SSH遠程登入,普通使用者可以通過su或sudo(推薦)獲得root層級的訪問權,這樣你可以得到完整的審計資訊,誰通過sudo在系統上執行特權命令就會一清二楚。為了禁止root使用者通過SSH登入,使用下面的選項更新sshd_config設定檔:

PermitRootLogin no


但也有人認為root使用者通過SSH登入沒什麼不妥,之所以人們一直有“不要用root使用者登入”的想法,都是不安全的Telnet協議惹的禍。

8、啟用警告橫幅

使用下面的設定更新sshd_config設定檔,設定一個警告橫幅:

Banner /etc/issue


在/etc/issue檔案中,可以和你的法律顧問商討一下,列出使用者使用ssh應該遵守的法律法規和注意事項。

8、防火牆SSH連接埠:22

你需要為ssh連接埠22更新iptables或pf防火牆配置,通常,OpenSSH伺服器應該只接受來自區域網路或受信任的遠程用戶端的串連。

Netfilter(iptables)配置

更新/etc/sysconfig/iptables(Red Hat及基於Red Hat的系統)檔案,只接受來自192.168.1.0/24和202.54.1.5/29的串連,配置如下:

-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT-A RH-Firewall-1-INPUT -s 202.54.1.5/29 -m state --state NEW -p tcp --dport 22 -j ACCEPT
 


如果你還準備讓sshd通過IP V6,那還需要更新/etc/sysconfig/ip6tables(Red Hat或基於Red Hat的系統)檔案,配置如下:

-A RH-Firewall-1-INPUT -s ipv6network::/ipv6mask -m tcp -p tcp --dport 22 -j ACCEPT

 


你在實際操作時,請用真實的IP V6位址範圍替換ipv6network::/ipv6mask。

◆BSD PF防火牆配置

如果你使用的是PF防火牆,請更新/etc/pf.conf檔案:

pass in on $ext_if inet proto tcp from {192.168.1.0/24, 202.54.1.5/29} to $ssh_server_ip port
ssh flags S/SA synproxy state

 


預設情況下,ssh會監聽系統上所有網卡和IP地址,限制ssh連接埠綁定,改變ssh連接埠(暴力密碼破解攻擊通常是針對連接埠22的),假設要綁定到192.168.1.5和202.54.1.5這兩個IP地址,連接埠改為300,那sshd_config檔案需要做如下修改:

Port 300

ListenAddress 192.168.1.5

ListenAddress 202.54.1.5
 


更好的辦法是使用主動式指令碼,如後面會談到的fail2ban或denyhosts。

10、使用強SSH密碼和密語

為你的密鑰使用強使用者密碼和密語有多重要我就不說了,暴力破解攻擊之所以能夠得逞,都是因為你使用了基於字典的密碼,你可以強制使用者避免使用字典中能直接找到的詞作密碼,另外可以藉助john the ripper tool工具找出現有系統中存在的弱密碼。下面是一個隨機密碼產生器(放到你的~/.bashrc檔案中):

genpasswd() {local l=$1 [ "$l" == "" ] && l=20 tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs}
 


運行它:

genpasswd 16
 


輸出:

uw8CnDVMwC6vOKgW
 


11、使用基於公開金鑰的身分識別驗證

使用公/私金鑰組和密碼對私密金鑰實施保護,如何使用基於RSA和DSA的身分識別驗證,請參考html">http://www.cyberciti.biz/tips/ssh-public-key-based-authentication-how-to.html和http://www.cyberciti.biz/faq/ssh-password-less-login-with-dsa-publickey-authentication/,永遠不要使用無密鑰密碼登入。

12、使用基於密鑰鏈的身分識別驗證

密鑰鏈是一個經過設計的特殊的bash指令碼,它讓基於密鑰的身分識別驗證變得難以置信的方便和靈活,與無密鑰密碼相比,它的優勢太多了。關於如何安裝和使用密鑰鏈軟體,請訪問http://www.cyberciti.biz/faq/ssh-passwordless-login-with-keychain-for-scripts/。

13、Chroot SSHD(將使用者鎖定在他們自己的home目錄)

預設情況下,使用者可以瀏覽伺服器目錄,如/etc,/bin等,你可以使用基於作業系統的chroot或使用特殊的工具,如rssh,來保護ssh,在OpenSSH 4.8p1和4.9p1中,你不再需要第三方hack工具,如rssh,或是複雜的chroot配置,來將使用者限制在他們自己的home目錄中,新版本中增加了一個ChrootDirectory命令,它可以直接將使用者限制在自己的home目錄中。更多資訊請訪問http://www.debian-administration.org/articles/590。

14、使用TCP Wrapper

TCP Wrapper是一個基於主機的網路ACL系統,用於過濾到互連網的網路訪問,OpenSSH支援TCP Wrapper,只需要更新你的/etc/hosts.allow檔案,下面的例子表示僅允許來自192.168.1.2 和172.16.23.12的ssh訪問:

192.168.1.2 172.16.23.12
 

關於如何在Linux / Mac OS X 和UNIX類作業系統上安裝和配置TCP Wrapper,請訪問http://www.cyberciti.biz/faq/tcp-wrappers-hosts-allow-deny-tutorial/。

15、禁用空密碼

你需要明確禁止密碼為空白的使用者遠程登入,使用下

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.