firewalld

1、firewalld
firewalld防火墻是centos7系統默認的防火墻管理工具取代了之前的iptables防火墻
- 作業在網路層、屬于包括過濾防火墻
firewalld和iptables都是用來管理防火墻的工具(屬于用戶狀態)來定義防火墻的各種規則功能 - 內部結構都指向netfilter網路過濾子系統(屬于內狀態)來實作包過濾防火墻能
firewalld提供了支持網路區域所定義的網路鏈接以及介面安全等級的動態的防火墻管理工具 - 支持ipv4、ipv6防火墻設定以及以太網橋(在某些高級服務可能會用到,如云計算)
擁有兩種配置模式:運行時配置與永久配置
2、firewalld與iptables的區別
(1)作用點
iptables主要是基于介面,來設定規則,從而判斷網路的安全性
firewalld是基于區域,根據不同的區域來設定不同的規則,從而判斷網路的安全性,和硬體防火墻的設定相類似,
(2)儲存位置
iptables在、/etc/sysconfig/iptables 中儲存配置
firewalld 將配置儲存在/etc/firewalld(優先加載)和/usr/bid/firewalld/(默認組態檔)中的各種XML檔案里
(3)新規則的使用
使用 iptables 每一個單獨更改意味著清除所有舊有的規則和從/etc/sysconfig/iptables 里讀取所有新的規則
使用 firewalld 卻不會再創建任何新的規則,僅僅運行規則中的不同之處,因此firewalld 可以在運行時間內,改變設定而不丟失現行連接
iptables主要是基于介面,來設定規則,從而判斷網路的安全性,
firewalld是基于區域,根據不同的區域來設定不同的規則,從而保證網路的安全,與硬體防火墻的設定相類似,
iptables 在/etc/ sysconfig/iptables中儲存配置.,
firewalld 將配置儲存在/etc/firewalld/(優先加載)和/usr/lib/firewalld/(默認的組態檔)中的各種XM檔案里,
使用iptables 每一個單獨更改意味著清除所有舊有的規則和從/etc/sysconfig/iptables里讀取所有新的規則,使用firewalld 卻不會再創建任何新的規則,僅僅運行規則中的不同之處,因此firewalld可以在運行時間內,改變設定而不丟失現行連接,
iptables 防火墻型別為靜態防火墻
firewalld 防火墻型別為動態防火墻
iptables傾向于對資料包的源/目的IP,埠,協議,出入站網卡來設定包過濾規則
filewalld對指定的網路區域設定相關過濾規則,資料包在全部指定區域的規則對包進行過濾,
| Firewalls | In-tables | |
|---|---|---|
| 組態檔 | /usr/lib/firewalld /etc/firewalld | /etc/sysconfig/iptables |
| 對規則的修改 | 不需要全部重繪策略,不丟失現行連接 | 需要全部重繪策略,丟失連接 |
| 防火墻型別 | 動態防火墻 | 靜態防火墻 |
3、firewalld區域的概念
- firewalld防火墻為了簡化管理,將所有網路流量分為多個區域(zone)
- 然后根據資料包的源IP地址或傳入的網路介面等條件將流量傳入相應區域
- 每個區域都定義了自己打開或者關閉的埠和服務串列,
firewalld防火墻預定了9個區域
| 區域名稱 | 作用 |
|---|---|
| trusted(信任區域) | 允許所有的傳入流量 |
| public(公共區域) | 允許與ssh或dhcpv6-client預定義服務匹配的傳入流量,其余均拒絕,是新添加網路介面的默認區域, |
| external(外部區域) | 允許與 ssh 預定義服務匹配的傳入流量,其余均拒絕, 默認將通過此區域轉發的IPv4傳出流量將進行地址偽裝,可用于為路由器啟用了偽裝功能的外部網路, |
| home(家庭區域) | 允許與ssh、ipp-client、mdns、samba-client或dhcpv6-client預定義服務匹配的傳入流量,其余均拒絕, |
| work(作業區域) | 允許與 ssh、ipp-client、dhcpv6-client 預定義服務匹配的傳入流量,其余均拒絕, |
| dmz(隔離區域也稱為非軍事區域) | 允許與 ssh 預定義服務匹配的傳入流量,其余均拒絕, |
| block(限制區域) | 拒絕所有傳入流量, |
| drop(丟棄區域) | 丟棄所有傳入流量,并且不產生包含 ICMP的錯誤回應, |
| internal(內部區域) | 默認值時與home區域相同, |
最終一個區域的安全程度是取決于管理員在此區域中設定的規則,
區域如同進入主機的安全門,每個區域都具有不同限制程度的規則,只會允許符合規則的流量傳入,
可以根據網路規模,使用一個或多個區域,但是任何一個 活躍區域 至少需要關聯 源地址或介面,
默認情況下,public區域是默認區域,包含所有介面(網卡)
4、firewalld資料處理流程
firewalld對于進入系統的資料包,會根據資料包的源IP地址或傳入的網路介面等條件,將資料流量轉入相應區域的防火墻規則,對于進入系統的資料包,首先檢查的就是其源地址
firewalld檢查資料包的源地址的規則:
1、若源地址關聯到特定的區域(即源地址或介面系結的區域有沖突),則執行該區域所制定的規則,
2、若源地址未關聯到特定的區域(即源地址或介面系結的區域沒有沖突),則使用傳入網路介面的區域并執行該區域所制定的規則,
3、若網路介面也未關聯到特定的區域(即源地址或介面都沒有系結特定的某個區域),則使用默認區域并執行該區域所制定的規則,
常用引數
--get-default-zone :顯示當前默認區域
--set-default-zone=<zone> :設定默認區域
--get-active-zones :顯示當前正在使用的區域及其對應的網卡介面
--get-zones :顯示所有可用的區域
--get-zone-of-interface=<interface> :顯示指定介面系結的區域
--zone=<zone> --add-interface=<interface> :為指定介面系結區域
--zone=<zone> --change-interface=<interface> :為指定的區域更改系結的網路介面
--zone=<zone> --remove-interface=<interface> :為指定的區域洗掉系結的網路介面
--list-all-zones :顯示所有區域及其規則
[--zone=<zone>] --list-all :顯示所有指定區域的所有規則,省略--zone=<zone>時表示僅對默認區域操作
[--zone=<zone>] --list-services :顯示指定區域內允許訪問的所有服務
[--zone=<zone>] --add-service=<service> :為指定區域設定允許訪問的某項服務
[--zone=<zone>] --remove-service=<service> :洗掉指定區域已設定的允許訪問的某項服務
[--zone=<zone>] --list-ports :顯示指定區域內允許訪問的所有埠號
[--zone=<zone>] --add-port=<portid>[-<portid>]/<protocol> :為指定區域設定允許訪問的某個/某段埠號(包括協議名)
[--zone=<zone>] --remove-port=<portid>[-<portid>]/<protocol> :洗掉指定區域已設定的允許訪問的埠號(包括協議名)
[--zone=<zone>] --list-icmp-blocks :顯示指定區域內拒絕訪問的所有 ICMP 型別
[--zone=<zone>] --add-icmp-block=<icmptype> :為指定區域設定拒絕訪問的某項 ICMP 型別
[--zone=<zone>] --remove-icmp-block=<icmptype> :洗掉指定區域已設定的拒絕訪問的某項ICMP型別
firewall-cmd --get-icmptypes :顯示所有 ICMP 型別
區域管理
-
顯示當前系統中的默認區域
[root@honey~] firewall-cmd --get-default-zone public -
顯示默認區域的所有規則

