Linux伺服器 Linux伺服器

(CentOS 7) 網站伺服器建置與管理 - 舊版

網站伺服器建置與管理 > 課程內容 > 第 4 堂課 - 認識與建置防火牆

第 4 堂課 - 認識與建置防火牆

上次更新日期 2017/09/21
上週的課程雖然完成了內部區域網路的建置,但其實內部 LAN 的那部客戶端電腦事實上是無法上網的!為啥? 因為你的 Server 還沒有成為 gateway/router 啦!另外,你的某些需要被保護的服務也需要好好的設定一下, 所以,這節課我們就來玩玩成為 router 的 NAT 功能與保護服務的防火牆功能囉!
  • 4.1: 什麼是防火牆
  • 4.2: CentOS 7 的防火牆機制
  • 4.3: iptables 的表格 (table) 與鏈 (chain)
  • 4.4: NAT 網路位址轉換表格
  • 4.5: 課後練習

4.1: 什麼是防火牆

什麼是防火牆呢?基本上,防火牆的主要功能就是:

  • 切割被信任(如子網域)與不被信任(如 Internet)的網段 (用 IP 判斷,為 Layer 3 的方法);
  • 劃分出可提供 Internet 的服務與必須受保護的服務 (用 IP 與 port 處理,為 Layer 3/4 的方法);
  • 分析出可接受與不可接受的封包狀態 (許多狀態封包,有點屬於防火牆的外掛功能);

而依據達成上述功能的方法不同,基本上有分為軟體防火牆以及封包過濾式防火牆:

  • 封包過濾式火牆:在 CentOS 上面使用 Netfilter 核心防火牆機制來控制 layer2, layer3, layer4 以及某些外掛的封包過濾行為, 主要是分析訊框或封包的表頭資料來判斷是否放行該封包的一種方式;
  • 軟體式防火牆:例如某些防毒、防木馬軟體內建的軟體過濾機制,或者是類似代理伺服器 (Proxy) 的功能,也都能算是某種特殊的軟體防火牆。

無論何種防火牆,大多是設定一堆流程與規則,讓封包要進入到本機前,需要通過這些規則的順序,以達到放行或者是拒絕的程序。

  • 封包過濾型防火牆

開始了解 netfilter 之前,這裡先告知一下,其實早期 (事實上,目前還是存在的!) 有用比較簡單的方式,那就是使用 tcp_wrapper 的方式來抵擋服務的進出! 只要修改 /etc/hosts.deny 與 /etc/hosts.allow 即可!這種方式主要透過一個名為 tcpd 的軟體來控管~但由於現在的 netfilter 的功能太強大, 因此目前很少人使用 tcp wrapper 了!

不過,萬一你接手一台舊 server (意思就是,原先不是你建置的,可能是實驗室或是公司的老機器),然後怎麼處理 netfilter 的機制都無法順利達成某些任務, 甚至於關閉 netfilter 都還有防火牆的管制時,記得去 /etc/hosts.allow 及 /etc/hosts.deny 瞧一瞧是否有異狀 (基本上,目前這兩個檔案的內容應該都是空的才對!)

基本上,封包過濾的防火牆就是根據封包的分析資料 "比對" 你預先定義的規則內容,若封包資料與規則內容相同則進行動作,否則就繼續下一條規則的比對!』 重點在那個『比對與分析順序』上。以底下的過濾流程圖示來解釋:

iptables
  1. 你要先制定一些規則,例如底下的規則順序 (有順序之分喔!)
    1. 放行本機的網路界面 (lo, 就是 localhost 那片網卡)
    2. 放行 ICMP 這個封包檢測的功能 (例如 ping 就是其中一種 icmp 封包)
    3. 放行本機自己的回應封包 (就是本機自己向外要求的封包回應訊息,例如去 centos 官網後,官網回傳的訊息)
    4. 放行區域網路連線到自己本機的 ssh 服務要求。
    5. 放行來源為區域網路的所有要求
    6. 拒絕全部的連線
    7. 放行整個 Internet 連線到自己本機的 www 服務要求。
  2. 當有任何網路來源對你這部系統發起連線時,就需要通過上面四個流程,而只要有任何一個流程通過,後面的流程就不會被檢測 (重要的項目排在前面較佳)。
  3. 萬一發起連線的封包並沒有符合任何一條規則時,那系統就會使用預設政策 ( Policy ) 來決定該連線封包是否放行。
  4. 通常建議網路主機的預設政策為丟棄,亦即『關閉所有連線,開放特定服務』的設定機制較佳。
例題 4.1.A:請看 A 的幾個的流程,並且解析每條連線的通過與不通過的流程:
  1. 對自己『 ping localhost 』會通不會通?用到那條規則?
  2. 『 ssh localhost 』會通不會通?用到那條規則?
  3. 區網內用戶端對我『 ping localhost 』時?那 internet 的用戶呢?
  4. 區網內用戶端對我發起網路連線 (用瀏覽器連線我的 WWW 時)?那 internet 的用戶呢?
  5. 區網內用戶端『 ssh 我的IP 』時?那 internet 的用戶呢?
  6. 我主動連線到 www.google.com 去搜尋資料時?
  7. 區網內用戶端對我發起 FTP 連線 (用瀏覽器連線我的 FTP 服務時)?那 internet 的用戶呢?

要懂的如何解析~這樣才會理解防火牆的建置與修改喔!

4.2: CentOS 7 的防火牆機制

linux kernel 就是使用 iptables 這個 netfilter 的防火牆機制,由於是核心提供的防火牆,所以效能特別好。 CentOS 7 提供了兩個管理機制,一個直接使用 iptables 來管理,一個則透過 firewalld 這個服務來管理。但是 firewalld 需要透過專屬的 firewall-cmd 這個指令來管理,在正常一般的管理行為中, firewall-cmd 較為簡易,但若有特別的規則時,則需要使用到 firewall-cmd 的 rich rule 來管理! 其實學習 rich rule 才是王道!

不過,事實上,最終 firewalld 還是透過核心的 iptables 來達成防火牆控制。因此,在學習防火牆機制行為上,個人還是建議先摸一下 iptables 較佳。

例題 4.2.A:關於 firewalld 與 iptables 服務的啟動與關閉
  1. 以 systemctl 觀察目前使用的是 firewalld 還是 iptables 這兩個服務的那一個啟動了?
  2. 若沒有 iptables 這個服務,代表你的系統沒有安裝,請使用 yum 自己安裝好 iptables-services 這個軟體
  3. 請關閉 firewalld 且重新開機不會啟動,請啟動 iptables 且重新開機會啟動。
  4. 如何確定 iptables 是啟動的了?
  • 會影響到防火牆的許多服務

因為虛擬化的環境中,虛擬系統需要透過本機對外連線,因此虛擬化軟體會主動的去修改實體機器的 iptables 防火牆。 不過,我們的上課環境已經就是虛擬機器,因此無須使用啟用虛擬化軟體,所以需要關閉這些軟體,避免防火牆規則一直被干擾影響。 另外,由於 Server 使用的是最小安裝,且 client 端的虛擬化軟體已經事先被鳥哥拿掉了,所以底下單純瞧瞧就好!

例題 4.2.B:先檢查有沒有 libvirtd 以及 virsh 的指令,若有這幾個指令存在,底下的練習才會生效!否則就無須進行底下的練習
  1. 使用 virsh net-list 查看是否有一個名為 default 的網路資訊?
  2. 使用 virsh net-destroy default 刪除掉這個特別的網路卡
  3. 使用 virsh net-undefine default 讓這個虛擬網路裝置不會再被啟動。
  4. 透過 systemctl 的方式關閉 libvirtd 這個特別的虛擬系統服務。
  5. 請重新開機,這樣就能夠避免虛擬化造成的防火牆被修改的問題了。

先處理好服務,等一下才有辦法繼續玩下去!

4.3: iptables 的表格 (table) 與鏈 (chain)

iptables 預設提供好多種特殊的 IP 管理表格 (所以稱為 ip tables 嘛!),基本上有三個比較常見的表格存在:

  • filter 表格:針對伺服器本機的管理行為
  • nat 表格:針對透過伺服器作為 router 之用的網路管理行為 (如 IP 分享器等)
  • mangle 表格:與特殊的封包路由旗標有關
iptables
  • iptables 針對本機的工作鏈 (chain)

