CentOS 7 中配置Firewall規則


1. 防火牆簡介

動態防火牆后台程序  firewalld 提供了一個 動態管理的防火牆,用以支持網絡  zones” ,以分配對一個網絡及其相關鏈接和界面一定程度的信任。它具備對 IPv4和 IPv6 防火牆設置的支持。它支持以太網橋,並有分離運行時間和永久性配置選擇。它還具備一個通向服務或者應用程序以直接增加防火牆規則的接口。

2. 了解防火牆

一個圖像化的配置工具, firewall-config,用於配置 firewalld:它依次用 iptables工具 與執行數據包篩選的內核中的 Netfilter 通信,
使用圖像化的  firewall-config 工具,按下 Super 鍵進入活動總覽,點擊 firewall,然后按下 Enter。firewall-config 工具就出現了。您將被提示輸入管理員密碼。
firewall-config 工具里有一個標記為 Configuration 的下拉菜單,可以在 運行時間 和 永久兩種模式之間進行選擇。要注意,如果您選擇了 Permanent ,在左上角會出現一排附加的圖標。因為不能在運行模式下改變一個服務參數,所以這些圖標僅在永久配置模式中出現。
由  firewalld 提供的是動態的防火牆服務,而非靜態的。因為配置的改變可以隨時隨地立刻執行,不再需要保存或者執行這些改變。現行網絡連接的意外中斷不會發生,正如防火牆的所有部分都不需要重新下載。
提供命令行客戶端, firewall-cmd,用於進行永久性或非永久性運行時間的改變,正如在 man firewall-cmd(1)所解釋的一樣。永久性改變需要按照 firewalld(1) 手冊頁的解釋來進行。注意, firewall-cmd 命令可以由 root 用戶運行,也可以由管理員用戶——換言之, wheel 群體的成員運行。在后一種情況里,命令將通過 polkit 進程來授權。
firewalld 的配置儲存在  /usr/lib/firewalld/ 和  /etc/firewalld/ 里的各種 XML 文件里,這樣保持了這些文件被編輯、寫入、備份的極大的靈活性,使之可作為其他安裝的備份等等。
其他應用程序可以使用 D-bus 和  firewalld 通信。

3. 比較 system-config-firewall 以及 iptables 的 firewalld

firewalld 和  iptables service 之間最本質的不同是:
  • iptables service 在 /etc/sysconfig/iptables 中儲存配置,而 firewalld 將配置儲存在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各種 XML 文件里,。要注意,當 firewalld 在Red Hat Enterprise Linux上安裝失敗時, /etc/sysconfig/iptables文件就不存在。
  • 使用  iptables service,每一個單獨更改意味着清除所有舊有的規則和從 /etc/sysconfig/iptables里讀取所有新的規則,然而使用 firewalld 卻不會再創建任何新的規則;僅僅運行規則中的不同之處。因此,firewalld 可以在運行時間內,改變設置而不丟失現行連接。
使用 iptables tool 與內核包過濾對話也是如此。

4. 對網絡區的理解

