觀點

Linux平台安全指導方針

2005 / 02 / 03
文/魏川弼、陳嘉玫、陳年興、鄭進興
Linux平台安全指導方針

對於剛開始接觸Linux 的一般使用者來說,除了學習各式Linux套件的安裝與設定,瞭解Linux系統的基本安全防護觀念與資訊,更是重要的課題。本文希望能提供Linux系統管理員一些安全指導方針,以確保基本的系統安全,避免成為入侵事件的受害者或無辜幫兇。
系統安裝
不論您選擇哪家廠商所提供的Linux套件,請盡量使用該廠商所提供的最新版套件,如此可確保您所安裝的各個程式套件是較新的版本,不會存在舊版程式的安全漏洞。而且廠商可能不再提供舊版套件的技術支援,例如 Red Hat 目前僅支援 Red Hat Enterprise Linux 的漏洞修補與更新,若您安裝的是 Red Hat Linux 9 或更早的版本,則需要自己在網路上尋找有安全漏洞的軟體之修補程式,並遵照其說明來做修補更新,不但較為麻煩、耗時,也增加了將系統保持在最安全狀態的困難度。
另外,要先決定系統的用途,是日常一般使用或做為伺服器,例如您的系統若要當做檔案伺服器,那麼就沒必要安裝 sendmail 套件。系統執行的服務愈多,遭到入侵的機會就愈大。因此,安裝系統時盡量只選擇自己需要的套件。安裝過程中關於安全性設定的選擇,最好設為「高」,如此系統安裝完後,就會有一些基本的安全防護,例如會啟動防火牆過濾進出的封包,對於進出的流量做適當規範。

關閉不需要的服務
系統安裝時,通常預設會安裝一些較常需要用到的伺服器,而且會設定為開機自動執行。所以安裝完重新開機後,請馬上檢查正在執行的服務。輸入指令 netstat -tap | grep LISTEN 就會列出目前正在執行的中的 TCP 服務,包含開啟的通訊埠、執行程式名稱和程式的PID。我們可以透過廠商所附的服務管理程式關閉不需要的服務,例如 Red Hat Linux 可透過 service service-name stop,來關閉程式。若無方便的管理程式,也可以手動透過 /etc/init.d/service-name stop,來關閉服務。
若伺服器程式在 /etc/init.d 中沒有安裝相關的 script,則可透過之前經由 netstat 取得的 PID,利用 kill 指令,例如 kill -9 PID,來中斷程式。接著則要移除開機立即執行該服務的設定,避免重開機後不需要的服務又自動執行。通常廠商會附上相關的設定工具,例如 Red Hat Linux 可以用 chkconfig service-name off,Debian Linux則可用 chkconfig service-name off 來移除開機執行的設定。如果確定不需要該服務,也可將其套件執行反安裝,移除相關元件,需要時再安裝新版的套件。
另外,有些服務是透過 Xinetd 來啟動,所以關閉服務的方式有點不同。相關程式設定存放於 /etc/xinetd.d 目錄中,可透過 grep disable /etc/xinetd.d/* | grep no 指令,找出有哪些服務是一開機即透過 Xinetd 啟動,針對不需要的服務,將其設定檔中,disable = no 的設定改成 disable = yes,如此開機時即不會再執行該服務。也可透過重新啟動 Xinetd /etc/init.d/xinetd restart 使修改過的設定生效,如此 Xinetd 會重新讀取設定檔,不再啟動已被關閉的服務。

維護與更新
系統安全漏洞不斷被發現,入侵程式碼開發速度與攻擊技術亦大幅提升,因此,漏洞的「即時」更新就變得非常重要。系統安裝完成後,除了關閉不必要的服務,請立即瀏覽廠商的漏洞更新網頁,檢視自己所安裝的版本從釋出到今,有多少更新、修補檔釋出,然後根據說明,立即進行系統更新與修補檔下載安裝。完成後,則應該訂閱廠商所提供的安全通報,定期造訪廠商安全資訊公告網頁,隨時注意廠商對於各種軟體漏洞、安全弱點的發佈,然後根據安全通報的內容,進行軟體更新與修補檔安裝。
此外,您應該定期造訪一些關於Linux安全的專業網站,例如 http://linuxsecurity.com,網站會提供網路與系統安全相關的新聞,漏洞與修補檔的公告更新,訂閱網站的newsletter,也是獲取資訊方便快速的好方法。請您務必記得,唯有對系統、軟體即時進行漏洞更新,才能將被入侵的風險降到最低。

防火牆
要限制外界對系統的存取,我們最常利用的工具就是系統內附的防火牆。而防火牆的設定原則是,限制所有的存取,再根據我們的考量,逐一開放。所以,我們必須決定我們要開放哪些服務?將服務開放給誰?從哪裡可以存取這些服務?限制程度為何?如上所述,這些問題在系統安裝時,通常都會有相關的詢問與選項,建議是以中、高程度的限制為宜。
為了確保外界對於本地端網路的存取,符合我們所預期,可透過著名的掃描軟體 nmap(http://www.insecure.org/nmap/index.html),利用另一台遠端電腦,替自己進行掃描測試。建議先採用預設的掃描方式,例如: namp your-ip,來檢視由外界可以存取到我們哪些服務。再透過 nmap 的一些特殊參數設定,例如 nmap -sF your-ip,進一步確認,透過一些特意處理過標頭資訊的封包能存取到的服務又有哪些,如此即為攻擊者可蒐集到的資訊與存取到的資源。
若有自己預期之外的對外服務,請參閱防火牆的相關文件,例如man或是網站上的教學文件 (http://www.spps.tp.edu.tw/documents/memo/iptables/iptables.htm) ,做適度的調整與設定。然後再透過nmap再掃描一次,以確保外界能存取的資源,僅限於我們打算開放的。系統在安裝時針對防火牆所做的設定,基本上已能符合一般使用者的需求,使用者只要進行微調,即可符合所需,如果要做更精細、全面性的掌控,請參考官方說明文件 (http://www.iptables.org/documentation/index.html)。
另外,有些程式可以方便我們對系統安全整體的強化做比較完整、全面的設定。例如Bastille Linux(http://www.bastille-linux.org/),藉由一連串的問答,針對防火牆、檔案的存取權限、帳戶的安全性設定等等,產生完整的設定,方便我們對系統安全作一全面性的設定。

結論
沒有所謂絕對安全的系統,安全程度通常是相對的。希望透過本文的介紹,一般使用者對於Linux的安全強化有基本的概念與技術,能夠了解安裝時應該注意的事項,及安裝後應該檢查哪些部分,並且能落實這些基本的防護措施,尤其是漏洞的即時更新。雖然只是些簡易的方式,但對於基本的使用者防護,必定有幫助。
本文作者群現任職於台灣電腦網路危機處理暨協調中心(TWCERT/CC)

參考資料:
*Security Quick-Start HOWTO for Linux http://www.tldp.org/HOWTO/Security-Quickstart- HOWTO/
*Linux Security HOWTO http://www.tldp.org/HOWTO/Security-HOWTO/
*A quick way to secure a Linux system http://www.net-security.org/article.php?id=452
*Securing & Optimizing Linux: The Ultimate Solution http://www.openna.com/products/books/sol/ solus.php
*Linux Administrator's Security Guide http://www.seifried.org/lasg/