實踐環境
CentOS-7-x86_64-DVD-2009
簡介
Firewalld是一種簡單的、有狀態的、基於區域(zone-based)的防火牆。策略和區域用於組織防火牆規則。網路在邏輯上被劃分為多個區域,它們之間的流量可以透過策略進行管理。
檢視防火牆狀態
# service firewalld status
或者
# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
說明:如果輸出顯示 Active: inactive (dead)
,則表示未開啟防火牆。 如果現實Active: active (running)
則表示開啟了防火牆。
或者
# firewall-cmd --state
not running
開啟防火牆
# service firewalld start
或者
# systemctl start firewalld
重啟防火牆
# service firewalld restart
或者
# systemctl restart firewalld
設定防火牆開機自啟
# systemctl enable firewalld
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
禁用防火牆開機自啟
# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
檢視預定義區域
# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
# #檢視每個區域的詳細資訊
# firewall-cmd --list-all-zones
區域簡介:
區域 | 預設規則 |
---|---|
block | 拒絕流入的流量,除非與流出的流量相關 |
dmz | 拒絕流入的流量,除非與流出的流量相關;如果流量與ssh服務相關,則允許流量 |
drop | 拒絕流入的流量,除非與流出的流量相關 |
external | 拒絕流入的流量;除非與流出的流量相關;如果流量與ssh服務相關,則允許流量 |
home | 拒絕流入的流量;除非與流出的流量相關;如果流量與ssh,mdns,ipp-client,amba-client,dhcpv6-client服務相關,則允許流量 |
internal | 等同於home區域 |
public | 拒絕流入的流量;除非與流出的流量相關;如果流量與ssh,dhcpv6-client服務相關,則允許流量 |
trusted | 允許所有的資料包流入與流出 |
work | 拒絕流入的流量;除非與流出的流量相關;如果流量與ssh,ipp-client,dhcpv6-client服務相關,則允許流量 |
建立自定義區域
# firewall-cmd --permanent --new-zone=testing
success
注意:--permanent
選項不能少
檢視預設區域
# firewall-cmd --get-default-zone
public
檢視網路卡關聯的區域
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:12:86:da brd ff:ff:ff:ff:ff:ff
inet 192.168.206.102/24 brd 192.168.206.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe12:86da/64 scope link
valid_lft forever preferred_lft forever
# firewall-cmd --get-zone-of-interface=ens33
public
注意:一張網路卡只能關聯一個區域
修改預設區域
例子:
# #修改預設區域為`trusted`
# firewall-cmd --set-default-zone=trusted
success
# firewall-cmd --get-default-zone
trusted
# firewall-cmd --get-zone-of-interface=ens33
trusted
# #還原
# firewall-cmd --set-default-zone=public
success
# firewall-cmd --get-default-zone
public
# firewall-cmd --get-zone-of-interface=ens33
public
修改網路卡關聯的區域
方法1:先刪除現有關聯區域,再新增目標關聯區域(因為同一時間,一張網路卡只能關聯一個區域,所以要先新增再刪除)
# firewall-cmd --remove-interface=ens33 --zone=public
success
# firewall-cmd --get-zone-of-interface=ens33
no zone
## 設定ens33關聯區域為trusted
# firewall-cmd --add-interface=ens33 --zone=trusted
success
# firewall-cmd --get-zone-of-interface=ens33
trusted
方法2:
## 設定ens33關聯區域為public
# firewall-cmd --change-interface=ens33 --zone=public
success
# firewall-cmd --get-zone-of-interface=ens33
public
列印當前活動區域及繫結的介面和源
firewall-cmd --get-active-zones
列印當前活動區域以及這些區域中使用的介面和源。活動區域是與介面或源繫結的區域。輸出格式為:
zone1
interfaces: interface1 interface2 ..
sources: source1 ..
zone2
interfaces: interface3 ..
zone3
sources: source2 ..
如果沒有介面和源繫結到區域,則忽略該對應區域行
例子:
# firewall-cmd --get-active-zones
public
interfaces: ens33
埠訪問限制
檢視已開放埠
firewall-cmd [--permanent] [--zone=zone] --list-ports
以空格分隔的列表形式列出為區域新增的埠。埠的形式為portid[-portid]/protocol
,它可以是埠和協議對,也可以是具有協議的埠範圍。如果忽略--zone
選項配置,將使用預設區域。
新增開放埠
firewall-cmd [--permanent] [--zone=zone] --add-port=portid[-portid]/protocol [--timeout=timeval]
為zone
(區域)新增埠。如果省略了--zone
選項配置,將使用預設區域。此選項可以多次指定。如果提供了--timeout
,則該規則將在指定的超時時間內處於活動狀態,超時之後將自動刪除。timeval是一個數字(秒)或數字後跟一個字元s(秒)、m(分鐘)、h(小時),例如20m或1h。
埠可以是單個埠號,也可以是埠範圍portid-portid
。協議可以是tcp
、udp
、sctp
或dccp
。
--timeout
選項不能與--permanent
選項組合使用。
取消開放埠
firewall-cmd [--permanent] [--zone=zone] --remove-port=portid[-portid]/protocol
從區域中刪除埠。如果省略了--zone
選項配置,將使用預設區域。此選項可以多次指定。
--permanent
可用於持久設定選項。這些更改不會立即生效,只有在重新啟動/重新載入服務或系統重新啟動後才會生效。如果未使用--permanent
,則更改將僅是執行時配置的一部分(所做的變更在重啟服務、重新載入服務後失效),下同,不再贅述。
例子
例子:為public區域持久開放 tcp協議埠 15672
# firewall-cmd --permanent --add-port=15672/tcp
# firewall-cmd --list-ports # 查不到埠
# #讓配置生效
# firewall-cmd --reload
success
# firewall-cmd --list-ports
15672/tcp
說明:
-
firewall-cmd --reload
重新載入防火牆規則並保留狀態資訊。當前的持久配置將成為新的執行時配置,也就說執行的所有僅執行時變更在重新載入規則後丟失。類似的,有以下命令
-
firewall-cmd --complete-reload
完全重新載入防火牆,甚至netfilter核心模組。這很可能會終止活動連線,因為狀態資訊會丟失。此選項僅用於嚴重的防火牆問題。例如,防火牆規則正確的情況下,無法建立連線的狀態資訊問題
例子:為public區域持久開放 tcp協議埠範圍 1000-2000(包括1000及2000)
# firewall-cmd --permanent --add-port=1000-2000/tcp
success
# firewall-cmd --reload
success
# firewall-cmd --list-ports
15672/tcp 1000-2000/tcp
例子:為public區域持久取消開放 tcp協議埠 15672
# firewall-cmd --permanent --remove-port=15672/tcp
success
# firewall-cmd --reload
success
# firewall-cmd --list-ports
1000-2000/tcp
例子:為public區域持久取消開放tcp協議埠範圍 1000-2000(包括1000及2000)
]# firewall-cmd --permanent --remove-port=1000-2000/tcp
success
# firewall-cmd --reload
success
# firewall-cmd --list-ports
#
IP、網路訪問限制
新增開放源
firewall-cmd [--permanent] [--zone=zone] --add-source=source[/mask]|MAC|ipset:ipset
繫結源(source
,IP、網路、MAC、IP集)到區域zone
。如果省略了--zone
選項配置,將使用預設區域。
取消開放源
firewall-cmd [--permanent] --remove-source=source[/mask]|MAC|ipset:ipset
從區域zone
刪除之前新增繫結的源
例子
例子:允許IP 192.168.50.182持久訪問為public區域
# firewall-cmd --permanent --add-source=192.168.50.182
success
# firewall-cmd --reload
success
說明:新增IP白名單後,即使未新增開放埠,針對當前IP,也可以正常訪問。
例子:允許子網192.168.50.0/24持久訪問為public區域
# firewall-cmd --permanent --add-source=192.168.50.0/24
success
# firewall-cmd --reload
success
例子:取消IP 192.168.50.182對public區域的持久訪問許可
# firewall-cmd --permanent --remove-source=192.168.50.182
success
# firewall-cmd --reload
success
富語言規則
列出富語言規則
firewall-cmd [--permanent] [--zone=zone] --list-rich-rules
以換行符分隔的列表形式列出為區域新增的富語言規則。如果省略了--zone
選項,將使用預設區域。
新增富語言規則
firewall-cmd [--permanent] [--zone=zone] --add-rich-rule='rule' [--timeout=timeval]
為區域新增富語言規則'rule'。此選項可以多次指定。如果省略了區域,將使用預設區域。如果提供了--timeout
,則該規則將在指定的超時時間內處於活動狀態,超時之後將自動刪除。timeval是一個數字(秒)或數字後跟一個字元s(秒)、m(分鐘)、h(小時),例如20m或1h。
--timeout
選項不能與--permanent
選項組合使用。
刪除富語言規則
firewall-cmd [--permanent] [--zone=zone] --remove-rich-rule='rule'
從區域中刪除富語言規則'rule'。此選項可以多次指定。如果省略了區域,將使用預設區域。
查詢富語言規則
firewall-cmd [--permanent] [--zone=zone] --query-rich-rule='rule'
返回是否為區域新增了富語言規則'rule'。如果省略了--zone
,將使用預設區域。如果為真,則返回0,否則返回1。
例子
例子:允許 IP 192.168.50.182 持久訪問public區域tcp協議埠15672
# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.50.182" port protocol="tcp" port="15672" accept'
# firewall-cmd --reload
例子:取消 IP 192.168.50.182 持久訪問public區域tcp協議埠15672的許可
# firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.50.182" port protocol="tcp" port="15672" accept'
success
# firewall-cmd --reload
例子:禁止 IP 192.168.50.182 持久訪問public區域
# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.50.182" reject'
# firewall-cmd --reload
注意:新增訪問限制前,建議先移除之前的訪問許可配置,否則可能導致當前規則不起作用。此外,這裡的reject
也可以替換為drop
,即直接丟棄來訪請求資料包。
例子:取消禁止 IP 192.168.50.182 持久訪問public區域限制
# firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.50.182" reject'
# firewall-cmd --reload
例子:檢視當前配置的富語言規則
# firewall-cmd --list-rich-rules
rule family="ipv4" source address="192.168.50.182" reject
列出為區域啟用或新增的所有內容
firewall-cmd[--permanent] [--zone=zone] --list-all
列出為區域新增或啟用的所有內容。如果省略了--zone
選項配置,則將使用預設區域。
例子:
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client ssh
ports: 15672/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
儲存當前執行時配置為持久配置
# firewall-cmd --runtime-to-permanent
儲存活動執行時配置並用它覆蓋持久配置。
參考連結
https://firewalld.org/documentation/concepts.html