基於用戶對網絡中設備和交通所給與的信任程度,防火牆可以用來將網絡分割成不同的區域。  NetworkManager 通知 firewalld 一個接口歸屬某個區域。接口所分配的區域可以由 NetworkManager 改變,也可以通過能為您打開相關 NetworkManager 窗口的 firewall-config 工具進行。
/etc/firewalld/的區域設定是一系列可以被快速執行到網絡接口的預設定。列表並簡要說明如下:
drop(丟棄)
任何接收的網絡數據包都被丟棄,沒有任何回復。僅能有發送出去的網絡連接。
block(限制)
任何接收的網絡連接都被  IPv4 的  icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒絕。
public(公共)
在公共區域內使用,不能相信網絡內的其他計算機不會對您的計算機造成危害,只能接收經過選取的連接。
external(外部)
特別是為路由器啟用了偽裝功能的外部網。您不能信任來自網絡的其他計算,不能相信它們不會對您的計算機造成危害,只能接收經過選擇的連接。
dmz(非軍事區)
用於您的非軍事區內的電腦,此區域內可公開訪問,可以有限地進入您的內部網絡,僅僅接收經過選擇的連接。
work(工作)
用於工作區。您可以基本相信網絡內的其他電腦不會危害您的電腦。僅僅接收經過選擇的連接。
home(家庭)
用於家庭網絡。您可以基本信任網絡內的其他計算機不會危害您的計算機。僅僅接收經過選擇的連接。
internal(內部)
用於內部網絡。您可以基本上信任網絡內的其他計算機不會威脅您的計算機。僅僅接受經過選擇的連接。
trusted(信任)
可接受所有的網絡連接。
指定其中一個區域為默認區域是可行的。當接口連接加入了  NetworkManager,它們就被分配為默認區域。安裝時,firewalld 里的默認區域被設定為公共區域。

如果你的系統上沒有安裝使用命令安裝

安裝firewalld 防火牆

yum install firewalld

開啟服務

systemctl start firewalld.service

關閉防火牆

systemctl stop firewalld.service

開機自動啟動

systemctl enable firewalld.service

關閉開機制動啟動

systemctl disable firewalld.service

使用firewall-cmd 命令

查看狀態firewall-cmd --state //running 表示運行

獲取活動的區域

firewall-cmd --get-active-zones

這條命令將用以下格式輸出每個區域所含接口:
<zone1>: <interface1> <interface2> ..<zone2>: <interface3> ..

獲取所有支持的服務

firewall-cmd --get-service

在不改變狀態的條件下重新加載防火牆:

firewall-cmd --reload

啟用某個服務

firewall-cmd --zone=public --add-service=https //臨時

firewall-cmd --permanent --zone=public --add-service=https //永久

開啟某個端口

firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp //永久

firewall-cmd --zone=public --add-port=8080-8081/tcp //臨時

刪除某個端口

firewall-cmd --permanent --zone=public --remove-port=8080-8081/tcp

使用命令加載設置firewall-cmd --reload

新增一個zone,如新增 k8s,新增的配置文件會存放在 /etc/firewalld/zones 目錄下

firewall-cmd --new-zone=k8s --permanent

將網絡接口eth0 添加到k8s zones,一個zone 可以添加多個網絡接口,但是一個網絡接口只能加入一個 zone(一定要加ssh服務)

 firewall-cmd --zone=k8s --add-interface=eth0

如網絡接口 eth0 已經存在其他zone,首先查找eth0 接口當前在那個zone(假設查詢在 publich zone),然后將 eth0 接口從所在的 zone 刪除

firewall-cmd --get-zone-of-interface=eth0
firewall-cmd --zone=public --remove-interface=eth0

查看開啟的端口和服務

firewall-cmd --permanent --zone=public --list-services //服務空格隔開 例如 dhcpv6-client https ss

firewall-cmd --permanent --zone=public --list-ports //端口空格隔開 例如 8080-8081/tcp 8388/tcp 80/tcp

設置某個ip 訪問某個服務

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.4/24" service name="http" accept"

ip 192.168.0.4/24 訪問 http

刪除上面設置的規則

firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="192.168.0.4/24" service name="http" accept"

檢查設定是否生效

iptables -L -n | grep 21
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 ctstate NEW

執行命令firewall-cmd --list-all
顯示:

public (default)
interfaces:
sources:
services: dhcpv6-client ftp ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

查詢服務的啟動狀態

firewall-cmd --query-service ftp
yes
firewall-cmd --query-service ssh
yes
firewall-cmd --query-service samba
no
firewall-cmd --query-service http
no

自行加入要開放的 Port

firewall-cmd --add-port=3128/tcp
firewall-cmd --list-all
public (default)
interfaces:
sources:
services: dhcpv6-client ftp ssh
ports: 3128/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

  參考:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/sec-using_firewalls


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM