Linux伺服器 Linux伺服器

伺服器建置實務上課教材

伺服器建置實務 > 課程內容 > 第 5 堂課 - 系統防火牆原理與實際設定

第 5 堂課 - 系統防火牆原理與實際設定

上次更新日期 2018/11/04

基本上,伺服器系統還是以軟體沒有問題、程式碼沒有問題為主要的資安解決方案,防火牆只是用來一個預防的方案而已, 也就是說,防火牆的目的是在於預防你沒有預計要放行的服務被攻擊~而不是用來抵擋已經放行的服務啦!這個是很重要的概念。 Linux 防火牆是直接整合在核心當中,效率非常的好!指令也很簡單~就讓我們來玩一玩!

  • 5.1: 什麼是防火牆與防火牆的功能
  • 5.2: CentOS 7 的防火牆服務
  • 5.3: iptables 防火牆的實際建置
  • 5.4: 本日練習
  • 5.5: 課後練習

5.1: 什麼是防火牆與防火牆的功能

基本上,主機系統的防火牆,目的當然就是避免主機系統的某些服務被外來的攻擊程式所影響,因此才會放置一組程式在進行『防火牆』的功能。 那麼有哪些類型的防火牆,以及這些防火牆到底是如何運作的呢?就讓我們來一探究竟~

  • 主機系統的防火牆分類以及運作方式

基本上,主機系統的防火牆軟體,主要分為兩大類:

  • 軟體防火牆:透過某些特定的軟體功能,進行某些功能的抵擋。例如,有種軟體稱為代理伺服器 (proxy),這種軟體只能代理 http 或 https,經過特殊設定則可以進行 ftp 的服務。proxy 還能夠根據使用者傳輸的資料,進行網址列的文字分析,或者是網頁內容的分析, 透過這些分析則可以進行某些資訊的過濾 (例如率除掉某些色情文件等)。除此之外,包括防毒、防木馬軟體,有的也會提供過濾機制。
  • 封包過濾防火牆:例如 Linux 的 iptables 或者是硬體防火牆內建的機制,大多數就是封包過濾。 所謂的封包過濾,就是直接分析 layer 2, layer 3, layer 4 等封包的表頭資料,進行封包上面資訊的放行與否的過濾行為。 這種分析是比較底層的,不是去分析封包內部資料,跟上面的軟體式防火牆不同。

但是,無論何種防火牆,其抵擋的機制大多是設定一堆流程與規則,讓封包要進入到本機前,需要通過這些規則的順序, 以達到放行或者是拒絕的程序。簡單的說,所謂的規則分析流程現象有點像底下的模樣:

防火牆

如上所示,你的防火牆基本上共有 10 個規則,每種規則會針對某個網路封包特性做一些定義,當進入的封包確定符合該規則時, 封包就會被開始動作 (可能是放行,也可能是拒絕,看你的設定而定)。但是,如果進入的封包都沒有符合的規則時, 就會透過『預設政策』來決定是否放行。

  • Linux 常見的封包過濾防火牆

在 Linux 上面,內建的防火牆機制就整合在核心 (作業系統層級),因此效能特別好。Linux 核心內建的防火牆機制,就是透過封包過濾。 因此,我們就針對封包過濾類型的防火牆來做個簡介。

要使用封包過濾行的防火牆,你得要先設定一些『放行或抵擋的規則』才行,這就有點像你要決定中午吃啥一樣, 先列出一些店家,然後開始依序挑選你想要的,找到之後,就會跑去吃,而不會在看該家店後面的其店家了。另外, 也像是你要外出去旅遊時,總得要有些清單列表給你參考,那所謂的防火牆規則就像那一條一條的清單就是了。

底下列出幾條常見的規則,同時請注意分析這些規則的順序喔!不能夠搞混的。

  1. 放行本機的網路界面 (lo, 就是 localhost 那片網卡)
  2. 放行 ICMP 這個封包檢測的功能 (例如 ping 就是其中一種 icmp 封包)
  3. 放行本機自己的回應封包 (就是本機自己向外要求的封包回應訊息,例如去 centos 官網後,官網回傳的訊息)
  4. 放行區域網路連線到自己本機的 ssh 服務要求。
  5. 放行來源為區域網路的所有要求
  6. 拒絕全部的連線
  7. 放行整個 Internet 連線到自己本機的 www 服務要求。

那這些規則是怎麼運用的呢?大致上是如下的分析與應用方式:

  1. 當有任何網路來源對你這部系統發起連線時,就需要通過上面的規則流程測試,而只要有任何一個流程通過, 後面的流程就不會被檢測 (重要的項目排在前面較佳)。
  2. 萬一發起連線的封包並沒有符合任何一條規則時,那系統就會使用預設政策 ( Policy ) 來決定該連線封包是否放行。
  3. 通常建議網路主機的預設政策為丟棄,亦即『關閉所有連線,開放特定服務』的設定機制較佳。
請看上述的流程,並且解析每條連線的通過與不通過的流程:(1. 先分析封包類型、2. 分析來源位址、3. 分析連接的服務)
  1. 對自己『 ping localhost 』會通不會通?用到那條規則?
  2. 『 ssh localhost 』會通不會通?用到那條規則?
  3. 用戶端對我『 ping localhost 』時?
  4. 用戶端對我發起網路連線 (用瀏覽器連線我的 WWW 時)?
  5. 用戶端『 ssh 我的IP 』時?
  6. 我連線到 www.google.com 去搜尋資料時?
  7. 網際網路的用戶想要 ping 我的伺服器時
  8. 網際網路的用戶想要連接到我的 ssh 服務時
  9. 網際網路的用戶想要連接到我的 www 服務時

5.2: CentOS 7 的防火牆服務

為了簡化本機的防火牆設定,所以 CentOS 7 提供了一個新的 firewalld 機制來進行管理。不過,這個機制其實有點麻煩! 因此,我們還是比較傾向於使用舊式的 iptables 指令直接來執行與規劃即可!底下我們就分別來談談如何開啟/關閉這些服務吧!

  • CentOS 7 的防火牆機制

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

事實上,最終 firewalld 還是透過核心的 iptables 來達成防火牆控制。因此,在學習防火牆機制行為上,個人還是建議先摸一下 iptables 較佳。 因為 CentOS 7 預設是使用 firewalld 的服務,而且防火牆服務只能啟用一個!因此,如果想要啟用 iptables 傳統服務,關閉 firewalld 就是必須要進行的任務了。首先,先來觀察一下 firewalld 有沒有啟用吧:

