Centos7 防火牆 firewalld 實用操作
一.前言
Centos7以上的發行版都試自帶了firewalld防火牆的,firewalld去帶了iptables防火牆。其原因是iptables的防火牆策略是交由核心層面的netfilter網路過濾器來處理的,而firewalld則是交由核心層面的nftables包過濾框架來處理。 相較於iptables防火牆而言,firewalld支援動態更新技術並加入了區域(zone)的概念。簡單來說,區域就是firewalld預先準備了幾套防火牆策略集合(策略模板),使用者可以根據生產場景的不同而選擇合適的策略集合,從而實現防火牆策略之間的快速切換。
區域對於 firewalld 來說是一大特色,但是對於我們使用Centos7一般是在伺服器上,需要切換zone的需求比較少,所以本文不做介紹了,網上資料也比較多,大家可以去百度找找資料。
二.操作與配置
1.服務操作
啟動服務:
systemctl start firewalld
這裡不用擔心啟用了防火牆以後無法通過ssh遠端,22埠預設加入了允許規則
停止服務:
systemctl stop firewalld
重啟服務:
systemctl restart firewalld
檢視服務狀態:
systemctl status firewalld
2.配置檔案說明
firewalld 存放配置檔案有兩個目錄,/usr/lib/firewalld
和 /etc/firewalld
,前者存放了一些預設的檔案,後者主要是存放使用者自定義的資料,所以我們新增的service或者rule都在後者下面進行。
server
資料夾儲存服務資料,就是一組定義好的規則。
zones
儲存區域規則
firewalld.conf
預設配置檔案,可以設定預設使用的區域,預設區域為 public,對應 zones目錄下的 public.xml
三.命令
這裡需要首先說明的是,在執行命令時,如果沒有帶 --permanent
引數表示配置立即生效,但是不會對該配置進行儲存,相當於重啟伺服器就會丟失。如果帶上則會將配置儲存到配置檔案,,但是這種僅僅是將配置儲存到檔案,卻並不會實時生效,需要執行 firewall-cmd --reload
命令過載配置才會生效。
1.過載防火牆配置
firewall-cmd --reload
2.檢視防火牆執行狀態
firewall-cmd --state
3.檢視預設區域的設定
firewall-cmd --list-all
4.應急命令
firewall-cmd --panic-on # 拒絕所有流量,遠端連線會立即斷開,只有本地能登陸
firewall-cmd --panic-off # 取消應急模式,但需要重啟firewalld後才可以遠端ssh
firewall-cmd --query-panic # 檢視是否為應急模式
5.服務
firewall-cmd --add-service=<service name> #新增服務
firewall-cmd --remove-service=<service name> #移除服務
6.埠
firewall-cmd --add-port=<port>/<protocol> #新增埠/協議(TCP/UDP)
firewall-cmd --remove-port=<port>/<protocol> #移除埠/協議(TCP/UDP)
firewall-cmd --list-ports #檢視開放的埠
7.協議
firewall-cmd --add-protocol=<protocol> # 允許協議 (例:icmp,即允許ping)
firewall-cmd --remove-protocol=<protocol> # 取消協議
firewall-cmd --list-protocols # 檢視允許的協議
8.允許指定ip的所有流量
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.1" accept" # 表示允許來自192.168.2.1的所有流量
9.允許指定ip的指定協議
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" protocol value="<protocol>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" protocol value="icmp" accept" # 允許192.168.2.208主機的icmp協議,即允許192.168.2.208主機ping
10.允許指定ip訪問指定服務
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" service name="<service name>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="ssh" accept" # 允許192.168.2.208主機訪問ssh服務
11.允許指定ip訪問指定埠
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" port protocol="<port protocol>" port="<port>" accept"
例:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.1" port protocol="tcp" port="22" accept" # 允許192.168.2.1主機訪問22埠
12.將指定ip改為網段
8-11 的各個命令都支援 source address
設定為網段,即這個網段的ip都是適配這個規則:
例如:
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" accept"
表示允許192.168.2.0/24網段的主機訪問22埠 。
13.禁止指定ip/網段
8-12 各個命令中,將 accept
設定為 reject
表示拒絕,設定為 drop
表示直接丟棄(會返回timeout連線超時)
例如:
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" reject"
表示禁止192.168.2.0/24網段的主機訪問22埠 。
四.參考資料
firewalld防火牆詳解 by xuad88.