Linux系统 iptables 和 firewalld 的那些事
Linux系統(tǒng) firewalld防火墻
- 一、firewalld概述
- 二、firewalld 與 iptables 的區(qū)別
- 三、firewalld 區(qū)域的概念
- 1.firewalld防火墻預(yù)定義了9個區(qū)域
- 四、firewalld數(shù)據(jù)處理流程
- 1.firewalld檢查數(shù)據(jù)包的源地址的規(guī)則
- 五、firewalld防火墻的配置方法
- 1.常用的firewall-cmd 命令選項
- 六、區(qū)域管理
- 七、服務(wù)管理
- 八、端口管理
一、firewalld概述
- firewalld防火墻是Centos7系統(tǒng)默認(rèn)的防火墻管理工具,取代了之前的iptables防火墻也是工作在網(wǎng)絡(luò)層,屬于包過濾防火墻。
- firewalld和iptables都是用來管理防火墻的工具(屬于用戶態(tài))來定義防火墻的各種規(guī)則功能,內(nèi)部結(jié)構(gòu)都指向netfilter網(wǎng)絡(luò)過濾子系統(tǒng)(屬于內(nèi)核態(tài))來實現(xiàn)包過濾防火墻功能。
- firewalld提供了支持網(wǎng)絡(luò)區(qū)域所定義的網(wǎng)絡(luò)鏈接以及接口安全等級的動態(tài)防火墻管理工具。
- 支持IPv4、IPv6防火墻設(shè)置以及以太網(wǎng)橋(在某些高級服務(wù)可能會用到,比如云計算)
- 擁有兩種配置模式:運行時配置與永久配置。
二、firewalld 與 iptables 的區(qū)別
1、iptables主要是基于接口,來設(shè)置規(guī)則,從而判斷網(wǎng)絡(luò)的安全性。
firewalld是基于區(qū)域,根據(jù)不同的區(qū)域來設(shè)置不同的規(guī)則,從而保證網(wǎng)絡(luò)的安全。與硬件防火墻的設(shè)置相類似。
2、iptables 在 /etc/sysconfig/iptables 中儲存配置,
firewalld 將配置儲存在 /etc/firewalld/(優(yōu)先加載)和 /usr/lib/firewalld/(默認(rèn)的配置文件)中的各種 XML 文件里。
3、使用 iptables 每一個單獨更改意味著清除所有舊有的規(guī)則和從/etc/sysconfig/iptables 里讀取所有新的規(guī)則。
使用 firewalld 卻不會再創(chuàng)建任何新的規(guī)則,僅僅運行規(guī)則中的不同之處。因此firewalld 可以在運行時間內(nèi),改變設(shè)置而不丟失現(xiàn)行連接。
三、firewalld 區(qū)域的概念
firewalld防火墻為了簡化管理,將所有網(wǎng)絡(luò)流量分為多個區(qū)域(zone)。然后根據(jù)數(shù)據(jù)包的源IP地址或傳入的網(wǎng)絡(luò)接口等條件將流量傳入相應(yīng)區(qū)域。每個區(qū)域都定義了自己打開或者關(guān)閉的端口和服務(wù)列表。
1.firewalld防火墻預(yù)定義了9個區(qū)域
| trusted(信任區(qū)域) | 允許所有的傳入流量。 |
| public(公共區(qū)域) | 允許與ssh或dhcpv6-client預(yù)定義服務(wù)匹配的傳入流量,其余均拒絕。是新添加網(wǎng)絡(luò)接口的默認(rèn)區(qū)域。 |
| external(外部區(qū)域) | 允許與 ssh 預(yù)定義服務(wù)匹配的傳入流量,其余均拒絕。 默認(rèn)將通過此區(qū)域轉(zhuǎn)發(fā)的IPv4傳出流量將進行地址偽裝,可用于為路由器啟用了偽裝功能的外部網(wǎng)絡(luò)。 |
| home(家庭區(qū)域) | 允許與ssh、ipp-client、mdns、samba-client或dhcpv6-client預(yù)定義服務(wù)匹配的傳入流量,其余均拒絕。 |
| internal(內(nèi)部區(qū)域) | 默認(rèn)值時與home區(qū)域相同。 |
| work(工作區(qū)域) | 允許與 ssh、ipp-client、dhcpv6-client 預(yù)定義服務(wù)匹配的傳入流量,其余均拒絕。 |
| dmz(隔離區(qū)域也稱為非軍事區(qū)域) | 允許與 ssh 預(yù)定義服務(wù)匹配的傳入流量,其余均拒絕。 |
| block(限制區(qū)域) | 拒絕所有傳入流量。 |
| drop(丟棄區(qū)域) | 丟棄所有傳入流量,并且不產(chǎn)生包含 ICMP的錯誤響應(yīng)。 |
最終一個區(qū)域的安全程度是取決于管理員在此區(qū)域中設(shè)置的規(guī)則。
區(qū)域如同進入主機的安全門,每個區(qū)域都具有不同限制程度的規(guī)則,只會允許符合規(guī)則的流量傳入。
可以根據(jù)網(wǎng)絡(luò)規(guī)模,使用一個或多個區(qū)域,但是任何一個 活躍區(qū)域 至少需要關(guān)聯(lián) 源地址或接口。
默認(rèn)情況下,public區(qū)域是默認(rèn)區(qū)域,包含所有接口(網(wǎng)卡)
四、firewalld數(shù)據(jù)處理流程
firewalld對于進入系統(tǒng)的數(shù)據(jù)包,會根據(jù)數(shù)據(jù)包的源IP地址或傳入的網(wǎng)絡(luò)接口等條件,將數(shù)據(jù)流量轉(zhuǎn)入相應(yīng)區(qū)域的防火墻規(guī)則。對于進入系統(tǒng)的數(shù)據(jù)包,首先檢查的就是其源地址。
1.firewalld檢查數(shù)據(jù)包的源地址的規(guī)則
1、若源地址關(guān)聯(lián)到特定的區(qū)域(即源地址或接口綁定的區(qū)域有沖突),則執(zhí)行該區(qū)域所制定的規(guī)則。
2、若源地址未關(guān)聯(lián)到特定的區(qū)域(即源地址或接口綁定的區(qū)域沒有沖突),則使用傳入網(wǎng)絡(luò)接口的區(qū)域并執(zhí)行該區(qū)域所制定的規(guī)則。
3、若網(wǎng)絡(luò)接口也未關(guān)聯(lián)到特定的區(qū)域(即源地址或接口都沒有綁定特定的某個區(qū)域),則使用默認(rèn)區(qū)域并執(zhí)行該區(qū)域所制定的規(guī)則。
五、firewalld防火墻的配置方法
systemctl start firewalld.service #開啟防火墻1.常用的firewall-cmd 命令選項
--get-default-zone :顯示當(dāng)前默認(rèn)區(qū)域--set-default-zone=<zone> :設(shè)置默認(rèn)區(qū)域--get-active-zones :顯示當(dāng)前正在使用的區(qū)域及其對應(yīng)的網(wǎng)卡接口--get-zones :顯示所有可用的區(qū)域--get-zone-of-interface=<interface> :顯示指定接口綁定的區(qū)域--zone=<zone> --add-interface=<interface> :為指定接口綁定區(qū)域--zone=<zone> --change-interface=<interface> :為指定的區(qū)域更改綁定的網(wǎng)絡(luò)接口--zone=<zone> --remove-interface=<interface> :為指定的區(qū)域刪除綁定的網(wǎng)絡(luò)接口--get-zone-of-source=<source>[/<mask>] :顯示指定源地址綁定的區(qū)域--zone=<zone> --add-source=<source>[/<mask>] :為指定源地址綁定區(qū)域--zone=<zone> --change-source=<source>[/<mask>] :為指定的區(qū)域更改綁定的源地址--zone=<zone> --remove-source=<source>[/<mask>] :為指定的區(qū)域刪除綁定的源地址--list-all-zones :顯示所有區(qū)域及其規(guī)則[--zone=<zone>] --list-all :顯示所有指定區(qū)域的所有規(guī)則,省略--zone=<zone>時表示僅對默認(rèn)區(qū)域操作[--zone=<zone>] --list-services :顯示指定區(qū)域內(nèi)允許訪問的所有服務(wù)[--zone=<zone>] --add-service=<service> :為指定區(qū)域設(shè)置允許訪問的某項服務(wù)[--zone=<zone>] --remove-service=<service> :刪除指定區(qū)域已設(shè)置的允許訪問的某項服務(wù)[--zone=<zone>] --list-ports :顯示指定區(qū)域內(nèi)允許訪問的所有端口號[--zone=<zone>] --add-port=<portid>[-<portid>]/<protocol> :為指定區(qū)域設(shè)置允許訪問的某個/某段端口號(包括協(xié)議名)[--zone=<zone>] --remove-port=<portid>[-<portid>]/<protocol> :刪除指定區(qū)域已設(shè)置的允許訪問的端口號(包括協(xié)議名)[--zone=<zone>] --list-icmp-blocks :顯示指定區(qū)域內(nèi)拒絕訪問的所有 ICMP 類型[--zone=<zone>] --add-icmp-block=<icmptype> :為指定區(qū)域設(shè)置拒絕訪問的某項 ICMP 類型[--zone=<zone>] --remove-icmp-block=<icmptype> :刪除指定區(qū)域已設(shè)置的拒絕訪問的某項ICMP類型firewall-cmd --get-icmptypes :顯示所有 ICMP 類型正如你能從它的名字中猜到的,firewalld 是 systemd 家族的一部分。firewalld 可以安裝在 Debian/Ubuntu 機器上,不過,它默認(rèn)安裝在 RedHat 和 CentOS 上。如果您的計算機上運行著像 Apache 這樣的 web 服務(wù)器,您可以通過瀏覽服務(wù)器的 web 根目錄來確認(rèn)防火墻是否正在工作。如果網(wǎng)站不可訪問,那么 firewalld 正在工作。
你可以使用 firewall-cmd 工具從命令行管理 firewalld 設(shè)置。添加 –state 參數(shù)將返回當(dāng)前防火墻的狀態(tài):
# firewall-cmd --state running默認(rèn)情況下,firewalld 處于運行狀態(tài),并拒絕所有傳入流量,但有幾個例外,如 SSH。這意味著你的網(wǎng)站不會有太多的訪問者,這無疑會為你節(jié)省大量的數(shù)據(jù)傳輸成本。然而,這不是你對 web 服務(wù)器的要求,你希望打開 HTTP 和 HTTPS 端口,按照慣例,這兩個端口分別被指定為 80 和 443。firewalld 提供了兩種方法來實現(xiàn)這個功能。一個是通過 –add-port 參數(shù),該參數(shù)直接引用端口號及其將使用的網(wǎng)絡(luò)協(xié)議(在本例中為TCP)。 另外一個是通過 –permanent 參數(shù),它告訴 firewalld 在每次服務(wù)器啟動時加載此規(guī)則:
# firewall-cmd --permanent --add-port=80/tcp # firewall-cmd --permanent --add-port=443/tcp–reload 參數(shù)將這些規(guī)則應(yīng)用于當(dāng)前會話:
# firewall-cmd --reload查看當(dāng)前防火墻上的設(shè)置,運行 –list-services:
# firewall-cmd --list-servicesdhcpv6-client http https ssh
假設(shè)您已經(jīng)如前所述添加了瀏覽器訪問,那么 HTTP、HTTPS 和 SSH 端口現(xiàn)在都應(yīng)該是和 dhcpv6-client 一樣開放的 —— 它允許 Linux 從本地 DHCP 服務(wù)器請求 IPv6 IP 地址。
六、區(qū)域管理
(1)顯示當(dāng)前系統(tǒng)中的默認(rèn)區(qū)域 firewall-cmd --get-default-zone(2)顯示默認(rèn)區(qū)域的所有規(guī)則 firewall-cmd --list-all(3)顯示當(dāng)前正在使用的區(qū)域及其對應(yīng)的網(wǎng)卡接口 firewall-cmd --get-active-zones(4)設(shè)置默認(rèn)區(qū)域 firewall-cmd --set-default-zone=home firewall-cmd --get-default-zone七、服務(wù)管理
(1)查看默認(rèn)區(qū)域內(nèi)允許訪問的所有服務(wù) firewall-cmd --list-service(2)添加httpd 服務(wù)到public 區(qū)域 firewall-cmd --add-service=http --zone=public(3)查看public 區(qū)域已配置規(guī)則 firewall-cmd --list-all --zone=public(4)刪除public 區(qū)域的httpd 服務(wù) firewall-cmd --remove-service=http --zone=public(5)同時添加httpd、https 服務(wù)到默認(rèn)區(qū)域,設(shè)置成永久生效 firewall-cmd --add-service=http --add-service=https --permanent firewall-cmd --reload firewall-cmd --list-all #添加使用 --permanent選項表示設(shè)置成永久生效,需要重新啟動firewalld服務(wù)或執(zhí)行firewall-cmd --reload命令 重新加載防火墻規(guī)則時才會生效。若不帶有此選項,表示用于設(shè)置運行時規(guī)則,但是這些規(guī)則在系統(tǒng)或firewalld服務(wù)重啟、停止時配置將失效。firewall-cmd--runtime-to-permanent:將當(dāng)前的運行時配置寫入規(guī)則配置文件中,使之成為永久性配置。八、端口管理
(1)允許TCP的443端口到internal區(qū)域 firewall-cmd --zone=internal --add-port=443/tcp firewall-cmd --list-all --zone=internal(2)從internal 區(qū)域?qū)?span id="ozvdkddzhkzd" class="token constant">TCP的443端口移除 firewall-cmd --zone=internal --remove-port=443/tcp(3)允許UDP的2048~2050端口到默認(rèn)區(qū)域 firewall-cmd --add-port=2048-2050/udp firewall-cmd --list-all總結(jié)
以上是生活随笔為你收集整理的Linux系统 iptables 和 firewalld 的那些事的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: i7 7700k内存控制器:性能大比拼,
- 下一篇: linux 其他常用命令