[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 六 2018-11-03 22:56:23 CST; 2min 25s ago
     Docs: man:firewalld(1)
 Main PID: 746 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─746 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

11月 03 22:56:23 pc250.dic.ksu systemd[1]: Starting firewalld - dynamic firewall daemon...
11月 03 22:56:23 pc250.dic.ksu systemd[1]: Started firewalld - dynamic firewall daemon.
11月 03 22:57:21 pc250.dic.ksu firewalld[746]: WARNING: /etc/sysconfig/network-scripts/ifcfg-eth0:..

要注意的是上面出現的特殊字體,第一個特殊字體『enabled』代表開機時會啟用這個服務,第二個特殊字體『 active (running) 』 代表現在正在運作當中。現在讓我們來關閉這個服務,而且讓該服務不會再被啟用吧!

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

11月 03 22:56:23 pc250.dic.ksu systemd[1]: Starting firewalld - dynamic firewall daemon...
11月 03 22:56:23 pc250.dic.ksu systemd[1]: Started firewalld - dynamic firewall daemon.
11月 03 22:57:21 pc250.dic.ksu firewalld[746]: WARNING: /etc/sysconfig/network-scripts/ifcfg-eth0:...
11月 03 23:02:45 pc250.dic.ksu systemd[1]: Stopping firewalld - dynamic firewall daemon...
11月 03 23:02:45 pc250.dic.ksu systemd[1]: Stopped firewalld - dynamic firewall daemon.

關閉了預設的防火牆之後,現在才來安裝舊的服務,同時啟動該服務!方法如下:

# 1. 先來安裝這個服務:
[root@localhost ~]# yum install iptables-services

# 2. 啟動這個服務:
[root@localhost ~]# systemctl start iptables

# 3. 開機也要啟動這個服務:
[root@localhost ~]# systemctl enable iptables
[root@localhost ~]# systemctl status iptables
● iptables.service - IPv4 firewall with iptables
   Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
   Active: active (exited) since 六 2018-11-03 23:06:08 CST; 14s ago
 Main PID: 2605 (code=exited, status=0/SUCCESS)

11月 03 23:06:08 pc250.dic.ksu systemd[1]: Starting IPv4 firewall with iptables...
11月 03 23:06:08 pc250.dic.ksu iptables.init[2605]: iptables: Applying firewall rules: [  OK  ]
11月 03 23:06:08 pc250.dic.ksu systemd[1]: Started IPv4 firewall with iptables.

確認上面兩個特殊字體是 enable 與 active 的,那就代表 iptables 確實是啟動了。如果想要更進一步觀察,可以輸入 iptables-save 來看看情況:

[root@localhost ~]# iptables-save
# Generated by iptables-save v1.4.21 on Sat Nov  3 23:08:18 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [24:2992]
-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 Sat Nov  3 23:08:18 2018
  • 會影響防火牆的許多服務

由於虛擬化的技術被廣泛的使用,因此一部實體主機可以產生多個邏輯上面完全獨立的作業系統。這種方式對於主機硬體資源來說, 可以進行非常多有效的分配。因此,CentOS 7 預設已經啟動了這些虛擬化的服務。問題是,我們的系統原本就是虛擬系統, 因此無須這些服務。同時,這些服務也會產生一些防火牆規則,導致我們的防火牆學習產生一些困擾。

不過,因為我們的系統已經被鳥哥進行過改造,因此你不會有這方面的問題。不過,未來你自己架設 server 時, 其實這個問題是會存在的。為此,我們先依據底下的方式來產生這個問題,然後再來設法解決它囉! 先依序進行底下的任務:

[root@localhost ~]# systemctl start libvirtd
[root@localhost ~]# virsh net-define /usr/share/libvirt/networks/default.xml
[student@localhost ~]$ virsh net-start default
[student@localhost ~]$ virsh net-list
 名稱               狀態     自動啟動  Persistent
----------------------------------------------------------
 default              啟用     no            yes

[student@localhost ~]$ iptables-save
....
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
....

你不難發現,多了一大堆莫名其妙的東西!尤其是那個 virbr0 的怪咖!非常討人厭!那怎麼辦呢?沒關係,我們可以透過底下的方式來處理! 首先,你已經知道『使用 iptables-save 會產生一大堆 virbr0 的鬼東西』,這個是大前提!為了要處理掉這個 virbr0 , 我們就進行底下的動作流程囉!

# 1. 先檢查是否有名為 default 的虛擬化網路界面:
[root@localhost ~]# virsh net-list
 名稱               狀態     自動啟動  Persistent
----------------------------------------------------------
 default            啟用     no            yes

# 2. 開始『關閉』這個虛擬化的網路界面
[root@localhost ~]# virsh net-destroy default
網路 default 已經刪除

# 3. 開始『開機不啟用』這個虛擬化的網路界面
[root@localhost ~]# virsh net-undefine default
網路 default 已經取消定義

# 4. 最終關閉不要的 libvirtd 這個虛擬化軟體囉!
[root@localhost ~]# systemctl stop libvirtd
[root@localhost ~]# systemctl disable libvirtd

# 5. 最後,重新啟動防火牆,再次觀察,應該就會恢復正常囉:
[root@localhost ~]# systemctl restart iptables
[root@localhost ~]# iptables-save
# Generated by iptables-save v1.4.21 on Sat Nov  3 23:29:51 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [15:1412]
-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 Sat Nov  3 23:29:51 2018

上面的練習對你來說,應該還是很重要的!因為,你會一直重複的遇到它!記得,未來有問題,回來這裡檢查看看囉!

5.3: iptables 防火牆的實際建置

從上個小節我們將 iptables 服務啟動,同時關閉了 firewalld 之後,就可以開始來嘗試處理防火牆了。不過,在開始之前, 你還是得要知道一下,所謂的防火牆是個什麼東西!基本上,網路都是『雙向』的,有來有往,因此, 你的防火牆至少就會有兩個大項目,一個是對內 (從外面來的),一個是對外 (從本機主動出去的)。那就來談一談:

  • iptables 針對本機的工作鏈 (chain)

基本上,iptables 至少有三個基本的表格 (table),不過,我們這裡僅探討與本機有關的 filter (過濾) 這個表格就好。 針對本機的這個 filter 表格當中,至少有三條鏈,不過你只需要注意 INPUT, OUTPUT 即可!還有另外一個知道有 FORWARD 就是了。 稍微說明一下如下:

  1. 針對本機的防火牆表格是 filter (過濾) 這個表格
  2. filter 共有三個預設的鏈,分別是 INPUT, OUTPUT, FORWARD
  3. INPUT 任何進入本機使用本機服務的封包 (包括從伺服器端回傳的回應資訊),都會經過這個鏈
  4. OUTPUT 從本機主動發出的封包,包括回應給用戶端的訊息,都會經過這個鏈
  5. FORWARD 沒有進入本機,但是透過本機轉遞 (例如本機為路由器的角色時) 的封包,就會經過這個鏈
  6. 一般來說,在單純的伺服器環境下 (沒有開放讓其他用戶使用本機的 ssh 等本地端服務),只要管制 INPUT 鏈即可,OUTPUT 及 FORWARD 都可以直接放行。
  • 觀察 iptables 的防火牆規則: iptables-save

透過 iptables-save 去觀察防火牆的規則~如下表所示:

[root@localhost ~]# iptables-save
# Generated by iptables-save v1.4.21 on Sun Nov  4 00:19:42 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [22:2596]
-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 Sun Nov  4 00:19:42 2018

上面的規則如何觀察呢?基本上,你要注意到冒號 (:)、以及 -A 即可!底下稍微說明輸出的資訊:

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

在這個觀察中,你先知道星號 (*)、冒號 (:) 與規則順序 (-A INPUT) 即可!後面的相關規則,包括 -p [tcp|icmp]、 -p tcp --dport 22,就是一堆針對 layer 2, 3, 4 所制定的規則。至於最後的動作 (jump) 項目,大概就是接受與否 (-j ACCEPT, -j REJECT)。注意幾個英文字即可喔!

請查閱上面的規則後,說明一下 INPUT 的 5 條規則分別針對什麼項目進行網路的放行與否呢?
  • 清除防火牆規則: iptables -[F|X|Z]

由於防火牆是有規則順序的,因此,常見的處理方法,就是將防火牆所有的規則通通清除,然後再依序一個一個規則加入, 這樣就能夠自動的排列好所有的規則了!如果沒有清除舊規則就加入新規則,那規則順序就會很混亂。清除規則需要寫三個指令, 因為三個指令分別清除的項目為:所有規則、自訂鏈名稱、統計資訊。

依序處理:
  1. 先清除所有的規則 (共有三個指令)
  2. 觀察防火牆規則,看看還有沒有 -A INPUT 出現呢?
  • 設定預設政策: iptables -P INPUT [ACCEPT|DROP]

一般我們會指定的政策 (Policy) 大概都是『拒絕所有,開放特定』的方式,因此,預設的 INPUT 政策, 通常我們會指定為 DROP 的。至於 OUTPUT 與 FORWARD 則先指定為 ACCEPT 即可。

# iptables -P [INPUT|OUTPUT|FORWARD] [ACCEPT|DROP] 
# 定義預設政策 (政策僅能有 ACCEPT 與 DROP 喔!)
依序處理:
  1. 將 INPUT 定義為 DROP
  2. 將 OUTPUT 與 FORWARD 定義為 ACCEPT
  3. 處理完畢請觀察,確定設定沒有問題
  • 使用 iptables 指令處理 Layer 3, 4 的防火牆規則語法

你知道 Layer 3 就是 IP 位址的相關規範,因此所謂的 Layer 3 就是來源與目標的 IP 位址規範。 如果是 Layer 4 的層級時,就會知道應該是要使用 tcp 或 udp 的來源與目標的埠口 (port number)。那如何使用 iptables 來規範呢? 基本上可以參考底下的語法:

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

來練習一下囉:

# 1. 讓 lo 這個內部迴圈測試網路卡為信任網卡:
[root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT

# 2. 讓內部區網來源,假設為 192.168.1.0/24 ,可以完整的進入本機:
[root@localhost ~]# iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

# 3. 讓本機的 http (port 80) 可以對外提供服務:
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 4. 讓 icmp (就是 ping) 可以通行:
[root@localhost ~]# iptables -A INPUT -p icmp -j ACCEPT

# 5. 讓來自區網的來源,可以連線到本機的 ssh 埠口 (port 22):
[root@localhost ~]# iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

# 6. 全部的進入的封包,全部都拒絕:
[root@localhost ~]# iptables -A INPUT -j REJECT

# 7. 最後來觀察一下喔:
[root@localhost ~]# iptables-save

基本上,上面就是常見的防火牆規則制定方式~不過,還是有其他例外的情況~例如透過網路卡! 還是透過某些封包狀態來決定是否放行的依據!

  • 狀態模組: 處理網路卡位址

如果需要使用到 layer2 的管制網路卡,那就得要載入 iptables 的模組 (就是你們常聽的外掛), 使用網卡模組的方法可以使用底下的方式來處理:

# 基本語法:
[root@localhost ~]# iptables [-A INPUT] [[-m mac] [--mac-source aa:bb:cc:dd:ee:ff]] [-j ACCEPT|REJECT|DROP]

# 讓來自 aa:bb:cc:dd:ee:ff 的這張網卡的任何封包,都可以進入到本機:
[root@localhost ~]# iptables -A INPUT -m mace --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT
  • 狀態模組: 處理回應封包

一般來說,我們傳出去的網路封包從對方回傳的時候,都會給予一個確認的回函 (ACK 標籤),我們可以透過這些額外的表頭資料, 得知該封包是否是我們傳出去的回傳資料。既然是我們向外頭要的資料,當然得要讓該連線近來吧!於是, 就可以使用所謂的『封包狀態模組』,也就是 state 這個模組來處理!基本語法如下:

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

其實上面這個規則,對於本機來說,應該算是『最重要的』一個規則了!要有它才有網際網路啦! 一般來說,針對用戶端本機來說,最重要的幾條規則,大概就是:

  • 本機內部 lo 成為信任裝置
  • 針對 icmp 封包讓它進入本機
  • 如果是本身提出的封包,回應封包要予以放行 (ESTABLISHED,RELATED)。

其他的規則大多則是針對本機作為伺服器之用的情況喔!針對用戶端,還真的這三條規則就很厲害了!

請進行底下的幾個防火牆規則的練習 (一定不要在遠端主機進行這些動作!)。此外, 請將底下的規定寫入到名為 /root/firewall.sh 的腳本內喔!
  1. 先將所有的規則、自訂鏈、統計資料全部刪除歸零
  2. 針對政策 (Policy) 設定: INPUT 作為 DROP、其他兩個作為 ACCEPT
  3. 針對 INPUT 的規則設定:
    1. 讓 lo 成為信任網卡
    2. 讓 icmp 封包可以進入本機
    3. 讓本機的回應封包可以進入本機
    4. 檢查你的 gateway 的網卡卡號,將網卡卡號放行
    5. 讓 ssh 只在屬於你的區域網路放行
    6. 將 https 針對 internet 全部放行
    7. 將全部的連線通通拒絕
  4. 將所有的規則設定儲存到 /etc/sysconfig/iptables 設定檔當中。
完成上述的檔案撰寫之後,請依序完成底下的任務:
  1. 執行該檔案『 sh /root/firewall.sh 』
  2. 再以 iptables-save 觀察,所有的防火牆規則是否正確的執行了!
  3. 使用 systemctl restart iptables 重新啟動防火牆,再次 iptables-save 觀察防火牆是否持續存在。

5.4: 本日練習

現在來複習一下今日的動作,作為本日的點名與查驗資訊。請在目前的雲端機器上面完成底下的實做,要完成且讓老師檢查完畢後,才可以離開教室喔!

  1. 請先確認你的網路狀態如同第四堂課的內容!一定要跟第四堂課一樣!否則後續會出現很多問題!
  2. 實際設定好本機防火牆,重複更新你的 /root/firewall.sh 腳本檔案內容:
    1. 先將所有的規則、自訂鏈、統計資料全部刪除歸零
    2. 針對政策 (Policy) 設定: INPUT 作為 DROP、其他兩個作為 ACCEPT
    3. 針對 INPUT 的規則設定:
      1. 讓本機的回應封包可以進入本機
      2. 讓 lo 成為信任網卡
      3. 讓 icmp 封包可以進入本機
      4. 放行你自己的內部區域網路那個網域的所有連線要求
      5. 讓 ssh 只對外部的 172.16.0.0/16 這個區網放行
      6. 檢查你的 gateway 的網卡卡號,將網卡卡號放行
      7. 將 http 針對 internet 全部放行
      8. 將 https 針對 internet 全部放行
      9. 將全部的連線通通拒絕
    4. 將所有的規則設定儲存到 /etc/sysconfig/iptables 設定檔當中。

完成之後請告知老師你的學號與 IP 尾數,老師即可檢測你的設定狀態了。

5.5: 課後練習

請撰寫一個 word 檔案,檔名為:『 unit05-A050cxxx-你的名字.docx 』,內容回答下列問題,然後每週作業上傳到對應的 EP 上面去:

  1. 封包過濾式防火牆系統,主要大多是著重分析 OSI 七層協定的 Layer 2, 3, 4,請問:
    1. Layer 2, Layer 3, Layer 4 主要是什麼封包? (寫下封包名稱,如 ICMP...)
    2. 那上述的封包表頭,主要具有什麼重要的資訊?例如 Layer 3 的 IP 具有來源與目標的什麼這樣。
  2. (1)CentOS 7 提供了哪兩個防火牆的服務?(2)當重複的時候,這兩個以哪一個為主? (3)我們上課時,關閉哪一個?啟動哪一個?
  3. iptables 針對本機設定的預設表格為 filter,這個 filter (1)預設有幾條自訂鏈? (2)針對本機的管理主要是針對哪一條鏈去設計規則?
  4. 我們說,針對最陽春的本機防火牆設定,大概指的是哪三條設定?寫下來。

同場加映:不用上傳的資料,請 google 一下打字時,手指與鍵盤指法的對應,然後自由練習底下的資訊:

  • 小寫的 a~z (abcdefg...xyz) ,共打 10 次
  • 小寫的 0~9,a~z (012..89abcdefg...xyz) ,共打 10 次
  • 不要啟動大寫燈,用組合按鍵輸入 A-Z (ABCD...XYZ),共 10 次

每天上課各練一次,最慢 10 天,你的打字就會嚇嚇叫了!