1. 程式人生 > >CentOS 7 中配置Firewall規則

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_firew