Linux 防火墻 firewalld 實戰(zhàn)配置
最近工作上處理了很多關(guān)系配置服務(wù)器防火墻的操作,于是想寫一篇理論與實踐并存的文章,在這里分享給大家,希望對您有所幫助!
主要包括以下幾部分內(nèi)容(文章比較長,請耐心讀完):
- 防火墻概述
- firewalld原理框架
- 與iptables的異同點
- firewalld常用操作
- firewalld富規(guī)則實戰(zhàn)
一、防火墻概述
Firewalld是一種提供了支持網(wǎng)絡(luò)/防火墻區(qū)域(zone)定義網(wǎng)絡(luò)鏈接以及接口安全等級的動態(tài)防火墻管理工具,它自身并不具備防火墻的功能,而是和iptables一樣需要通過內(nèi)核的netfilter來實現(xiàn)。
他們的作用是維護(hù)規(guī)則,而真正使用規(guī)則干活的是內(nèi)核netfilter,firewalld和iptables的結(jié)構(gòu)以及使用方法會有點不一樣。
從邏輯上可分為:主機(jī)防火墻和網(wǎng)絡(luò)防火墻 從物理上可分為:硬件防火墻和軟件防火墻
firewalld和iptables就屬于主機(jī)層面的防火墻。
主機(jī)防火墻主要通過netfilter和TCP Wrappers兩個機(jī)制來管理的:
- Netfilter:數(shù)據(jù)包過濾機(jī)制
- TCP Wrappers:程序管理機(jī)制
關(guān)于數(shù)據(jù)包過濾機(jī)制(Netfilter)兩個軟件:firewalld與iptables
注意:在RHEL7系列中,默認(rèn)使用firewalld作為防火墻。在7系列之前使用的是iptables作為默認(rèn)防火墻。
二、Firewalld原理架構(gòu)
1. Firewalld區(qū)域管理
通過將網(wǎng)絡(luò)劃分成不同的區(qū)域,制定出不同區(qū)域之間的訪問控制策略來控制不同程序區(qū)域間傳送的數(shù)據(jù)流。
【例如】互聯(lián)網(wǎng)是不可信任的區(qū)域,而內(nèi)部網(wǎng)絡(luò)是高度信任的區(qū)域。網(wǎng)絡(luò)安全模型可以在安裝, 初次啟動和首次建立網(wǎng)絡(luò)連接時選擇初始化。該模型描述了主機(jī)所連接的整個網(wǎng)絡(luò)環(huán)境的可信級別,并定義了新連接的處理方式。
2. Firewalld域
網(wǎng)絡(luò)區(qū)名稱 | 默認(rèn)配置 |
trusted | 可接受所有的網(wǎng)絡(luò)連接 |
home | 用于家庭網(wǎng)絡(luò) |
internal | 用于內(nèi)部網(wǎng)絡(luò),僅接受ssh,mdns,gp-client,samba-client,dhcpv6-client連接 |
work | 用于工作區(qū),僅接受sshjpp-client,dhcpv6-client服務(wù)連接 |
public | 用于工作區(qū), 僅接受ssh,ipp-client,dhcpv6-client服務(wù)連接,在公共區(qū)域內(nèi)使用,僅接受ssh或dhcpv6-client服務(wù)連接,是firewalld的默認(rèn)區(qū)域 |
dmz | 僅接受ssh服務(wù)的連接 |
【溫馨提示】firewalld的默認(rèn)區(qū)域是 public
3. Firewalld配置文件
firewalld默認(rèn)提供了九個zone配置文件: block.xml、 dmz.xml、 drop.xml、 external.xml、 home.xml、 internal.xml、 public.xml、 trusted.xml、 work.xml,都保存在 /usr/lib/firewalld/zones/目錄下。
三、與ptables 的異同
1. 相同點
firewalld與 iptables 都是 linux 中防火墻的管理程序,但其實其角色主要為對于防火墻策略的管理,真正的防火墻執(zhí)行者是位于內(nèi)核中的 netfilter。
2. 不同點
- iptables 僅能通過命令行進(jìn)行配置;而 firewalld 提供了圖形接口,類似windows防火墻的操作方式;
- iptables 每一個單獨更改意味著清除所有舊的規(guī)則,并從 /etc/sysconfig/iptables 中讀取所有新的規(guī);則;而 firewalld 在有規(guī)則變動后,可以僅僅運(yùn)行規(guī)則中的不同之處,即在 firewalld 運(yùn)行時間內(nèi),改變設(shè)置時可以不丟失現(xiàn)行鏈接;
- iptables 的配置文件在 /etc/sysconfig/iptables 中;而 firewalld 的配置文件在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各種 XML 文件中;
- iptables 沒有守護(hù)進(jìn)程,并不能算是真正意義上的服務(wù);而 firewalld 有守護(hù)進(jìn)程;
- iptables 通過控制端口來控制服務(wù),而 firewalld 則是通過控制協(xié)議來控制端口;
- 【firewalld】默認(rèn)是拒絕;而【iptables】默認(rèn)是允許。
溫馨提示:
service說明: 在 /usr/lib/firewalld/services/ 目錄中,還保存了另外一類配置文件,每個文件對應(yīng)一項具體的網(wǎng)絡(luò)服務(wù),如 ssh 服務(wù)等。這個目錄下的服務(wù)配置默認(rèn)是放通的,不受firewalld-cmd 規(guī)則控制,除非把這個目錄下的服務(wù)配置文件刪掉,就恢復(fù)了默認(rèn)了(默認(rèn)拒絕),當(dāng)然也可以添加一些服務(wù)配置文件。
四、Firewalld常用操作
firewall-config(需要有圖形化界面的才能使用), firewall-cmd是命令行工具,實際生產(chǎn)環(huán)境主要使用firewall-cmd來操作
1. Firewalld規(guī)則的兩種狀態(tài)
運(yùn)行時( runtime):修改規(guī)則馬上生效,但是臨時生效,默認(rèn)是運(yùn)行時狀態(tài) 持久配置( permanent): 修改后需要重載才會生效
firewall-cmd --permanent [RULE]
firewall-cmd --reload
2. Firewalld常見選項
可以通過 man firewall-cmd或者 firewall-cmd --help查看幫助,firewalld的選項很多,下面列出一些比較常用的
firewall-cmd --help
--permanent # 配置寫入到配置文件,永久生效
--reload # 重載配置文件,永久生效
--zone= # 指定區(qū)域,默認(rèn)是public
--get-default-zone # 查看默認(rèn)區(qū)域
--set-default-zone= # 設(shè)置默認(rèn)區(qū)域
--get-zones # 獲取所有可用的區(qū)域
--get-active-zones # 獲取當(dāng)前激活(活躍)的區(qū)域
--add-source= # 添加地址,可以是主機(jī)或網(wǎng)段,遵循當(dāng)前區(qū)域的target
--remove-source # 移除地址,可以是主機(jī)或網(wǎng)段,遵循當(dāng)前區(qū)域的target
--add-service= # 添加服務(wù)
--remove-service= # 移除服務(wù)
--list-services # 顯示當(dāng)前區(qū)域內(nèi)允許訪問的所有服務(wù)
--add-port=xx/tcp # 添加端口,后面要指定是TCP還是UDP
--remove-port= # 移除端口,遵循當(dāng)前區(qū)域的target
--list-ports # 顯示指定區(qū)域內(nèi)允許訪問的所有端口號
--list-all # 列出當(dāng)前使用的區(qū)域的配置
--list-all-zones # 列出所有區(qū)域的配置
--get-zone-of-interface= # 獲取指定接口所在的區(qū)域
--list-icmp-blocks # 顯示指定區(qū)域內(nèi)拒絕訪問的所有ICMP類型
--list-protocols --列出在指定區(qū)域中允許通過的協(xié)議
3. 常用的增刪改查操作
(1) 查看規(guī)則
查看當(dāng)前區(qū)域的配置信息詳解:
[root@localhost ]# firewall-cmd --list-all
public (active) # 活動的區(qū)域
target: default # 默認(rèn)啟動的區(qū)域
icmp-block-inversion: no # ICMP協(xié)議類型黑白名單開關(guān)(yes/no)
interfaces: eth0 # 關(guān)聯(lián)的網(wǎng)卡接口
sources: # 來源,可以是IP地址,也可以是mac地址
services: dhcpv6-client ssh # 列出允許通過這個防火墻的服務(wù)
ports: 80/tcp # 列出允許通過這個防火墻的目標(biāo)端口。(即 需要對外開放的端口)
protocols: # 協(xié)議值可以是一個協(xié)議 ID 數(shù)字,或者一個協(xié)議名
masquerade: no # 表示這個區(qū)域是否允許 IP 偽裝。如果允許,它將允許 IP 轉(zhuǎn)發(fā),它可以讓你的計算機(jī)作為一個路由器
forward-ports: # 列出轉(zhuǎn)發(fā)的端口
source-ports: # 允許的來源端口
icmp-blocks: # 可添加ICMP類型,當(dāng)icmp-block-inversion為no時,這些ICMP類型被拒絕;當(dāng)icmp-block-inversion為yes時,這些ICMP類型被允許
rich rules: # 富規(guī)則,即更細(xì)致、更詳細(xì)的防火墻規(guī)則策略,它的優(yōu)先級在所有的防火墻策略中也是最高的
rule family="ipv4"source address="192.168.250.0/24" accept
常用的查看信息:
# 查詢默認(rèn)區(qū)域配置信息
firewall-cmd --list-all
# 查看區(qū)域配置信息
firewall-cmd --list-all --zone=work
# 查詢所有端口
firewall-cmd --list-ports
# 查詢指定端口
firewall-cmd --zone=public --query-port=22/tcp
# 查詢放通IP段
firewall-cmd --list-sources
# 查看默認(rèn)區(qū)域
firewall-cmd --get-default-zone
# 查看所有可以使用的區(qū)域
firewall-cmd --get-zones
# 查看活躍的區(qū)域
firewall-cmd --get-active-zones
# 查看網(wǎng)卡綁定在了哪個區(qū)域
firewall-cmd --get-zone-of-interface=[IFACE]
# 查看所有服務(wù)
firewall-cmd --get-services
(2) 添加規(guī)則
開放特定端口:
# 開放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 開放snmp的161的UDP端口,默認(rèn)的zone是public,可以不指定zone
firewall-cmd --add-port=161/udp --permanent
# 讓配置生效
firewall-cmd --reload
# 查看規(guī)則
firewall-cmd --list-ports
firewall-cmd --list-all
放通某個服務(wù):
# 放通nfs服務(wù)的所有端口
firewall-cmd --zone=public --add-service=nfs --permanent
# 放通ssh服務(wù)
firewall-cmd --zone=public --add-service=ssh --permanent
# 放通snmp服務(wù)
firewall-cmd --zone=public --add-service=ssh --permanent
# 重載防火墻
firewall-cmd --reload
# 查看放通了哪些服務(wù)訪問
firewall-cmd --list-services
放通某個網(wǎng)段訪問:
firewall-cmd --add-source=10.10.10.0/24 --zone=public
firewall-cmd --reload
# 查看
firewall-cmd --list-sources
(3) 刪除規(guī)則
# 刪除開放的3306端口
firewall-cmd --permanent --remove-port=3306/tcp
firewall-cmd --reload
# 刪除nfs服務(wù)
firewall-cmd --permanent --remove-service=nfs
# 刪除某個網(wǎng)段訪問
firewall-cmd --permanent --zone=public --remove-source=10.10.10.0/24
firewall-cmd --reload
五、Firewalld防火墻富規(guī)則
富規(guī)則是為了更細(xì)粒度的管控,在生產(chǎn)環(huán)境用的比較多,重點掌握。
1. 富規(guī)則常用的選項
firewall-cmd
--list-rich-rules --列出富規(guī)則
--add-rich-rule=<rule> --添加富規(guī)則
--remove-rich-rule=<rule> --移除富規(guī)則
--list-all 和 --list-all-zones --也能列出存在的富規(guī)則
2. 富規(guī)則語法
規(guī)則的幾乎每個單一元素都能夠以option=value形式來采用附加參數(shù):
rule
[source]
[destination]
service|port|protocol|icmp-block|masquerade|forward-port
[log]
[audit]
[accept|reject|drop]
格式:
rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="True"]
destination address="address[/mask]" invert="True"
service name="service name"
port port="port value" protocol="tcp|udp"
protocol value="protocol value"
forward-port port="port value" protocol="tcp|udp" to-port="port value
" to-addr="address"
log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"]
accept | reject [type="reject type"] | drop
3. 常用的富規(guī)則配置
(1)對特定IP訪問特定端口
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="10.10.10.110/32" port port="1521" protocol="tcp" accept"
firewall-cmd --reload
(2)批量加端口,允許某個網(wǎng)段訪問多個端口
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.10.10.0/24 port port=8080-8090 protocol=tcp accept'
firewall-cmd --reload
(3) 開通某個IP訪問某個服務(wù)
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 service name=nfs source address="10.10.10.101/32" accept'
firewall-cmd --reload
(4) 拒絕某個IP訪問所有端口
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.10.10.110/32 reject'
firewall-cmd --reload
(5)允許某個IP訪問所有端口
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.10.10.110/32 allow'
firewall-cmd --reload