針對本機的防火牆表格是 filter (過濾) 這個表格,filter 共有三個預設的鏈,分別是 INPUT, OUTPUT, FORWARD,功能如下:

  • INPUT 任何進入本機使用本機服務的封包 (包括從伺服器端回傳的回應資訊),都會經過這個鏈
  • OUTPUT 從本機主動發出的封包,包括回應給用戶端的訊息,都會經過這個鏈
  • FORWARD 沒有進入本機,但是透過本機轉遞 (例如本機為路由器的角色時) 的封包,就會經過這個鏈

一般來說,在單純的伺服器環境下 (沒有開放讓其他用戶使用本機的 ssh 等本地端服務),只要管制 INPUT 鏈即可,OUTPUT 及 FORWARD 都可以直接放行。

  • iptable 指令語法 - 觀察

使用 iptables-save 觀察防火牆的規則與順序:

[root@localhost ~]# iptables-save
# Generated by iptables-save v1.4.21 on Thu Sep 21 14:52:28 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [152:20175]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Sep 21 14:52:28 2017

上表當中,出現 # 的都不用看,那僅是告知 iptables-save 的執行與輸出時間而已,至於 * 與 : 與 -A 開頭的就得要注意了:

  • 使用的表格:出現 *filter 代表使用的是 filter 這個表格
  • 使用的鏈:出現 :INPUT 代表 INPUT 的 chain ,而 ACCEPT 代表預設政策為接受,後續的 :OUTPUT, :FORWARD 都是類似的意思
  • 使用的規則:
    • -A INPUT 為 INPUT 的依順序的各個規則!因為 -A INPUT 共有 5 個,因此就是說,共有 5 個針對 INPUT chain 的規則之意。
    • -A FOWARD 僅有一條規則
    • -A OUTPUT 沒有出現,代表沒有 OUTPUT 定義規則,亦即 OUTPUT 完全使用預設政策的意思。
  • iptable 指令語法 - 清除鏈/規則,與定義預設政策

你要建立新的規則之前,最好將以前的規則全部刪除後,依序建立一條一條的規則順序,畢竟規則之間是有順序差別的!這點很重要! 清除鏈與規則需要一條一條來執行,無法一口氣執行完畢。此外,建議不要在遠端機器完整的清除鏈與規則,否則容易因為自己的不小心, 導致本機拒絕了自己的連線功能喔!

[root@localhost ~]# iptables -[F|X|Z] (清除規則|自訂鏈|統計資訊)
[root@localhost ~]# iptables -P [INPUT|OUTPUT|FORWARD] [ACCEPT|DROP]  (注意,是大寫的 P 喔!)
例題 4.2.A:依序進行如下的題目
  1. 先針對三條鏈,全部給予 ACCEPT 的預設政策,設定完畢之後,請立刻觀察是否正確?
  2. 清除所有的規則、自訂鏈與統計資訊,完成後也請觀察是否正確?
  • iptable 指令語法 - 定義規則,針對 layer3 與 layer4 的方式

基本的語法有點像底下這樣:

[root@localhost ~]# iptables [-A INPUT] [-i lo|eth0] [-s IP/Netmask] [-d IP/Netmask] \
[-p tcp|udp [--sport ports] [--dport ports]] [-j ACCEPT|REJECT|DROP]

基本上,來源 (指的是客戶端) 通常使用 -s, --sport 來處理,目標 (指的是伺服器自己) 通常指的是 -d, --dport 就是了。

例題 4.3.A:依序設定好你的防火牆規則:
  1. 讓 lo 變成一個可信任的裝置 (任何連線連接到這個網卡,就直接放行的意思)
  2. 讓 icmp 封包變成可接受的封包類型
  3. 讓來自 Gateway IP 的來源變成是可信任的來源
  4. 讓來自內網的所有 IP 網段都成為可信任的來源
  5. 讓來自 172.16.0.0/16 的區段成為可信任的 ssh 連線來源 (意思是,其他來源沒有被放行)
  6. 讓你的伺服器變成 http 與 https 服務提供者
  7. 全部的封包通通拒絕
  8. 上面的規則設定完畢後,讓你的 INPUT 規則變成 DROP,同時設定完畢之後請觀察設定是否生效了。
