Linux伺服器 Linux伺服器

網站伺服器建置與管理 - RockyLinux 9

網站伺服器建置與管理 > 課程內容 > 第 1 堂課 - 伺服器/主機的簡易安全概念與管理

第 1 堂課 - 伺服器/主機的簡易安全概念與管理

上次更新日期 2022/09/12

伺服器一上線,就容易被攻擊啊!所以預設的情況下,你的 Linux 作業系統應該是啟動比較少的網際網路服務比較妥當。 而且,伺服器只要提供相關的服務就好,所以,莫名的軟體越少越好!因此,第一堂課我們就來了解一下,你的 Server 應該如何管理吧! 另外,第一節課程我們還得要建立帳號、建立操作環境等等,所以會花費不少時間在等待上面喔!因此課程內容相對少一些。

學習目標:

  • 透過 virt-viewer 連結到雲端教室取得 Linux
  • 從最小安裝慢慢處理建置 Server 的環境
  • 學習關閉網路服務與觀察埠口
  • 學習使用 nmap -sP 指令觀察區網內主機的網路狀態
  • 1.1: 課程操作說明
  • 1.2: Linux Server 的基礎防護
  • 1.3: 務必完成之動作
  • 1.4: 課後練習

1.1: 課程操作說明

本門課程主要是『網路伺服器建置與管理』(舊稱為 Linux 作業系統) 的進階課程,主要透過 Linux OS 來進行 Internet service 的提供! 因此,許多的指令操作都是在 Linux 系統上面。本課程主要使用 RockyLinux 系列產品 (RHEL 衍生產品) 作為伺服器的基準作業系統。所以,若沒有相關的操作經驗, 本門課程的實施過程中,會比較有壓力!建議下學期先修資傳系『網路伺服器建置與管理』後,再來選修此課程為佳。

本課程的實際上課與作業環境均在雲端虛擬電腦教室的環境下,且為了讓學習者能夠同時掌控 Server 與 Client 的環境,因此每位學生需要有兩個帳號, 其中一個為『學號_server』另一個則為『學號_client』的帳號,兩個帳號負責的作業系統內容不太一樣喔,操作時請特別留意。

本課程實際連上雲端系統,主要是透過 gocloud 以及 spice remove viewer 的軟體,學生可以自行從網路下載最新版軟體:

由於有兩個不同的系統在操作,加上你的使用機器共三個作業系統在操作,可能會有些無法掌握的情況,這也是平時系統管理員所會遭遇的狀態! 所以,慢慢學習!總是會有進步的。另外,本門課程的內容大部份是有延續的,因此,請盡量不要缺課~若有缺課的情況,也請跟同學詢問上課的進度, 跟好進度才好喔!

  • Server/Client 的環境與平時操作

為了模擬正常的系統操作環境,因此本課程在 Server 處僅提供純文字界面,並沒有圖形界面的提供,因此預設的畫面就是黑壓壓一片。 並且 Server 為最小安裝!因此讀者需要花時間去重建自己熟悉的環境 (這也是應該要會的基本技術)。不過如果拿這個畫面來上課, 可能大家都會想死~因為畫面實在是不好讀取 (連廣播或投影都很麻煩)。因此,課程中會使用 client 端的機器啟動圖形界面, 再透過圖形界面來連線到 Server 上!

  • 評分基準

就如首頁談到的,評分就是平時成績 30%、期中考 30%、期末考 40%,每週進度的最後都會有習題,請回家連上雲端虛擬機來練習即可。 而每週練習偵測腳本會放置於本網站的平台上,請下載後處理上傳!

期中考與期末考一樣的動作,可以帶書、帶筆記,但不能帶任何電子產品與影印的文件資料。

1.2: Linux Server 的基礎防護

你的 Linux 作業系統要怎麼安裝?這與你的 Linux 系統使用情況有關。如果是作為 Internet Server 使用,一般建議使用最小安裝來處理較佳。 如果是作為虛擬化伺服器,那一開始就安裝成虛擬化主機即可 (在挑選軟體時可以考慮的安裝方式)。如果是測試機,那安裝具有 GUI 界面的伺服器。

如果想要進一步理解怎麼安裝最小化的 Linux 作業系統,請參考下列連結:

如果你是剛剛接觸 Linux 的新手,那建議先不要上這門課,你應該要先去看看 Linux 基礎學習,等到學的差不多,再回來繼續閱讀底下的文件喔!

  • I. root 慣用環境的建置