-
顯示當前正在使用的區域及對應的網卡介面
[root@honey-slave ~] firewall-cmd --get-active-zones public interfaces: ens192 -
設定默認區域
firewall-cmd --set-default-zone=home firewall-cmd --get-default-zone
服務管理
-
查看默認區域內允許訪問的所有服務
[root@honey-slave ~] firewall-cmd --list-service cockpit dhcpv6-client ssh -
添加httpd服務到public區域
[root@honey-slave ~] firewall-cmd --add-service=http --zone=public success [root@honey-slave ~] firewall-cmd --list-service cockpit dhcpv6-client http ssh -
查看public區域已配置規則
firewall-cmd --list-all --zone=public 這條命令和上面的顯示所有規則的輸出一樣 -
洗掉public區域的httpd服務
[root@honey-slave ~]# firewall-cmd --remove-service=http --zone=public success [root@honey-slave ~]# firewall-cmd --list-service cockpit dhcpv6-client ssh -
firewall-cmd --add-service=http --add-service=https --permanent firewall-cmd --reload firewall-cmd --list-all 添加使用 --permanent選項表示設定成永久生效,需要重新啟動firewalld服務或執行firewall-cmd --reload命令 重新加載防火墻規則時才會生效,若不帶有此選項,表示用于設定運行時規則,但是這些規則在系統或firewalld服務重啟、停止時配置將失效, --runtime-to-permanent:將當前的運行時配置寫入規則組態檔中,使之成為永久性配置,
埠管理
-
允許TCP的433埠到internal區域
[root@honey-slave ~]# firewall-cmd --zone=internal --add-port=443/tcp success [root@honey-slave ~]# firewall-cmd --list-all --zone=internal internal target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client mdns samba-client ssh ports: 443/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: -
從internal區域將tcp的433埠移除
[root@honey-slave ~] firewall-cmd --zone=internal --remove-port=443/tcp success -
允許UDP的2048-2050埠到默認區域
[root@honey-slave ~] firewall-cmd --add-port=2048-2050/udp success [root@honey-slave ~] firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens192 sources: services: cockpit dhcpv6-client ssh ports: 55210-55212/tcp 9091/tcp 80/tcp 443/tcp 9988/tcp 30100-30105/tcp 35000-36000/tcp 2048-2050/udp
其他命令
重新加載防火墻配置 firewall-cmd --reload 規則更改后必須重新加載生效
查看防火墻運行狀態 firewall-cmd --state 等于#systemctl status firewalld
查看所有區域配置 firewall-cmd --list-all-zones
查看防火墻默認區域配置 firewall-cmd --list-all
查看防火墻默認區域名 firewall-cmd --get-default-zone
設定防火強默認區域 firewall-cmd --set-default-zone=public
把網卡分配給區域 firewall-cmd --zone=public --add-interface=ens32
查看指定網卡所在區域 firewall-cmd --get-zone-of-interface=ens32
更改網卡所屬區域 firewall-cmd --zone=public --change-interface=ens32
**應急模式管理*******(加--permanent引數才會寫入組態檔以永久生效)*******:
拒絕所有流量 firewall-cmd --panic-on 不能輕易用
取消應急模式 firewall-cmd --panic-off(但需要重啟firewalld后才可以遠程ssh)
查看是否為應急模式 firewall-cmd --query-panic