完成上述的功能之後,請思考在伺服器本機上:
  1. ping localhost 通不通?是那條連線的問題?
  2. ssh localhost 通不通?是那條連線的問題?
  3. links http://www.google.com 通不通?是那條連線的問題?
  4. ping GatewayIP 通不通?是那條連線的問題?
  5. ping 168.95.1.1 通不通?是那條連線的問題?
  6. ping client 通不通?是那條連線的問題?
  7. ssh client 通不通?是那條連線的問題?
完成上述的功能之後,請思考在內部 client 的用戶端機器上:
  1. ping server 通不通?是那條連線的問題?
  2. ssh server 通不通?是那條連線的問題?
  3. links http://server 通不通?是那條連線的問題?
  4. links ftp://server 通不通?是那條連線的問題?
完成上述的功能之後,請思考在外部與同學可以互通的網路網段上:
  1. 『 ping 同學IP 』通不通?是那條連線的問題?
  2. 『 ssh 同學IP 』通不通?是那條連線的問題?
  3. 『 links http://同學IP 』通不通?是那條連線的問題?
  4. 『 links ftp://同學IP 』通不通?是那條連線的問題?
最後,請將上述的所有指令編輯成為一個 shell script 來加以執行探討!檔名就稱為 /root/firewall.sh 好了。
  • iptable 指令語法 - 針對網卡 layer2 與狀態封包的外掛模組

上個練習當中發生的最大問題,就是防火牆本身連出去的封包要回來,還得再一次進入 input 鏈去檢查!很有點麻煩! 如果避免,就得要透過回傳的封包含有 ACK 回應旗標來處理了!使用的是狀態 (state) 模組!僅須這樣進行:

[root@localhost ~]# iptables [-A INPUT] [-m state] [--state RELATED,ESTABLISHED] \
[-j ACCEPT|DROP|REJECT]
  • ESTABLISHED:已經連線成功的連線狀態;
  • RELATED:這個最常用!表示這個封包是與我們主機發送出去的封包有關

如果需要使用到 layer2 的管制網路卡,則可以使用底下的方式來處理:

[root@localhost ~]# iptables [-A INPUT] [[-m mac] [--mac-source aa:bb:cc:dd:ee:ff]] \
[-j ACCEPT|REJECT|DROP]
例題 4.3.B:修改 /root/firewall.sh 檔案,增/刪防火牆資料如下:
  1. 讓狀態回應規則成為在 lo 信任裝置後的規則
  2. 嘗試找到 192.168.254.200 這部機器的 MAC,並將這部機器加入成為信任來源,這個規則請寫在拒絕全部封包的前一條規則。
  3. 最終讓這樣的規則儲存下來,並且重新啟動 iptables 服務,看看有沒有正常顯示出這些規則?

這就是防火牆建置的基礎功,好好練練功吧!

4.4: NAT 網路位址轉換表格

NAT 的全名是 Network Address Translation,字面上的意思是『網路位址的轉換』。由字面上的意思我們來想一想, TCP/IP 的網路封包不是有 IP 位址嗎?那 IP 位址不是有來源與目的嗎?我們的 iptables 指令就能夠修改 IP 封包的表頭資料, 連目標或來源的 IP 位址都可以修改呢!甚至連 TCP 封包表頭的 port number 也能修改!真是有趣!

但是整個 NAT 要能工作,需要核心的 ip forward 有啟動才行!

例題 4.4.A:啟動你的 ip forward 核心功能
  1. 先觀察 /proc/sys/net/ipv4/ip_forward 這個檔案的內容
  2. 修改 /etc/sysctl.conf ,加入一行『 net.ipv4.ip_forward = 1 』
  3. 使用 sysctl -p 來載入這個設定
  4. 重複觀察第一步,看看有沒有順利生效?(1 是有生效, 0 是未生效)

先來看一張圖,了解一下 nat 表格在 filter 表格的相關性:

iptables

當中的鏈意義為:

  • PREROUTING:在進行路由判斷之前所要進行的規則(DNAT/REDIRECT)
  • POSTROUTING:在進行路由判斷之後所要進行的規則(SNAT/MASQUERADE)
  • OUTPUT:與發送出去的封包有關

