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