**協議添加示例*****(加--permanent引數才會寫入組態檔以永久生效)*****:****
添加協議 firewall-cmd --add-protocol=icmp
取消協議 firewall-cmd --remove-protocol=icmp
查看添加的協議 firewall-cmd --list-protocols
[root@honey-slave ~] firewall-cmd --add-protocol=icmp
success
[root@honey-slave ~] firewall-cmd --list-protocols
icmp
[root@honey-slave ~] firewall-cmd --remove-protocol=icmp
success
[root@honey-slave ~] firewall-cmd --list-protocols
[root@honey-slave ~]#
**埠流量轉發示例*****(加--permanent引數才會寫入組態檔以永久生效)*****:****
將原本訪問本機888埠的流量轉發到本機22埠:
[root@honey-slave ~] firewall-cmd --zone=drop --add-forward-port=port=888:proto=tcp:toport=22
success
將原本訪問本機888埠的流量轉發到ip為10.0.83.33的主機的22埠(需要開啟masquerade):
[root@honey-slave ~] firewall-cmd --zone=drop --add-masquerade
success
[root@honey-slave ~] firewall-cmd --zone=drop --add-forward-port=port=888:proto=tcp:toport=22:toaddr=10.0.83.33
success
測驗埠轉發功能是否生效:在客戶端嘗試訪問192.168.2.210主機的888埠,連上去后發現實際連接的是10.0.83.33主機,測驗OK,
**富規則臨時添加示例*****(加--permanent引數才會寫入組態檔以永久生效)*****:****
允許10.0.83.33和10.0.81.29主機的所有流量,以及協議為tcp,埠為2889:
[root@honey-slave ~] firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=10.0.81.29 port protocol="tcp" port="2889" accept" --permanent
success
[root@honey-slave ~] firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address=10.0.83.33 port protocol="tcp" port="2889" accept" --permanent
允許10.0.83.33主機的icmp協議,即允許10.0.83.33主機ping:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="10.0.83.33" protocol value="https://www.cnblogs.com/ivanlee717/p/icmp" accept"
取消允許10.0.81.29主機的所有流量
firewall-cmd --zone=drop --remove-rich-rule="rule family="ipv4" source address="10.0.81.29" accept"
允許192.168.2.208主機訪問ssh服務
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="ssh" accept"
禁止192.168.2.208訪問https服務,并回傳錯誤資訊:
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="https" reject"
允許192.168.2.0/24網段的主機訪問22埠
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" accept"
允許任意地址的主機訪問5601埠
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" port protocol="tcp" port="5601" accept"
每分鐘允許2個新連接訪問ftp服務
[root@honey-slave ~] firewall-cmd --add-rich-rule="rule service name=ftp limit value=https://www.cnblogs.com/ivanlee717/p/2/m accept"
success
[root@honey-slave ~] firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192
sources:
services: cockpit dhcpv6-client ssh
ports: 55210-55212/tcp 9091/tcp 80/tcp 443/tcp 9988/tcp 30100-30105/tcp 35000-36000/tcp 2048-2050/udp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule service name="ftp" accept limit value="https://www.cnblogs.com/ivanlee717/p/2/m"
允許新的ipv4和ipv6連接ftp,并使用日志和審核,每分鐘允許訪問一次:
firewall-cmd --add-rich-rule="rule service name=ftp log limit value="https://www.cnblogs.com/ivanlee717/p/1/m" audit accept"
拒絕來自192.168.2.0/24網段的連接,10秒后自動取消:
firewall-cmd --add-rich-rule="rule family=ipv4 source address=192.168.2.0/24 reject" --timeout=10
將來自192.168.2.0/24網段訪問本機80埠的流量轉發到本機的22埠:
firewall-cmd --zone=drop --add-rich-rule="rule family=ipv4 source address=192.168.2.0/24 forward-port port=80 protocol=tcp to-port=22"
列出當前active zone的各種屬性值
firewall-cmd --list-[option]
option可以取下面的值
interfaces
sources
services
ports
protocols
forward-ports
source-ports
icmp-blocks
rich-rules
[root@honey-slave ~] firewall-cmd --list-rich-rules
rule family="ipv4" source address="10.0.83.33" port port="3888" protocol="tcp" accept
rule family="ipv4" source address="192.168.2.208" protocol value="https://www.cnblogs.com/ivanlee717/p/icmp" accept
rule service name="ftp" accept limit value="https://www.cnblogs.com/ivanlee717/p/2/m"
rule service name="ftp" log limit value="https://www.cnblogs.com/ivanlee717/p/1/m" audit accept
[root@honey-slave ~]# firewall-cmd --list-ports
55210-55212/tcp 9091/tcp 80/tcp 443/tcp 9988/tcp 30100-30105/tcp 35000-36000/tcp 2048-2050/udp
本文來自博客園,作者:ivanlee717,轉載請注明原文鏈接:https://www.cnblogs.com/ivanlee717/p/16325854.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/483322.html
標籤:Linux
