CentOS 7 中配置Firewall規則
阿新 • • 發佈:2019-08-23
1. 防火牆簡介
動態防火牆後臺程式firewalld
提供了一個 動態管理的防火牆,用以支援網路 “zones” ,以分配對一個網路及其相關連結和介面一定程度的信任。它具備對 IPv4
和 IPv6
防火牆設定的支援。它支援乙太網橋,並有分離執行時間和永久性配置選擇。它還具備一個通向服務或者應用程式以直接增加防火牆規則的介面。
2. 瞭解防火牆
一個影象化的配置工具,firewall-config,用於配置firewalld
firewall
,然後按下 Enter。firewall-config 工具就出現了。您將被提示輸入管理員密碼。
firewall-config 工具裡有一個標記為 Configuration 的下拉選單,可以在 執行時間 和 永久兩種模式之間進行選擇。要注意,如果您選擇了 Permanent ,在左上角會出現一排附加的圖示。因為不能在執行模式下改變一個服務引數,所以這些圖示僅在永久配置模式中出現。
由 firewalld
man firewall-cmd(1)
所解釋的一樣。永久性改變需要按照 firewalld(1)
手冊頁的解釋來進行。注意, firewall-cmd
命令可以由 root
使用者執行,也可以由管理員使用者——換言之, wheel
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
可以在執行時間內,改變設定而不丟失現行連線。
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
(信任)- 可接受所有的網路連線。
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