那 NAT 表格要幹麻用呢?最簡單的想法,一個是 IP 分享器的功能,一個是當我把 server 架設在 LAN 裡面時, 從外面來的連線就得要透過 port mapping 才行!這時就得要 NAT 的協助了!

  • SNAT:修改來源 (source)

當你想要成為 IP 分享器時,那麼所有從內部 LAN 要出去到 Internet 的封包,都要將『出去的那個 IP 改為 server 的對外 IP』, 這改的就是『來源』位址,因此稱為 SNAT!圖示如下:

iptables

當封包經過 SNAT 的偽裝之後,該偽裝的資料會紀錄到記憶體當中,當從 Internet 回來後,該回應封包會透過剛剛的紀錄, 從 PREROUTING 處,就直接自動改回原本的 IP,然後再往後送這樣。如下所示:

iptables

至於 SNAT 的基本語法為:

[root@localhost ~]# iptables -t nat -A POSTROUTING -s $innet -o $EXTIF -j MASQUERADE

[root@localhost ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.100
  • DNAT:修改目標 (destination)

當你的 server 是架設在內網,就需要 DNAT 的協助了!

iptables

假設的情況說明如下:

  1. 外部主機想要連接到目的端的 WWW 服務,則必須要連接到我們的 NAT 伺服器上頭;
  2. 我們的 NAT 伺服器已經設定好要分析出 port 80 的封包,所以當 NAT 伺服器接到這個封包後, 會將目標 IP 由 public IP 改成 192.168.1.210 ,且將該封包相關資訊記錄下來,等待內部伺服器的回應;
  3. 上述的封包在經過路由後,來到 private 介面處,然後透過內部的 LAN 傳送到 192.168.1.210 上頭!
  4. 192.186.1.210 會回應資料給 61.xx.xx.xx ,這個回應當然會傳送到 192.168.1.2 上頭去;
  5. 經過路由判斷後,來到 NAT Postrouting 的鏈,然後透過剛剛第二步驟的記錄,將來源 IP 由 192.168.1.210 改為 public IP 後,就可以傳送出去了!

至於 DNAT 的基本語法為:

[root@localhost ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
-j DNAT --to-destination 192.168.100.10:80 

[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp  --dport 80 -j REDIRECT --to-ports 8080

上面第一條是轉到後面的其他主機上,第二條則是透過 redirect 的方式轉到本機上面的某個埠口而已~比較簡單!

例題 4.4.B:建立你 server 成為 IP 分享器的 nat server 任務
  1. 加入清除 PREROUTING, POSTROUTING 的規則功能
  2. 加入你的內網進行偽裝 (MASQUERADE) 讓封包傳輸的功能
  3. 執行 firewall.sh 之後,查詢是否正常?
執行完畢之後,開始處理用戶端功能
  1. 開啟用戶端硬碟,然後依據傳統的網路 debug 流程,確認網路終於通了!
  2. 修改 yum 伺服器,使用 ksu 的 yum 伺服器作為來源
  3. 全系統更新,同時在每日 3 點全系統更新

基本上,將 SNAT 設定妥當後,我們的內網就可以順利連接到 Internet 上囉!

例題 4.4.C:讓你的區網用戶端電腦也能架設網站,修改 /root/firewall.sh,讓它可以具有如下功能:
  1. 只要想連接到本機的 port 888 的,全部重導向到 port 80 上
  2. 只要是來自外部來源 (eth0) 且想要連線到 port 85 的,就導向到 client 那台的 port 80 上!
設定完成後,到 client 端執行如下任務:
  1. 關閉 firewalld 啟動 iptables (當然要先安裝 iptables-services 才行)
  2. 設定防火牆:使用 scp 複製來自 server 的 firewall.sh ,然後修改之後建立自身的防火牆規則:
    • 設定好預設政策,讓 INPUT 成為 DROP 而 OUTPUT 與 FORWARD 成為 ACCEPT
    • 針對 INPUT 前三條規則為 (1)回應封包 (2)放行 lo 界面 (3)放行 icmp 封包
    • 放行你自己的內部區域網路那個網域的連線要求
    • 讓 http 針對整個 Internet 放行
    • 最後讓確定的規則轉存到 /etc/sysconfig/iptables 這個設定檔
    • 重新啟動 iptables 服務,然後觀察規則是否正確
  3. 安裝 httpd 服務,同時到 /var/www/html 建立 index.html 檔案,內容為『 I amd client.lan*.dic.ksu 』
  4. 使用類似 links http://localhost 看看 WWW 服務是否正常?
接下來詢問你的朋友群,或告知你的朋友群,讓他們在他們的用戶端電腦上面執行類似 links http://192.168.254.*/ ,能不能看到你用戶端的顯示?

4.5: 課後練習

  1. (50%)實作題:啟動 Server 作業硬碟 - unit04
    1. 網路參數的設定,請依據底下的方式來設定好你的網路環境:
      1. 因為我們的系統是 clone 來的,因此裡面的網路卡連線會跑掉。所以,請先刪除所有的連線界面後, 再依據底下的要求逐次建立好你的網路環境:
      2. 建立 eth0 為外部的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
        • IPv4 的 IP位址: 172.18.255.*/24 ,其中 * 為老師規定的 IP 尾數
        • gateway 為 172.18.255.254
        • DNS 為 172.16.200.254 以及 168.95.1.1
      3. 使用 teamd 的機制建立內部區域網路的備援功能:
        • team 的界面使用 team0 卡號,且連線名稱請命名為 team0
        • team 使用 activebackup 備援功能,不要使用 loadbalance
        • team 的實體網卡 (team slave) 請使用 eth1 及 eth2 ,且其連線名稱名稱亦請命名為 eth1, eth2
        • 內部網路參數為: 172.19.*.254/24,不需要 gateway
      4. 主機名稱指定為: server*.example.dic
      5. 最終你的主機名稱與 IP 的對應為:
        server*.example.dic	172.18.255.*		別名為 server*
        server254.example.dic	172.18.255.254		別名為 server254
        server.lan*.example.dic	172.19.*.254		別名為 server
        client.lan*.example.dic	172.19.*.1		別名為 client
        
    2. 基本的伺服器作業系統設定行為:
      1. 使用崑山的 FTP 網站作為你的 YUM server 來源,並且清除一次 yum 清單快取
      2. 安裝相關的軟體,至少須安裝 vim-enhanced, bash-completion, net-tools, mailx, wget, links, bind-utils
      3. 全系統自動升級,且每天凌晨 3 點也會自動升級一次。(請寫入 /etc/crontab 為主)
      4. 將 SELinux 修改成為 Enforcing 模式,且未來每次開機都自動為 Enforcing 才行
    3. 實際設定好本機防火牆
      1. 請關閉 firewalld 服務,並且自行安裝、啟動 iptables 服務
      2. 將預設的規則轉存到 /root/firewall.sh 這個檔案內
      3. 首先將全部的規則刪除 (應該有三條指令)
      4. 設定好預設政策,讓 INPUT 成為 DROP 而 OUTPUT 與 FORWARD 成為 ACCEPT
      5. 針對 INPUT 前三條規則為 (1)回應封包 (2)放行 lo 界面 (3)放行 icmp 封包
      6. 放行你自己的內部區域網路那個網域的連線要求
      7. 讓 ssh 只對外部的區網放行,不會對 Internet 放行
      8. 讓 http 針對整個 Internet 放行
      9. 最後讓確定的規則轉存到 /etc/sysconfig/iptables 這個設定檔
      10. 重新啟動 iptables 服務,然後觀察規則是否正確
    4. 實際設定好 Server 的路由功能
      1. 讓核心支援 IP 轉遞的功能
      2. 修改 /root/firewall.sh ,增加刪除 nat 表格的規則與自訂鏈
      3. 增加讓來自內部網路的封包,並預計由 eth0 對外網卡出去的封包,全部偽裝成為 eth0 的 public IP
      4. 在 /etc/sysconfig/iptables-config 當中增加 nf_nat_ftp 及 nf_conntrack_ftp 模組功能
      5. 此功能在開機後依舊能夠順利啟動
    5. 針對 NAT 的設定行為:
      1. 讓由 eth0 進入的封包,想要連線到本機的 port 82 時,重新導向到 172.19.*.1 的 port 80 上面去。
  2. (20%)實作題:啟動 client 作業硬碟
    1. 網路參數的設定,請依據底下的方式來設定好:
      1. 因為我們的系統是 clone 來的,因此裡面的網路卡連線會跑掉。所以,請先刪除所有的連線界面後, 再依據底下的要求逐次建立好你的網路環境:
      2. 建立 eth0 的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
        • IPv4 的 IP位址: 172.19.*.1/24 ,其中 * 為老師規定的 IP 尾數
        • gateway 為 172.19.*.254
        • DNS 為 172.16.200.254 以及 168.95.1.1
      3. 主機名稱指定為: client.lan*.example.dic
      4. 最終你的主機名稱與 IP 的對應為:
        server*.example.dic	172.18.255.*		別名為 server*
        server254.example.dic	172.18.255.254		別名為 server254
        server.lan*.example.dic	172.19.*.254		別名為 server
        client.lan*.example.dic	172.19.*.1		別名為 client
        
    2. 實際設定好本機防火牆
      1. 預設請使用 firewalld 防火牆服務,不要使用 iptables 服務!
      2. 預計放行的服務主要有 ssh 與 http 兩個服務,其他還可能有預設會啟用的 dhcp 用戶端服務。
      3. 查詢 rich rule (man firewalld.richlanguage),確認來自本機同一個 LAN 網段的封包,通通給予放行。
      4. 上述放行的防火牆服務,在下次重新開機後,依舊會存在才行
    3. 啟動內部服務
      1. 安裝名為 httpd 的軟體,同時設定啟動、開機啟動 httpd 這個服處等任務
      2. 撰寫 /var/www/html/index.html 的檔案,內容只須兩行,你的姓名與學號即可。
  3. (30%)簡易問答題: 從具有 GUI 及中文的用戶端 Linux ,使用『 ssh root@172.19.*.254 』登入你的 Server ,之後建立 /root/ans.txt 的檔案,並將底下各題目的答案寫入你 server 當中!
    1. 一般所謂的防火牆,依據達成方式的不同,主要分為那兩種基本的防火牆?
    2. CentOS 7 預設提供那兩種『防火牆服務』呢?
    3. 承上,那達成該種防火牆服務的指令又個別為何呢?
    4. CentOS 7 防火牆使用 Netfilter ,該機制提供了哪三個主要的表格 (tables) 呢?其中上課用到的是那兩個?個別針對哪種主機來進行封包的過濾與重導向?
    5. 針對 Linux 本機的封包進出來說, Netfilter 主要提供的是那一個表格 (table) 的那兩個鏈 (chain) 來管理的?
    6. 那一個指令可以觀察 Netfilter 的預設政策、各鏈的流向與防火牆的規則順序?
    7. 承上,那一個檔案主要就是在紀錄這些設定的?
    8. 針對 ssh 來說,底下的錯誤要怎麼改善?寫下改善後的語法:
      iptables -A INPUT -s 192.168.0.0/16 --dport 22 -j ACCEPT
    9. 在 iptables 的動作中, REJECT 與 DROP 有什麼差別?
    10. 啟動核心的 IP 轉遞功能時,(1)需要修改哪個設定檔? (2)實際上變更的是那一個核心檔案的值?
    11. 所謂的 IP 分享器的 IP 偽裝功能,只要是修改那一個 Netfilter 的表格與鏈?
    12. 所謂的 port mapping 的功能,主要是修改那一個 Netfilter 的表格與鏈?
    13. 承上面兩題,哪個被稱為 SNAT 或 DNAT 呢?
  4. 上傳成績
    1. 請將 Server/Client 的硬碟通通啟動,並且確認兩者間的連線沒有問題;
    2. 在 Server 硬碟上面登入,然後用 root 的身份執行 vbird_server_check_unit ,並依據提示資料填寫你的學號與 IP 尾數
    3. 該程式會偵測你的系統,並且通知你哪個部份可能有問題,你需要持續觀察或者重新處理的部份會交代妥當。
    4. 若一切沒問題,螢幕就會出現如下的字樣,然後你就能夠使用 links 去檢查你的檔案是否有順利的上傳了!
    5. Please use links http://172.18.255.250/upload/unit04 to check your filename