如何使用 firewall-cmd 管理網絡服務 | Linux 中國現在你將看到如何“添加”、“刪除”和“列出”服務、協議和端口,以便“阻止”或“允許”它們。
https://linux.cn/article-12276-1.html
作者:Dan01
譯者:geekpi

在上一篇文章中,我們探討了如何在 Fedora 中 用命令行控制防火牆

現在你將看到如何“添加”、“刪除”和“列出”服務、協議和端口,以便“阻止”或“允許”它們。

如何使用 firewall-cmd 管理網絡服務 | Linux 中國

簡短回顧

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

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

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

如何使用 firewall-cmd 管理網絡服務 | Linux 中國

讀取區域信息

要顯示特定域的信息,請運行 firewall-cmd ‐‐zone=ZoneName ‐‐list-all,或使用以下命令顯示默認域的信息:
``` 1. [dan@localhost ~]$ firewall-cmd --list-all
2. FedoraWorkstation (active)
3. target: default
4. icmp-block-inversion: no
5. interfaces: enp0s3
6. sources:
7. services: dhcpv6-client mdns samba-client ssh
8. ports: 1025-65535/udp 1025-65535/tcp
9. protocols:
10. masquerade: no
11. forward-ports:
12. source-ports:
13. icmp-blocks:
14. rich rules:

現在,讓我們查看輸出。第一行表明以下信息關聯的域以及該域當前是否在使用中。

`target: default`:告訴我們這是默認域。可以通過 `‐‐set-default-zone=ZoneName` 和 `‐‐get-default-zone` 設置或獲取。

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

`interfaces` 字段顯示接受此域的所有接口。

![如何使用 firewall-cmd 管理網絡服務 | Linux 中國](https://img.chainnews.com/material/images/96b10e70c4f99f2a60c8d0577bbdc27f.svg)

處理服務、端口和協議

現在,重點關注 `services`、`ports` 和 `protocols` 所在行。默認情況下,防火牆將阻止所有端口、服務和協議,而只允許列出的。

在這裏,你可以看到允許的服務是非常基本的客戶端服務。例如,訪問網絡上的共享文件夾(`samba-client`)、與 DNS 服務器通信或通過 SSH (`ssh` 服務)連接到計算機。你可以將 `service` 視爲與端口組合的協議,例如 `ssh` 服務使用 SSH 協議,並且按照慣例使用 22 端口。通過允許 `ssh` 服務,你實際上所做的就是允許傳入的連接在默認 22 端口上使用 SSH 協議。

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

你可以在文件 `/etc/services` 中查找服務。例如,如果你想知道這些服務使用什麼端口和協議:
```      1. [dan@localhost ~]$ cat /etc/services | grep ssh
      2. ssh 22/tcp # The Secure Shell (SSH) Protocol
      3. ssh 22/udp # The Secure Shell (SSH) Protocol

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

如何使用 firewall-cmd 管理網絡服務 | Linux 中國

打開端口

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

假設你要打開 5000 端口用於 TCP 連接。爲此,請運行:
``` 1. sudo firewall-cmd --zone=FedorwaWorkstation --permanent --add-port=5000/tcp

請注意,你需要指定規則適用的域。添加規則時,還需要如上指定它是 `tcp` 還是 `udp` 端口。`--permanent` 參數將規則設置爲即使系統重啓後也可以保留。

再次查看你所在區域的信息:
```      1. [dan@localhost ~]$ firewall-cmd --list-all
      2. FedoraWorkstation (active)
      3. target: default
      4. icmp-block-inversion: no
      5. interfaces: enp0s3
      6. sources:
      7. services: dhcpv6-client mdns samba-client ssh
      8. ports: 1025-65535/udp 1025-65535/tcp 5000/tcp
      9. protocols:
      10. masquerade: no
      11. forward-ports:
      12. source-ports:
      13. icmp-blocks:
      14. rich rules:

類似地,如果你想從列表刪除該端口,請運行:
``` 1. sudo firewall-cmd --zone=FedorwaWorkstation --permanent --remove-port=5000/tcp

```

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


via: https://fedoramagazine.org/how-to-manage-network-services-with-firewall-cmd/

作者:dan01 選題:lujun9972 譯者:geekpi 校對:wxy

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

如何使用 firewall-cmd 管理網絡服務 | Linux 中國

來源鏈接:mp.weixin.qq.com