在 Fedora 命令行下玩轉防火牆

在 Fedora 命令行下玩轉防火牆 | Linux 中國

本文介紹如何通過 firewall-cmd 命令修改防火牆的配置。-- Paul W. Frields(作者)

網絡防火牆,顧名思義:為了阻止不需要的網絡連接而設置的防護性屏障。在與外界建立連接或是提供網絡服務時常常會用到。例如,在學校或是咖啡廳裡使用筆記本電腦時,你一定不想某個陌生人窺探你的電腦。

每個 Fedora 系統都內置了一款防火牆。這是 Linux 內核網絡功能的一部分。本文介紹如何通過 firewall-cmd 命令修改防火牆的配置。

網絡基礎

本文並不教授計算機網絡的 所有知識 ,但還是會簡單介紹一些網絡基礎。

網絡中的所有計算機都有一個 IP 地址,可以把它想象成一個郵箱地址,有了郵箱地址,郵件才知道發往何處。每臺計算機還會擁有一組端口,端口號範圍從 0 到 65535。同樣的,你可以把這些端口想象成用來連接郵箱地址的連接點。

通常情況下,端口會是一個標準端口號或是根據應用程序的應答要求選定的一個端口範圍。例如,一臺 Web 服務器通常會保留 80 端口用於 HTTP 通信,443 端口用於 HTTPS。小於 1024 的端口主要用於系統或常見用途,1024-49151 端口是已經註冊的,49152 及以上端口多為臨時使用(只限短時間使用)。

互聯網傳輸中最常見的兩個協議, TCP 和 UDP 。當要傳輸的數據很重要,不能有丟包時,就使用 TCP 協議,如果數據包沒有按順序到達,還需要重組為正確的順序。UDP 協議則更多用於對時間敏感的服務,為了保證時效性,有時允許丟失部分數據。

系統中運行的應用,例如 Web 服務器,會保留一些端口(例如上文提到的 80 和 443)。在網絡傳輸過程中,主機會為傳輸的兩端建立一個鏈接,一端是源地址和源端口,另一端是目的地址和目的端口。

網絡防火牆就是基於地址、端口及其他標準的一組規則集,來對網絡數據的傳輸進行屏蔽或阻斷的。通過 firewall-cmd 命令,我們就可以查看或修改防火牆的工作配置。

防火牆域(zone)

為了驗證防火牆是否開啟,使用 firewall-cmd 命令,輸入時要加上 sudo 。(通常,在運行了 PolicyKit 的環境中,你也可以不加 sudo)

<code>$ sudo firewall-cmd --state
running/<code>

firewalld 服務支持任意數量的域。每個域都可以擁有獨立的配置和防護規則。一臺 Fedora 工作站的外部接口(例如 WIFI 或有線網卡)其默認域為 FedoraWorkstation。

要看有哪些域是激活狀態,可以使用 -–get-active-zones 選項。在本示例中,有兩個網卡,有線以太網卡 wlp2s0 和虛擬(libvirt)橋接網卡 virbr0:

<code>$ sudo firewall-cmd --get-active-zones
FedoraWorkstation
  interfaces: wlp2s0
libvirt
  interfaces: virbr0/<code>

如果想看看默認域是什麼,或是直接查詢所有域:

<code>$ sudo firewall-cmd --get-default-zone
FedoraWorkstation
$ sudo firewall-cmd --get-zones
FedoraServer FedoraWorkstation block dmz drop external home internal libvirt public trusted work/<code>

查詢默認域中防火牆放行了哪些系統,使用 -–list-services 選項。下例給出了一個定製系統的查詢結果,你可以看到與常見的結果有些不同。

<code>$ sudo firewall-cmd --list-services
dhcpv6-client mdns samba-client ssh/<code>

該系統對外開啟了四個服務。每個服務都對應一個常見端口。例如 ssh 服務對應 22 端口。

如果要查看當前域中防火牆還開啟了哪些端口,可以使用 --list-ports 選項。當然,你也可以隨時對其他域進行查詢:

<code>$ sudo firewall-cmd --list-ports --zone=FedoraWorkstation
1025-65535/udp 1025-65535/tcp/<code>

結果表明,從 1025 到 65535 端口(包含 UDP 和 TCP)默認都是開啟的。

修改域、端口及服務

以上的配置都是預先設計好的防火牆策略。是為了確保新手用戶安裝的應用都能夠正常訪問網絡。如果你確定自己心裡有數,想要一個保護性更強的策略,可以將接口放入 FedoraServer 域,明確禁止所有端口的訪問。(警告:如果你的服務器之前是聯網狀態,這麼做可能會導致連接中斷,那你就得到機房裡去修改更多的配置項!)

<code>$ sudo firewall-cmd --change-interface=<ifname> --zone=FedoraServer
success/<ifname>/<code>

本文並不討論如何制定防火牆策略,Fedora 社區裡已經有很多討論了。你大可以按照自身需要來修改配置。

如果你想要開放某個服務的常見端口,可以將該服務加入默認域(或使用 --zone 指定一個不同的域)。還可以一次性將其加入多個域。下例開放了 HTTP 和 HTTPS 的常見端口 80、443:

<code>$ sudo firewall-cmd --add-service=http --add-service=https
success/<code>

並非所有的服務都有默認端口,不過大部分都是有的。使用 -–get-services 選項可以查看完整列表。

如果你想指定某個特定端口號,可以直接用數字和協議進行配置。(多數情況下,-–add-service 和 -–add-port 這兩個選項是合在一起使用的)下例開啟的是 UDP 協議的網絡啟動服務:

<code>$ sudo firewall-cmd --add-port=67/udp
success/<code>

重要:如果想要在系統重啟或是 firewalld 服務重啟後,配置仍然生效,必須在命令中加上 -–permanent 選項。本文中的例子只是臨時修改了配置,下次遇到系統重啟或是 firewalld 服務重啟,這些配置就失效了。

以上只是 firewall-cmd 和 firewalld 服務諸多功能中的一小部分。firewalld 項目的 主頁 還有更多信息值得你去探索和嘗試。


via: https://fedoramagazine.org/control-the-firewall-at-the-command-line/

作者: Paul W. Frields 選題: lujun9972 譯者: tinyeyeser 校對: wxy

本文由 LCTT 原創編譯, Linux中國 榮譽推出


分享到:


相關文章: