第 1 堂課 - 伺服器/主機的簡易安全概念與管理
上次更新日期 2017/09/12
- 1.1: 課程操作說明
- 1.2: Linux Server 的基礎防護
- 1.3: 課後練習
1.1: 課程操作說明
本門課程主要是『網路伺服器建置與管理』(舊稱為 Linux 作業系統) 的進階課程,主要透過 Linux OS 來進行 Internet service 的提供! 因此,許多的指令操作都是在 Linux 系統上面。本課程主要使用 CentOS 系列產品作為伺服器的基準作業系統。所以,若沒有相關的操作經驗, 本門課程的實施過程中,會比較有壓力!建議下學期先修資傳系『網路伺服器建置與管理』後,再來選修此課程為佳。
本課程的實際上課與作業環境均在雲端虛擬電腦教室的環境下,且為了讓學習者能夠同時掌控 Server 與 Client 的環境,因此每位學生需要有兩個帳號, 其中一個為『學號_server』另一個單純為『學號』的帳號,兩個帳號負責的作業系統內容不太一樣喔,操作時請特別留意。
本課程實際連上雲端系統,主要是透過 gocloud 以及 spice remove viewer 的軟體,學生可以自行從網路下載最新版軟體:
- Windows 版本:https://virt-manager.org/download/(選擇 Win_x64.MSI 即可)
- MAC (OSx)版本:https://www.spice-space.org/page/OSX_Client(按下 bundle 即可)
由於有兩個不同的系統在操作,加上你的使用機器共三個作業系統在操作,可能會有些無法掌握的情況,這也是平時系統管理員所會遭遇的狀態! 所以,慢慢學習!總是會有進步的。另外,本門課程的內容大部份是有延續的,因此,請盡量不要缺課~若有缺課的情況,也請跟同學詢問上課的進度, 跟好進度才好喔!
- Server/Client 的環境與平時操作
為了模擬正常的系統操作環境,因此本課程在 Server 處僅提供純文字界面,並沒有圖形界面的提供,因此預設的畫面就是黑壓壓一片。 並且 Server 為最小安裝!因此讀者需要花時間去重建自己熟悉的環境 (這也是應該要會的基本技術)。不過如果拿這個畫面來上課, 可能大家都會想死~因為畫面實在是不好讀取 (連廣播或投影都很麻煩)。因此,課程中會使用 client 端的機器啟動圖形界面, 再透過圖形界面來連線到 Server 上!
- 評分基準
就如首頁談到的,評分就是平時成績 30%、期中考 30%、期末考 40%,每週進度的最後都會有習題,請回家連上雲端虛擬機來練習即可。 而每週練習偵測腳本會放置於本網站的平台上,請下載後處理上傳!
期中考與期末考一樣的動作,可以帶書、帶筆記,但不能帶任何電子產品與影印的文件資料。
1.2: Linux Server 的基礎防護
你的 Linux 作業系統要怎麼安裝?這與你的 Linux 系統使用情況有關。如果是作為 Internet Server 使用,一般建議使用最小安裝來處理較佳。 如果是作為虛擬化伺服器,那一開始就安裝成虛擬化主機即可 (在挑選軟體時可以考慮的安裝方式)。如果是測試機,那安裝具有 GUI 界面的伺服器。
如果想要進一步理解怎麼安裝最小化的 Linux 作業系統,請參考下列連結:
如果你是剛剛接觸 Linux 的新手,那建議先不要上這門課,你應該要先去看看 Linux 基礎學習,等到學的差不多,再回來繼續閱讀底下的文件喔!
- I. root 慣用環境的建置
大家都會說『工欲善其事,必先利其器』,不過到底要怎麼做啊?呵呵!每個人習慣的作業環境都不一樣,但是某些軟體總是會需要的! 因此,你得要先將你的 Linux 作業系統搞成你習慣的環境,這樣未來要管理比較方便嘛!
- 依據老師寫的資料,請在上課的網站上面註冊兩個帳號,一個是『你的學號_server』,一個是『你的學號』, 注意註冊時,一定要使用正確的姓名,否則老師不會將你的帳號開通的
- 主要的伺服器大多使用『你的學號_server』來建置(環境會與一般系統不同),用戶端系統則主要用『你的學號』來建置
- 請使用『你的學號-server』帳號登入,登入後啟動『 LinuxServer-伺服器 』的雲端虛擬機器,開始準備使用系統。
- 雲系統的帳號 student, 密碼 student@linux,且具有 sudo 的功能了!
取得上述的資料後,現在請登入該系統,然後操作一下該系統。請注意,該系統為最小安裝,所以幾乎什麼都沒有~ 未來你得要自行慢慢加上所需要的軟體才行!
- 因為預設沒有網路,現在請先以 DHCP 的方式來啟動你這部虛擬機器的網路,同時由於沒有 ifconfig, 所以請使用 nmcli 或者是 ip 來觀察網路即可。
- 你有很多軟體還沒有安裝,最重要的就是 vim 以及指令參數補全的功能!所以,請安裝 vim-enhanced 及 bash-completion 軟體。
- 使用 yum whatprovides "*sbin/ifconfig" 之類的方式找出你所欠缺的軟體名稱為何?然後直接安裝上去!
- (hint)安裝完 bash-completion 之後,你可能需要登出再登入,這樣才會讓 bash 的參數補全功能生效喔!
上個學期我們常用的軟體功能大概就是這些,先完成這些軟體的基礎安裝後,我們比較好處理後續的各項任務啊! 另外,上面的動作都可以用在未來系統操作過程中,若有些指令不存在系統中時,就是透過上述的方法來安裝使用的。
- II. 封包進入 Server 的基本流程
如果通過了上述的考驗,那麼我們可以進一步來理解,你該如何防衛你的 Linux 作業系統呢?先來看一下封包進入主機的基本流程圖:
- 先要通過 TCP/IP 的相關規範才能夠連線到本機的網路門口
- 要先通過防火牆的規則管制,才可以進入到本機使用本機的服務
- 能否取得服務與這個服務是否啟用與相關設定有關 (發生問題可以查登錄檔)
- 能否實際存取資料,首先要看有沒有啟動 SELinux 這個細部權限設定項目?
- 全部都放行後,最後能不能存取資料,還是跟資料檔案的權限 (rwx) 有關!
所以上面就是你在架設 Server 時,需要注意到的各項事情了!
- III. 防火牆有沒有用?軟體升級有沒有用?設定 chmod 777 會不會出事?
很多網路介紹的文件都不是很清楚,你應該要搭配上一張圖來理解底下的問題:
- 防火牆是沒屁用的,對正常提供的服務來說:
從前一個項目的圖示來看,如果你是 WWW 伺服器,那一定就是要放行 port 80,因此,若 port 80 出問題, 那你的防火牆當然一點用處也沒有。 - 防火牆是很有用的,對需要保護的服務來說:
如果你的服務中,例如 ssh 的服務,僅放行給部份的來源 IP 位址,則此時防火牆保護危險的服務,就很有用處了! - 軟體更新是一定要的,對連上 Internet 的伺服器來說:
一般來說,軟體如果沒有問題,或沒有加入新功能,是不會隨意升級的。因此,如果官網有公告最新的軟體升級資訊, 當然最好就是一定要升級到最新!至少能夠預防一大堆可能的系統漏洞 - 軟體更新是非必要的,對提供給內部特定用途的軟體來說:
崑山資傳系主要透過自建的 DRBL 搭配 Clonezilla 以及 partclone 再加上 PHP 的功能來進行電腦教室的佈建。 過去曾經因為 clonezilla 不同版本所支援的參數不同,導致 PHP 程式無法順利呼叫 clonezilla 的困擾。鳥哥自己的 cluster 跑模式用 Linux Server, 也因為內部的環境已經建置妥當,而且該系統基本上是不連網的,所以,此時你的系統應該『不要隨便升級』! 或者是說:『不要隨便升級特定的內部服務軟體』! - 權限設定的理解是基礎中的基礎:
如果你的網路服務僅提供讀取的功能,那麼即使你的檔案權限放行 777 可能都還不會出事。但是如果你的這個服務設定錯誤呢? 如果你的這個服務因為漏洞所以被攻破呢?那麼你的檔案如果是 777 ,很好!那就是完全的被拿走了... - 正規伺服器 (沒有自己撰寫怪異的程式腳本),請一定要啟動 SELinux :
SELinux 可以管理網路程序 (本機程序通常不管理),讓這個網路程序僅能在某些目錄內工作,而且只能進行某些行為, 因此,即使你的這個網路軟體被攻破,而且權限還是 root 時,它還是無法完整的操控你的系統!
- IV. 伺服器本機的防護:升級到官方最新的軟體版本
升級整個系統就能夠讓系統保有一定程度的安全性:
- 找到最近的官網 mirror 網站,崑山校內最簡單的就是 http://ftp.ksu.edu.tw 這個網站了!(hint: 要注意 repodata/ 對不對啊? 而且請注意輸入的文字大小寫要正確喔!)
- 修改 /etc/yum.repos.d/ 這個目錄,可以的話,只加上 base 及 updates 這兩個就好,其他的沒用到暫時不用也無所謂。(hint: 暫時沒用到的,就用 enabled=0 處理,同時,須不需要進行 yum clean all 呢?)
- 使用 yum -y update 自動進行全系統升級 (hint: 那個 -y 的用途為何)
- 若有升級到核心或重要的函式庫,最好重新開機,才能使用到最新的核心與函式庫功能。
- 建立一隻每天 2 點會執行的腳本,該腳本會每天持續更新系統。且若有實際更新,才會傳 log 給管理員,否則就不會傳 log 給管理員! (因為要 mail 給 root,所以需要 mail 這個指令。但是這個指令不存在喔!要怎麼處理安裝才好?)
- 假設你需要加入某些核心功能,例如在 /proc/cmdline 加入 intel_iommu=on 要如何處理與觀察?
- 如何讓你的 Linux 支援 EPEL 呢?(CentOS 7 似乎沒有提供 epel-release 了!請 google centos7 epel ,找到名為 epel-release 且針對 CentOS 7 版本的 rpm 來安裝即可!)
- 請使用 yum 的方式,列出目前啟動當中的 repository 喔!若有發現 epel ,請讓他預設沒有啟用較佳!(可能需要手動編輯 *.repo 喔!)
- 請使用 yum 並『暫時使用 epel (意思是,不要修改設定檔,直接使用指令列模式處理)』來查詢有沒有 ntfs-3g 這個軟體?
- 若需要透過 epel 提供的 ntfs-3g 來安裝,該如何操作呢?且請問本例題中第一項提到的 2 點鐘更新,會不會讓 ntfs-3g 同步更新呢?
- V. 伺服器本機的防護:減少網路服務
如果對方想要連接到你的 port 80,但是你的 port 80 根本就沒有啟用埠口在監聽,那麼對方無論如何是無法連接到你的服務的! 所以減少網路服務是很重要的! (底下會用到的軟體,如果不存在的話,請自行使用 yum whatprovides "*bin/???" 找到軟體後自行安裝!)
- 可使用 netstat -utlnp 來查詢自己本機所啟動的服務
- 可使用 nmap IP 來查詢某個 IP 有啟動的 TCP 埠口有哪些 (不可隨意攻打別人)
- 可使用 nmap -sTU IP 來查詢某個 IP 啟動的 TCP/UDP 埠口
- 可使用 nmap -sP network/netmask 來查詢整個網域有啟動的 IP 位址共有哪些
- 先用 netstat 檢查一下本機有啟動的網路埠口共有哪些?
- 先自己分析一下,哪些是需要的埠口?哪些是不需要的埠口?
- 透過 systemctl 關閉不要的埠口,且下次開機,這些埠口也不會啟用!
- 使用 nmap 搭配 icmp (-sP) 的功能,來找到你的外部網域的區網有哪些 IP 是開機著的!
再次說明,那個 nmap 是一個駭客軟體,主要的目的在做 port 掃描。你可以自行使用 nmap 去攻擊自己,掃描自己 server 的漏洞, 但是不要去攻擊別人啊!
1.3: 課後練習
- (100%)請使用自己的學號那個帳號登入雲端電腦教室系統,進行 Linux 作業系統的期末考題目,再次確認一次你的 Linux 基礎觀念! 並依據題目的需求,自行上傳考試結果。請在老師規定的時間點前完成題目。