如何使用 firewall-cmd 管理網路服務

2020-06-03 09:09:00

在上一篇文章中,我們探討了如何在 Fedora 中。

現在你將看到如何“新增”、“刪除”和“列出”服務、協定和埠,以便“阻止”或“允許”它們。

簡短回顧

首先,最好檢查一下防火牆的狀態,看它是否正在執行。如我們先前所學,你可以使用狀態選項(firewall-cmd ‐‐state)來得到。

下一步是獲取網路介面適用的zone。例如,我使用的桌面有兩個網路介面:一個物理介面(enp0s3),代表我實際的網絡卡,和虛擬介面(virbr0),它由 KVM 等虛擬化軟體使用。要檢視哪些域處於活動狀態,請執行 firewall-cmd ‐‐get-active-zones

現在,你知道了你感興趣的域,可以使用 firewall-cmd ‐‐info-zone=FedoraWorkstation 這樣的命令列出該域的規則。

讀取區域資訊

要顯示特定域的資訊,請執行 firewall-cmd ‐‐zone=ZoneName ‐‐list-all,或使用以下命令顯示預設域的資訊:

[dan@localhost ~]$ firewall-cmd --list-allFedoraWorkstation (active)target: defaulticmp-block-inversion: nointerfaces: enp0s3sources:services: dhcpv6-client mdns samba-client sshports: 1025-65535/udp 1025-65535/tcpprotocols:masquerade: noforward-ports:source-ports:icmp-blocks:rich rules:

現在,讓我們檢視輸出。第一行表明以下資訊關聯的域以及該域當前是否在使用中。

target: default:告訴我們這是預設域。可以通過 ‐‐set-default-zone=ZoneName‐‐get-default-zone 設定或獲取。

icmp-block-inversion 表明是否阻止 ICMP 請求。例如,如果機器響應來自網路上其他機器的 ping 請求。

interfaces 欄位顯示接受此域的所有介面。

處理服務、埠和協定

現在,重點關注 servicesportsprotocols 所在行。預設情況下,防火牆將阻止所有埠、服務和協定,而只允許列出的。

在這裡,你可以看到允許的服務是非常基本的用戶端服務。例如,存取網路上的共用資料夾(samba-client)、與 DNS 伺服器通訊或通過 SSH(ssh 服務)連線到計算機。你可以將 service 視為與埠組合的協定,例如 ssh 服務使用 SSH 協定,並且按照慣例使用 22 埠。通過允許 ssh 服務,你實際上所做的就是允許傳入的連線在預設 22 埠上使用 SSH 協定。

請注意,根據經驗,名稱中帶有 client 字樣的服務是指傳出連線,也就是你使用你的 IP 作為源對外部的連線,與之相反的是 ssh 服務,比如,它將接受傳入連線(監聽來自外部的連線)。

你可以在檔案 /etc/services 中查詢服務。例如,如果你想知道這些服務使用什麼埠和協定:

[dan@localhost ~]$ cat /etc/services | grep sshssh 22/tcp # The Secure Shell (SSH) Protocolssh 22/udp # The Secure Shell (SSH) Protocol

你可以看到 SSH 同時使用 TCP 和 UDP 的 22 埠。此外,如果你希望檢視所有可用的服務,只需使用 firewall-cmd --get-services

開啟埠

如果要阻止埠、服務或協定,請確保在此處未列出它們。展開來說,如果要允許服務,那麼需要將它新增到列表中。

假設你要開啟 5000 埠用於 TCP 連線。為此,請執行:

sudo firewall-cmd --zone=FedorwaWorkstation --permanent --add-port=5000/tcp

請注意,你需要指定規則適用的域。新增規則時,還需要如上指定它是 tcp 還是 udp 埠。--permanent 引數將規則設定為即使系統重新啟動後也可以保留。

再次檢視你所在區域的資訊:

[dan@localhost ~]$ firewall-cmd --list-allFedoraWorkstation (active)target: defaulticmp-block-inversion: nointerfaces: enp0s3sources:services: dhcpv6-client mdns samba-client sshports: 1025-65535/udp 1025-65535/tcp 5000/tcpprotocols:masquerade: noforward-ports:source-ports:icmp-blocks:rich rules:

類似地,如果你想從列表刪除該埠,請執行:

sudo firewall-cmd --zone=FedorwaWorkstation --permanent --remove-port=5000/tcp

相同的 remove‐‐remove-protocol‐‐remove-service) 和 add‐‐add-protocol‐‐add-service)選項同樣適用於服務協定