大家都會說『工欲善其事,必先利其器』,不過到底要怎麼做啊?呵呵!每個人習慣的作業環境都不一樣,但是某些軟體總是會需要的! 因此,你得要先將你的 Linux 作業系統搞成你習慣的環境,這樣未來要管理比較方便嘛!

例題 1.2.A:取得虛擬機器的環境
  1. 依據老師寫的資料,請在上課的網站上面註冊兩個帳號,一個是『你的學號_server』,一個是『你的學號_client』, 注意註冊時,一定要使用正確的姓名,否則老師不會將你的帳號開通的
  2. 主要的伺服器大多使用『你的學號_server』來建置(環境會與一般系統不同),用戶端系統則主要用『你的學號_client』來建置
  3. 請使用『你的學號_server』帳號登入,登入後啟動『 LinuxServer-上課-server 』的雲端虛擬機器,開始準備使用系統。
  4. 請等待一小段時間,老師需要進行 server/client 環境的重新配置。(新註冊同學,要通知老師進行此動作!否則 server/client 網路環境會有問題!)

取得上述的資料後,現在請登入該系統,然後操作一下該系統。請注意,該系統為最小安裝,所以幾乎什麼都沒有~ 未來你得要自行慢慢加上所需要的軟體才行!

例題 1.2.B:處理預設的網路環境與相關的操作軟體安裝
  1. 登入 gocloud 之後,啟動上課用 server 環境,並且使用 remote-viewer 連接到終端界面環境。
  2. 在 tty1 純文字界面,使用 student 帳號登入系統,該帳號密碼 mystdgo,且不具備 sudo 功能
  3. 使用 su - 指令,切換身份成為 root,該帳號密碼為 myRockyL9。
  4. 將 student 加入 wheel 群組,讓 student 支援 sudo 功能!
  5. 因為可能沒有網路 (請自行檢查),現在請先以 DHCP 的方式來啟動你這部虛擬機器的網路,同時由於沒有 ifconfig, 所以請使用 nmcli 或者是 ip 來觀察網路即可。
  6. 你有很多軟體還沒有安裝,最重要的就是 vim 以及指令參數補全的功能!所以,請安裝 vim-enhanced 及 bash-completion 軟體。
  7. 使用 yum whatprovides "*sbin/ifconfig" 之類的方式找出你所欠缺的軟體名稱為何?然後直接安裝上去!
  8. (hint)安裝完 bash-completion 之後,你可能需要登出再登入,這樣才會讓 bash 的參數補全功能生效喔!
  9. 我們應該需要網路校時才對,請安裝 chrony 軟體,並且編輯 chrony.conf 設定檔,加入 ntp.ksu.edu.tw 時間伺服器 (關閉 pool), 並重新啟動後 (可能需要 stop 再 start),使用 chronyc tracking 或 chronyc sources 檢查連線是否成功?最後設定每次開機都會啟用時間同步。

上個學期我們常用的軟體功能大概就是這些,先完成這些軟體的基礎安裝後,我們比較好處理後續的各項任務啊! 另外,上面的動作都可以用在未來系統操作過程中,若有些指令不存在系統中時,就是透過上述的方法來安裝使用的。

  • II. 封包進入 Server 的基本流程

如果通過了上述的考驗,那麼我們可以進一步來理解,你該如何防衛你的 Linux 作業系統呢?先來看一下封包進入主機的基本流程圖:

  1. 先要通過 TCP/IP 的相關規範才能夠連線到本機的網路門口
  2. 要先通過防火牆的規則管制,才可以進入到本機使用本機的服務
  3. 能否取得服務與這個服務是否啟用與相關設定有關 (發生問題可以查登錄檔)
  4. 能否實際存取資料,首先要看有沒有啟動 SELinux 這個細部權限設定項目?
  5. 全部都放行後,最後能不能存取資料,還是跟資料檔案的權限 (rwx) 有關!

所以上面就是你在架設 Server 時,需要注意到的各項事情了!

  • III. 防火牆有沒有用?軟體升級有沒有用?設定 chmod 777 會不會出事?

很多網路介紹的文件都不是很清楚,你應該要搭配上一張圖來理解底下的問題:

  1. 防火牆是沒屁用的,對正常提供的服務來說:
    從前一個項目的圖示來看,如果你是 WWW 伺服器,那一定就是要放行 port 80,因此,若 port 80 出問題, 那你的防火牆當然一點用處也沒有。
  2. 防火牆是很有用的,對需要保護的服務來說:
    如果你的服務中,例如 ssh 的服務,僅放行給部份的來源 IP 位址,則此時防火牆保護危險的服務,就很有用處了!
  3. 軟體更新是一定要的,對連上 Internet 的伺服器來說:
    一般來說,軟體如果沒有問題,或沒有加入新功能,是不會隨意升級的。因此,如果官網有公告最新的軟體升級資訊, 當然最好就是一定要升級到最新!至少能夠預防一大堆可能的系統漏洞
  4. 軟體更新是非必要的,對提供給內部特定用途的軟體來說:
    崑山資傳系主要透過自建的 DRBL 搭配 Clonezilla 以及 partclone 再加上 PHP 的功能來進行電腦教室的佈建。 過去曾經因為 clonezilla 不同版本所支援的參數不同,導致 PHP 程式無法順利呼叫 clonezilla 的困擾。鳥哥自己的 cluster 跑模式用 Linux Server, 也因為內部的環境已經建置妥當,而且該系統基本上是不連網的,所以,此時你的系統應該『不要隨便升級』! 或者是說:『不要隨便升級特定的內部服務軟體』!
  5. 權限設定的理解是基礎中的基礎:
    如果你的網路服務僅提供讀取的功能,那麼即使你的檔案權限放行 777 可能都還不會出事。但是如果你的這個服務設定錯誤呢? 如果你的這個服務因為漏洞所以被攻破呢?那麼你的檔案如果是 777 ,很好!那就是完全的被拿走了...
  6. 正規伺服器 (沒有自己撰寫怪異的程式腳本),請一定要啟動 SELinux :
    SELinux 可以管理網路程序 (本機程序通常不管理),讓這個網路程序僅能在某些目錄內工作,而且只能進行某些行為, 因此,即使你的這個網路軟體被攻破,而且權限還是 root 時,它還是無法完整的操控你的系統!
  • IV. 伺服器本機的防護:升級到官方最新的軟體版本

升級整個系統就能夠讓系統保有一定程度的安全性。這很重要啊!另外,由於我們的 client 端電腦數量太多了! 所以,最好將軟體倉儲移動到校內比較好!

例題 1.2.C:在校內的系統要進行升級時,應該如何進行比較妥當呢?
  1. 找到最近的官網 mirror 網站,崑山校內最簡單的就是 http://ftp.ksu.edu.tw 這個網站了!(hint: 要注意 repodata/ 對不對啊? 而且請注意輸入的文字大小寫要正確喔!)。由於我們並沒有圖形界面,所以,這裡先給一個簡單的連結,連結如下。 請使用圖形界面的 curl 瀏覽底下的網址,要記得除非是檔案,否則網址列需要於結尾加上斜線 ( / ) 才能順利瀏覽喔!
    http://ftp.ksu.edu.tw/FTP/Linux/rocky/9/
  2. 使用 yum repolist 檢查一下目前啟用的軟體倉儲有幾個。
  3. 修改 /etc/yum.repos.d/rocky.repo 這個檔案,可以的話, 修改 base 以及 appstream 這兩個軟體倉儲的網址 (URL) 即可!建議可以直接使用 baseurl 不要使用 mirrolist 了。 至於 url 所在,請自行以 curl 檢查上面的 FTP 網址喔!(hint: 暫時沒用到的,就用 enabled=0 處理,同時,需不需要進行 yum clean all 呢?)
  4. 若要關閉 extras 軟體倉儲,可以 yum config-manager --disable extras 即可!
  5. 使用 yum -y update 自動進行全系統升級 (hint: 那個 -y 的用途為何)
  6. 若有升級到核心或重要的函式庫,最好重新開機,才能使用到最新的核心與函式庫功能。 另外,RockyLinux 9 提供了名為 yum-utils 軟體,內建了 needs-restarting 指令,這個指令可以判斷系統是否要重新啟動某些服務, 或者是需要進行重新開機的行為,相當值得討論看看。
    # needs-restarting -r
    

