如何在 Linux 中配置 firewalld 規則
導讀 | 防火牆對於控制進出 伺服器的網路流量至關重要。它能夠定義一組防火牆規則來控制主機上的傳入流量。本文介紹如何新增、刪除、啟用和禁用防火牆規則和區域。 |
“firewalld”是firewall daemon。它提供了一個動態管理的防火牆,帶有一個非常強大的過濾系統,稱為 Netfilter,由 Linux 核心提供。
FirewallD 使用zones和services的概念,而 iptables 使用chain和rules。與 iptables 相比,“FirewallD”提供了一種非常靈活的方式來處理防火牆管理。
每個zones都可以按照指定的標準進行配置,以根據你的要求接受或拒絕某些服務或埠,並且它可以與一個或多個網路介面相關聯。預設區域為public區域。
[yijiFirewalld zones[/yiji]
以下
列出 FirewallD 提供的zones。執行以下
以列出zones:
[root@server1 ~]# firewall-cmd --get-zones block dmz drop external home internal public trusted work
- block: 對於 IPv4,任何傳入連線都會被 icmp-host-prohibited 訊息拒絕,對於 IPv6 則是 icmp6-adm-prohibited。
- dmz:應用於你的DMZ區域的計算機,這些計算機可公開訪問,但對內部網路的訪問受到限制。僅接受選定的傳入連線。
- drop:任何傳入連線都將在沒有任何通知的情況下被丟棄。只允許傳出連線。
- external:用於在系統中充當路由器時啟用 NAT 偽裝的外部網路。只允許選定的傳入連線。
- home:用於家庭網路。僅接受選定的傳入連線。
- internal:用於內部網路,網路上的其他系統通常是可信任的。僅接受選定的傳入連線。
- public:用於公共區域,僅接受選定的傳入連線。
- trusted:接受所有網路連線。
- work:用於工作區域,同一網路上的其他計算機大多受信任。僅接受選定的傳入連線。
Firewalld 的service配置是預定義的服務。要列出可用的服務模組,請執行以下命令:
[root@server1 ~]# firewall-cmd --get-services
Firewalld 使用兩個獨立的配置,即臨時設定和永久設定:
- 臨時設定: 臨時設定不會在系統重啟時保持不變。這意味著臨時設定不會自動儲存到永久設定中。
- 永久設定: 永久設定會儲存在配置檔案中,將在每次重新啟動時載入併成為新的臨時設定。
Firewalld預設安裝在 7/8中,下面命令時如何啟用或者停用firewalld:
# 啟用Firewalld [root@server1 ~]# systemctl start firewalld # 禁用Firewalld [root@server1 ~]# systemctl stop firewalld # 開機啟動 [root@server1 ~]# systemctl enable firewlald # 禁止開機啟動 [root@server1 ~]# systemctl disable firewalld
檢視firewlald的狀態:
[root@server1 ~]# systemctl status firewalld 或者 [root@server1 ~]# firewall-cmd --state running
Firewalld 為每個區域提供不同級別的安全性,公共區域設定為預設區域。下面命令檢視預設區域:
[root@server1 ~]# firewall-cmd --get-default-zone public
下面命令檢視預設區域的配置:
[root@server1 ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client ntp ssh ports: 2222/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
透過使用選項"--zone”和“--change-interface”的組合,可以輕鬆更改zone中的介面。例如,要將“ens33”介面分配給“home”區域,請執行以下命令:
[root@server1 ~]# firewall-cmd --zone=home --change-interface=ens33 success [root@server1 ~]# firewall-cmd --zone=home --list-all home (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: cockpit dhcpv6-client mdns samba-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
要檢視所有活動的zone,請執行以下命令:
[root@server1 ~]# firewall-cmd --get-active-zones home interfaces: ens33 public interfaces: ens160
要更改預設zone,請使用以下命令。例如,要將預設區域更改為 home,請執行以下命令:
[root@server1 ~]# firewall-cmd --set-default-zone=home
要找出與 ens160 介面關聯的區域,請執行以下命令:
[root@server1 ~]# firewall-cmd --get-zone-of-interface=ens160 public
要建立新zone,請使用以下命令。例如,要建立一個名為“test”的新區域,並永久生效,請執行:
[root@server1 ~]# firewall-cmd --permanent --new-zone=test success [root@server1 ~]# firewall-cmd --reload success
開啟特定埠允許使用者從外部訪問系統,這代表了安全風險。因此,僅在必要時為某些服務開啟所需的埠。
要獲取當前區域中開放的埠列表,請執行以下命令:
[root@server1 ~]# firewall-cmd --list-ports 2222/tcp
下面例項將特定埠永久新增到列表中:
[root@server1 ~]# firewall-cmd --permanent --add-port=8080/tcp success [root@server1 ~]# firewall-cmd --reload success
同樣,要刪除特定埠,請執行以下命令:
[root@server1 ~]# firewall-cmd --remove-port=8080/tcp success
可以使用以下命令每次確認埠是否已新增或刪除:
[root@server1 ~]# firewall-cmd --list-ports
如果要為特定區域開放埠,例如,以下命令將為 home 區域開啟埠 80:
[root@server1 ~]# firewall-cmd --permanent --zone=home --add-port=80/tcp success [root@server1 ~]# firewall-cmd --reload success
同樣,要從開放的埠中刪除特定區域的特定埠,請執行:
[root@server1 ~]# firewall-cmd --zone=home --remove-port=80/tcp success
Firewalld 服務配置是預定義的服務,如果啟用了服務,則會自動載入。使用預定義服務使使用者可以更輕鬆地啟用和禁用對服務的訪問。
預定義的服務配置檔案位於
/usr/lib/firewalld/services
目錄中。
Firewalld的服務,你不需要記住任何埠,並且可以一次性允許所有埠。
例如,執行以下命令允許 samba 服務。samba 服務需要啟用以下一組埠:“139/tcp 和 445/tcp”以及“137/udp 和 138/udp”。
新增'samba'服務後,所有埠都會同時啟用,因為所有埠資訊都在samba服務配置中。下面是Firewalld中預定義的samba的服務配置檔案:
[root@server1 ~]# cat /usr/lib/firewalld/services/samba.xml
下面是在home區域放行samba服務:
[root@server1 ~]# firewall-cmd --permanent --zone=home --add-service=samba success [root@server1 ~]# firewall-cmd --reload success
要獲取有關 samba 服務的更多資訊,請執行以下命令:
[root@server1 ~]# firewall-cmd --info-service=samba samba ports: 137/udp 138/udp 139/tcp 445/tcp protocols: source-ports: modules: netbios-ns destination:
要一次新增多個服務,請執行以下命令。例如,要新增 http 和 https 服務,請執行以下命令:
[root@server1 ~]# firewall-cmd --permanent --zone=home --add-service={http,https} success [root@server1 ~]# firewall-cmd --reload success
埠轉發是一種將任何傳入網路流量從一個埠轉發到另一個內部埠或另一臺機器上的外部埠的方法。
注意:埠轉發必須開啟IP偽裝。使用下面顯示的命令為
external
區域啟用偽裝。
[root@server1 ~]# firewall-cmd --permanent --zone=external --add-masquerade
要檢查是否為區域啟用了 IP 偽裝,請執行以下命令:
[root@server1 ~]# firewall-cmd --zone=external --query-masquerade yes
顯示yes,表示已經開啟偽裝。
要將埠重定向到同一系統上的另一個埠,例如:將80埠的所有資料包重定向到8080埠:
[root@server1 ~]# firewall-cmd --permanent --zone=external --add-forward-port=port=80:proto=tcp:toport=8080 success
如果要將流量轉發到另一臺伺服器,例如:將所有 80 埠的資料包重定向到 IP 為 10.0.0.75 的伺服器上的 8080 埠:
[root@server1 ~]# firewall-cmd --permanent --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.0.0.75 success
例如,要允許來自特定源地址的流量,僅允許從特定子網連線到伺服器,請執行以下命令:
[root@server1 ~]# firewall-cmd --permanent --zone=home --add-source=192.168.1.0/24 success
富規則允許使用易於理解的命令建立更復雜的防火牆規則,但豐富的規則很難記住,可以檢視手冊
man firewalld.richlanguage
並找到示例。
富規則的一般規則結構如下:
rule [source] [destination] service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port [log] [audit] [accept|reject|drop|mark]
要允許來自地址 192.168.0.0/24 的訪問,請執行以下命令:
[root@server1 ~]# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" accept' success
要允許來自地址 192.168.0.0/24 的連線訪問 ssh 服務,請執行以下命令:
[root@server1 ~]# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name="ssh" log prefix="ssh" level="info" accept' success
要拒絕來自192.168.10.0/24的流量訪問ssh服務,請執行以下命令:
[root@server1 ~]# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port=22 protocol=tcp reject' success
要刪除任何富規則,請使用
--remove-rich-rule
選項,下面使用
--list-rich-rules
列出富規則,然後刪除掉富規則:
[root@server1 ~]# firewall-cmd --zone=public --list-rich-rules rule family="ipv4" source address="192.168.0.0/24" accept rule family="ipv4" source address="192.168.0.0/24" service name="ssh" log prefix="ssh" level="info" accept rule family="ipv4" source address="192.168.10.0/24" port port="22" protocol="tcp" reject [root@server1 ~]# firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.0.0/24" accept' success [root@server1 ~]# firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name="ssh" log prefix="ssh" level="info" accept' success [root@server1 ~]# firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="22" protocol="tcp" reject' success
Direct規則類似於 iptables 命令,對於熟悉 iptables 命令的使用者很有用。或者,您可以編輯
/etc/firewalld/direct.xml
檔案中的規則並重新載入防火牆以啟用這些規則。Direct規則主要由服務或應用程式用來新增特定的防火牆規則。
以下Direct規則將在伺服器上開啟埠 8080:
[root@server1 ~]# firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 8081 -j ACCEPT success [root@server1 ~]# firewall-cmd --reload success
要列出當前區域中的Direct規則,請執行:
[root@server1 ~]# firewall-cmd --direct --get-all-rules ipv4 filter INPUT 0 -p tcp --dport 8080 -j ACCEPT ipv4 filter INPUT 0 -p tcp --dport 8081 -j ACCEPT
使用下面命令刪除Direct規則:
[root@server1 ~]# firewall-cmd --direct --get-all-rules ipv4 filter INPUT 0 -p tcp --dport 8080 -j ACCEPT ipv4 filter INPUT 0 -p tcp --dport 8081 -j ACCEPT [root@server1 ~]# firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 0 -p tcp --dport 8080 -j ACCEPT success [root@server1 ~]# firewall-cmd --reload success
如何清空一個表的鏈?下面是語法和例項:
firewall-cmd --direct --remove-rules ipv4 [table] [chain]
[root@server1 ~]# firewall-cmd --permanent --direct --remove-rules ipv4 filter INPUT success [root@server1 ~]# firewall-cmd --reload success [root@server1 ~]# firewall-cmd --direct --get-all-rules
本文帶你瞭解了 firewalld 的完整用法,例如zones、允許/拒絕服務和埠、埠轉發、Rich Rules、Direct規則等。
本文原創地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2783915/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- firewalld:direct規則
- linux中的firewalld防火牆配置Linux防火牆
- 在 Rocky Linux 中,你可以使用 firewalld 來管理防火牆規則。Linux防火牆
- 如何在 Linux 系統中配置 firewalld 防火牆策略Linux防火牆
- 在Linux中,如何配置防火牆和安全規則?Linux防火牆
- windows/Linux 防火牆安裝配置規則WindowsLinux防火牆
- 【Linux】UDEV SCSI規則在Oracle Linux上配置ASMLinuxdevOracleASM
- Linux 防火牆配置(iptables和firewalld)詳細教程。Linux防火牆
- Firewalld 白名單配置方法
- 在Linux中,如何在Linux中安裝和配置KVM?Linux
- 如何在Excel表格中快速輸入有規則的資料Excel
- 靜態路由規則配置路由
- LINUX 防火牆 firewalldLinux防火牆
- linux中BASH變數的設定規則Linux變數
- 在Linux中,如何設定防火牆規則?Linux防火牆
- Nginx的location配置規則梳理Nginx
- ESLint: 規則配置覆蓋EsLint
- Orace RAC安裝-Oracle Linux 5和6 ASM的UDEV SCSI規則配置-測試規則(udevtest)OracleLinuxASMdev
- 在 Linux 中如何編寫基本的 udev 規則Linuxdev
- 防火牆基礎Firewalld命令配置防火牆
- 如何在 Linux 中安裝、配置和使用 Fish Shell?Linux
- 紅帽系的linux系統中防火牆--firewalldLinux防火牆
- Linux系統中firewalld防火牆常用的操作命令Linux防火牆
- 配置ModSecurity防火牆與OWASP規則防火牆
- 【java規則引擎】規則引擎RuleBase中利用觀察者模式Java模式
- MySQL中的排序規則MySql排序
- 在Linux中,如何在Linux中進行配置管理和自動化部署?Linux
- Nginx URL重寫規則配置詳解Nginx
- 記一次eslint規則配置EsLint
- go Casbin配置檔案,以及匹配規則Go
- Docker 埠對映防火牆規則配置Docker防火牆
- Linux——防火牆、SELinux規則Linux防火牆
- LINUX命令列書寫規則Linux命令列
- JS中this的繫結規則JS
- JavaScript中this的繫結規則JavaScript
- web前端中的命名規則Web前端
- jQuery中$符號規則(7)jQuery符號
- JS中的"=="轉換規則JS