FirewallD
FirewallD介紹
firewalld提供了支持網絡/防火牆區域(zone)定義網絡鏈接以及接口安全等級的動態防火牆管理工具。FirewallD允許服務或者應用程序直接添加防火牆規則的接口。
與iptables相比較
iptables防火牆是靜態的,添加修改規則後都必須重啓防火牆。即內核 netfilter 防火牆模塊的卸載和新配置所需模塊的裝載等。而firewalld不同,它擁有運行時配置和永久配置選項,在運行時配置規則後立即生效,永久配置規則是基於firewalld的守護進程,將規則載入至Netfilter模塊,不會對Netfilter模塊進行卸載和重新啓動,避免破壞狀態防火牆和確立的連接, 所以說firewalld 可以動態管理防火牆。
FirewallD 使用服務(service) 和區域(zone)來代替 iptables 的規則(rule)和鏈(chain)。
FirewallD區域
firewalld將網卡分爲不同的區域(區域),這些區域的區別在於對待來訪的用戶及傳輸的數據包的默認動作的不同,通過制定一 些安全 策略從而保證系統在被訪問或傳輸數據時的安全。
默認情況下,有以下的區域(zone)可用:
- trust(信任):可接受所有的網絡連接;
- home(家庭):用於家庭網絡,僅接受ssh、mdns、ipp-client、samba-client或dhcpv6-client服務連接;
- internal(內部):用於內網絡,僅接受ssh、ipp-client、mdns、samba-client或dhcpv6-client服務連接;
- work(工作區):用於工作區,僅接受ssh、ipp-client、dhcpv6-client服務連接;
- public(公共):用於公共區域的使用,僅接受ssh、dhcpv6-client服務,爲firewalld的默認區域;
- external(外部區域):出去的ipv4的網絡連接經過此區域的僞裝和轉發,只支持ssh服務;
- dmz(隔離區):僅接受ssh服務;
- block(限制):拒絕所有的網絡服務;
- drop(丟棄):任何訪問的網絡數據包都會被丟棄,沒有任何迴應。
firewalld 的默認區域是 public。
預定義服務/添加端口
- 直接編輯配置文件/etc/firewalld/firewalld.conf
- 使用firewall-config圖形工具,通過這個圖形工具,可以更改和檢查firewalld內存中的配置(Runtime),也可以修改磁盤上的持久配置(Permanent)
- 使用firewall-cmd命令
啓動服務
#systemctl enable firewalld.service
#systemctl start firewalld.service
查看防火牆狀態
#systemctl status firewalld
FirewallD圖形化工具管理防火牆
終端鍵入firewall-config即可打開圖形化工具,firewall-config 支持防火牆的所有特性。firewall-config 可以配置防火牆允許通過的服務、端口 、僞裝 、端口轉發 、 ICMP 過濾器和調整 zone(區域)
firewall-config工作界面:
在底部狀態欄顯示四個信息:連接狀態、默認區域、鎖定狀態、應急模式。
在配置選項處有運行時和永久兩個選項,即兩種配置:
- 運行時:運行時配置爲當前使用的配置規則。運行時配置並非永久有效,在重新加載時可以被恢復,而系統或者服務重啓、停止時,這些選項將會丟失。
- 永久:永久配置存儲在配置文件中,永久配置規則在系統或者服務重啓的時候使用,若要配置後立即生效,在上方選項菜單欄中點擊重載防火牆。
選項子菜單包括以下幾個部分:
重載防火牆:重載防火牆規則。若現在運行的配置規則如果沒有在永久配置中操作,那麼系統重載後會丟失。
更改連接區域:更改網絡連接的默認區域。
改變默認區域:更改網絡連接的所屬區域和接口。
應急模式:應急模式意味着丟棄所有的數據包。
鎖定:鎖定可以對防火牆配置就行加鎖,只允許白名單上的應用程序進行改動。鎖定特性爲 firewalld 增加了鎖定本地應用或者服務配置的簡單配置方式。它是一種輕量級的應用程序策略。
使用firewall-cmd命令管理防火牆
firewall-cmd命令格式(可以在man手冊中查看):
區域管理
#顯示支持的區域
firewall-cmd --get-zones
block drop work internal external home dmz public trusted
#設置trusted區域爲當前區域
firewall-cmd --set-default-zone=trusted
#查看當前的區域
firewall-cmd --get-active-zones
#根據接口查詢區域
firewall-cmd --get-zone-of-interface=ens33
#設置當前的區域的接口
firewall-cmd --get-zone-of-interface=ens33
#顯示所有公共區域
firewall-cmd --zone=public --list-all
#顯示所有的區域規則
firewall-cmd --list-all-zones
服務管理
#使用命令查看所有支持的服務
[root@localhost ~]# firewall-cmd --get-services
#添加服務
[root@mail ~]# firewall-cmd --add-service=http
#顯示當前服務
[root@mail ~]# firewall-cmd --list-services
dhcpv6-client ssh
#移除服務
[root@mail ~]# firewall-cmd --remove-service=ssh
#設置服務超時時間,即服務的開啓時間,單位秒
[root@mail ~]# firewall-cmd --add-service=http --timeout=10
端口管理
#添加一個端口
[root@mail ~]# firewall-cmd --add-port=8080/tcp
#刪除端口
[root@mail ~]# firewall-cmd --remove-port=8080/tcp
#配置端口轉發
[root@mail ~]# firewall-cmd --add-forward-port=port=22:protocol=tcp:toport=2222
其他
#啓用緊急模式(所有的 規則出入都拒絕)
[root@mail ~]# firewall-cmd --panic-on
#禁用緊急模式
[root@mail ~]# firewall-cmd --panic-off
#查詢緊急模式狀態
[root@mail ~]# firewall-cmd --query-panic
#添加當前源地址
[root@mail ~]# firewall-cmd --add-source=192.168.10.1/24
#刪除源地址
[root@mail ~]# firewall-cmd --remove-source=192.168.10.1/24
#啓用僞裝功能,但因爲內核限制,只支持ipv4
[root@mail ~]# firewall-cmd --add-masquerade
#列出所支持的ICMP類型
[root@mail ~]# firewall-cmd --get-icmptype
#添加禁止icmp報文
[root@mail ~]# firewall-cmd --add-icmp-block=echo-request
以上都爲運行時生效,配置永久生效要在在firewall-cmd後加一個–permanent,配置後重載防火牆
#添加規則
[root@mail ~]# firewall-cmd --permanent --add-service=http
#重新加載防火牆
[root@mail ~]# firewall-cmd --reload
rich rule(富規則)
富規則是firewalld管理防火牆的常用手段,管理方式有圖形界面和命令行界面,圖形界面簡單易懂,命令行格式需要多練習
#添加一個富規則
firewall-cmd [--zone=zone] --add-rich-rule='rule' [--timeout=timeval]
#刪除一個富規則
firewall-cmd [--zone=zone] --remove-rich-rule='rule'
#查詢一個富規則
firewall-cmd [--zone=zone] --query-rich-rule='rule'
示例:
#禁止172.16.10.0/24 域的用戶對server和desktop進行ssh訪問
[root@system1 ~]# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="172.16.10.0/24" service name="ssh" reject'
[root@system1 ~]# firewall-cmd --reload
#配置端口轉發,172.24.8.0/24網段中的主機,訪問server的本地端口1111將被轉發到80端口
[root@system1 ~]# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="172.24.8.0/24" forward-port port="1111" protocol="tcp" to-port="80"'
[root@system1 ~]# firewall-cmd --reload