例題 1.2.D:你有時候必須要修改核心參數,有時候也需要管理非正規軟體,該如何處理較佳呢?
  1. 建立一隻每天 2 點會執行的腳本,假設檔名為 /root/maintain.sh。腳本第一件事情則是對系統完整升級。 另外,腳本執行過程的訊息,全部輸出到 /dev/null 去!
  2. 假設你需要加入某些核心功能,例如在 /proc/cmdline 加入 intel_iommu=on 要如何處理與觀察?
  3. 如何讓你的 Linux 支援 EPEL 呢?(僅這次支援 extras 軟體倉儲時,可用 --enablerepo=extras 來處理)
  4. 請使用 yum 的方式,列出目前啟動當中的 repository 喔!若有發現 epel ,請讓他預設沒有啟用較佳! ( yum ??? --disable epel...)
  5. 請使用 yum 並『暫時使用 epel (意思是,不要修改設定檔,直接使用指令列模式處理)』來查詢有沒有 ntfs-3g 這個軟體?
  6. 若需要透過 epel 提供的 ntfs-3g 來安裝,該如何操作呢?且請問本例題中第一項提到的 2 點鐘更新,會不會讓 ntfs-3g 同步更新呢?
  • V. 伺服器本機的防護:減少網路服務

如果對方想要連接到你的 port 80,但是你的 port 80 根本就沒有啟用埠口在監聽,那麼對方無論如何是無法連接到你的服務的! 所以減少網路服務是很重要的! (底下會用到的軟體,如果不存在的話,請自行使用 yum whatprovides "*bin/???" 找到軟體後自行安裝!)

  1. 可使用 netstat -utlnp 來查詢自己本機所啟動的服務
  2. 可使用 nmap IP 來查詢某個 IP 有啟動的 TCP 埠口有哪些 (不可隨意攻打別人)
  3. 可使用 nmap -sTU IP 來查詢某個 IP 啟動的 TCP/UDP 埠口
  4. 可使用 nmap -sP network/netmask 來查詢整個網域有啟動的 IP 位址共有哪些
例題 1.2.E: 將你的 Linux server 當中的網路服務關閉到只剩下系統至少需要的 port 22 及 port 323 即可 (不過,如果使用 dhcp 用戶端模式,則可能會再多出幾個必要的 port 喔!)
  1. 先用 netstat 檢查一下本機有啟動的網路埠口共有哪些?
  2. 先自己分析一下,哪些是需要的埠口?哪些是不需要的埠口?
  3. 透過 systemctl 關閉不要的埠口,且下次開機,這些埠口也不會啟用!
  4. 使用 nmap 搭配 icmp (-sP) 的功能,來找到你的外部網域的區網有哪些 IP 是開機著的!

再次說明,那個 nmap 是一個駭客軟體,主要的目的在做 port 掃描。你可以自行使用 nmap 去攻擊自己,掃描自己 server 的漏洞, 但是不要去攻擊別人啊!

1.3: 務必完成之動作

由於本課程為持續性的課程,同學們使用的硬碟內容將會延續到期末。因此,許多動作在上課用硬碟必須要實做, 否則,未來會出現許多的困擾!如果來不及跟上課程,也請同學們至少要來這邊,將需要完成的動作完成!否則,課程很難持續喔! 要注意!要注意!

  • 針對 gocloud 網站資料處理
  1. 一定要註冊兩個 gocloud 帳號,如果學號是 4090cxxx 的話,兩個帳號就會是 4090cxxx_server 與 4090cxxx_client。
  2. 註冊完畢一定要請老師啟動,且註明是 server 課程用,因為老師需要修改硬體設定檔!
  3. 要學會在 gocloud 系統上面啟動 VM 系統!
  4. 要學會 virt-viewer 的 remote-viewer 軟體的使用!
  5. 老師上課的畫面會使用 google meet,相關網址放置到 gocloud 的公告上了!請登入系統來查看網址。
  • 針對 Server 硬碟處理
  1. 帳號相關資訊:student/mystdgo, root/myRockyL9
  2. 讓 student 加入 wheel 群組 (usermod...)
  3. 使用 nmcli connection up ens3 啟動網路,也可以使用自動啟動網路的功能。
  4. 使用 yum 安裝 vim-enhanced 以及 bash-completion 與 net-tools
  5. 設定好 /etc/chrony.conf 的內容,加入 ntp.ksu.edu.tw 進行網路時間校正!
  6. 修改 /etc/yum.repos.d/rocky.repo 內容,參考例題 1.2.C 的說明!
  7. 進行 yum update 更新系統!
  8. 建立 /root/maintain.sh 的內容,讓該腳本在每天凌晨 2 點的時候自動執行

1.4: 課後練習

今天沒有作業硬碟,大家自行練習即可!

  1. 使用 yum 安裝具有 tcpdump 指令的軟體
  2. 透過 tcpdump -i ens3 -nn 嘗試監聽本機的網卡,並且看看有沒有任何封包流進你的網卡
  3. 觀察完畢請用 [ctrl] + c 結束 tcpdump 軟體。