
本文介紹如何通過 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
)
$ sudo firewall-cmd --state
running
firewalld 服務支援任意數量的域。每個域都可以擁有獨立的配置和防護規則。一台 Fedora 工作站的外部接口(例如 WIFI 或有線網卡)其預設域為
FedoraWorkstation
。
要看有哪些域是激活狀态,可以使用
-–get-active-zones
選項。在本示例中,有兩個網卡,有線以太網卡
wlp2s0
和虛拟(libvirt)橋接網卡
virbr0
:
$ sudo firewall-cmd --get-active-zones
FedoraWorkstation
interfaces: wlp2s0
libvirt
interfaces: virbr0
如果想看看預設域是什麼,或是直接查詢所有域:
$ sudo firewall-cmd --get-default-zone
FedoraWorkstation
$ sudo firewall-cmd --get-zones
FedoraServer FedoraWorkstation block dmz drop external home internal libvirt public trusted work
查詢預設域中防火牆放行了哪些系統,使用
-–list-services
選項。下例給出了一個定制系統的查詢結果,你可以看到與常見的結果有些不同。
$ sudo firewall-cmd --list-services
dhcpv6-client mdns samba-client ssh
該系統對外開啟了四個服務。每個服務都對應一個常見端口。例如
ssh
服務對應 22 端口。
如果要檢視目前域中防火牆還開啟了哪些端口,可以使用
--list-ports
選項。當然,你也可以随時對其他域進行查詢:
$ sudo firewall-cmd --list-ports --zone=FedoraWorkstation
1025-65535/udp 1025-65535/tcp
結果表明,從 1025 到 65535 端口(包含 UDP 和 TCP)預設都是開啟的。
修改域、端口及服務
以上的配置都是預先設計好的防火牆政策。是為了確定新手使用者安裝的應用都能夠正常通路網絡。如果你确定自己心裡有數,想要一個保護性更強的政策,可以将接口放入
FedoraServer
域,明确禁止所有端口的通路。(警告:如果你的伺服器之前是聯網狀态,這麼做可能會導緻連接配接中斷,那你就得到機房裡去修改更多的配置項!)
$ sudo firewall-cmd --change-interface=<ifname> --zone=FedoraServer
success
本文并不讨論如何制定防火牆政策,Fedora 社群裡已經有很多讨論了。你大可以按照自身需要來修改配置。
如果你想要開放某個服務的常見端口,可以将該服務加入預設域(或使用
--zone
指定一個不同的域)。還可以一次性将其加入多個域。下例開放了 HTTP 和 HTTPS 的常見端口 80、443:
$ sudo firewall-cmd --add-service=http --add-service=https
success
并非所有的服務都有預設端口,不過大部分都是有的。使用
-–get-services
選項可以檢視完整清單。
如果你想指定某個特定端口号,可以直接用數字和協定進行配置。(多數情況下,
-–add-service
和
-–add-port
這兩個選項是合在一起使用的)下例開啟的是 UDP 協定的網絡啟動服務:
$ sudo firewall-cmd --add-port=67/udp
success
重要:如果想要在系統重新開機或是 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中國 榮譽推出