在Internet中,企業通過架設各種應用系統來爲用戶提供各種網絡服務,比如Web網站、電子郵件、FTP服務器等。而且大部分都是使用Linux服務器進行搭建的。那麼,想要保護這些服務器,過濾非授權的訪問,甚至惡意進入內部網絡 。就需要使用到——防火牆。
防火牆除了硬件防火牆之外,Linux系統的防火牆也十分強大,今天主要認識CentOS 7系統的防火牆——firewalld。
一、Linux防火牆基礎
不管是Linux系統、Windows系統的防火牆或者是硬件防火牆都是設置不同網絡與網絡安全之間的一系列部件的組合,也是不同安全域之間信息的唯一出(入)口。通過檢測、限制並更改跨越防火牆的數據流。儘可能地對外屏蔽網絡內部的信息、結構和運行狀態,且可以有選擇的接受外部外部網絡的訪問。在內外網之間架起一道安全的屏障,以避免發生不知情的情況下進入內部網絡,對我們內部網絡產生一定的威脅。
從傳統意義上來說防火牆分爲三類:包過濾、應用代理、狀態檢測。無論一個防火牆的實現過程有多複雜,說到底都是在這三種技術的基礎上進行擴展的。
Linux的防火牆體系主要工作在網絡層,屬於典型的包過濾防火牆(也稱爲網絡層防火牆)。
包過濾防火牆的工作原理:
- 工作在網絡層,針對IP數據包;
- 靜態的打開端口、具有一定的安全隱患;
- 體現在對包內的IP地址、端口等信息的處理上;
狀態檢測防火牆的工作原理:
- 工作在網絡層;
- 動態的打開端口;
應用代理防火牆的工作原理:
- 工作在應用層;
Linux系統的防火牆體系基於內核編碼實現,既有非常穩定的性能和高效率,也因此獲得廣泛的應用。Linux系統的防火牆主要有:firewalld、iptables、ebtables。不過在CentOS 7 系統中默認使用firewalld來管理netfilter子系統。
- netfilter:指的是Linux內核中實現包過濾防火牆的內部結構,不以程序或文件的形式存在,屬於“內核態”的防火牆功能體系;
- firewalld:指用於管理Linux防火牆的命令程序,屬於“用戶態”的防火牆的管理體系。
嚴格意義上來說,netfilter纔是Linux系統的防火牆,firewalld只是管理netfilter的工具而已!
二、firewalld概述
1.firewalld簡介
firewalld提供了支持網絡區域所定義的網絡鏈接以及接口安全等級的動態防火牆管理工具,支持ipv4、ipv6防火牆以及以太網橋,並且擁有兩種配置模式:運行時配置與永久配置。它還支持服務或應用程序直接添加防火牆規則。
2.firewalld的區域
firewalld將所有的網絡數據流量劃分爲多個區域,從而簡化防火牆管理。根據數據包的源IP地址或傳入網絡接口等條件,將數據流量轉入相應區域的防火牆規則。對於進入系統的數據包,首先檢查的就是其源地址。
firewalld數據處理流程:
首先檢查的就是其源地址。
- 若源地址關聯到特定的區域,則執行該區域所制定的規則;
- 若源地址未關聯到特定的區域,則使用傳入網絡接口的區域並執行該區域所制定的規則;
- 若網絡接口未關聯到特定的區域,則使用默認區域並執行該區域所制定的規則;
默認區域不是單獨的區域,而是執行系統上定義的某個其他區域。默認情況下,默認區域是public,系統管理員可以根據實際情況進行修改。
以上匹配規則,按照先後順序,第一個匹配的規則勝出(從上往下、找到即停!)
在每個區域中都可以配置其要打開或者關閉的一系列服務或端口,firewalld的每個預定義的區域默認都開啓一些相應的服務,如圖:
傳出流量:簡單來說就是訪問的資源不是防火牆本身,而是通過防火牆的流量稱爲傳出流量。
3.firewalld防火牆的配置方法
在CentOS 7 系統中,可以使用三種方式配置防火牆:
- firewall-config圖形工具;
- firewall-cmd命令行工具;
- /etc/firewalld/中的配置文件;
通常情況下,不建議直接修改其配置文件!
(1)圖形化管理工具
打開圖形化管理工具的兩種方式:
1)圖形化桌面
2)通過終端命令打開
[root@localhost ~]# firewall-config
由於圖形化簡單易懂,所以這裏就不詳細介紹了!
(2)firewall-cmd命令行工具
1)啓動、停止、查看firewalld服務
[root@localhost ~]# systemctl start firewalld
//啓動firewalld服務
[root@localhost ~]# systemctl enable firewalld
//將firewalld服務設置爲開機自啓動
[root@localhost ~]# systemctl status firewalld
//查看firewalld服務狀態
[root@localhost ~]# firewall-cmd --state
//查看firewalld服務狀態
[root@localhost ~]# systemctl stop firewalld
//停止firewalld服務
[root@localhost ~]# systemctl disable firewalld
//將firewalld服務設置爲開機不自動啓動
2)獲取預定義信息
[root@localhost ~]# firewall-cmd --get-zones
//顯示預定義的區域信息
[root@localhost ~]# firewall-cmd --get-services
//顯示預定義的服務(服務較多,大部分都是常用的,這裏就不介紹了)
[root@localhost ~]# firewall-cmd --get-icmptypes
//顯示預定義的ICMP類型
firewall-cmd --get-icmptypes命令執行結果中各類的含義:
- destination-unreachable:目的地址不可達;
- echo-reply:應答迴應;
- parameter-problem:參數問題;
- redirect:重新定向;
- router-advertisement:路由器通告;
- router-solicitation:路由器徵尋;
- source-quench:源端抑制;
- time-exceeded:超時;
- timestamp-reply:時間戳應答迴應;
- timestamp-request:時間戳請求;
3)區域管理
區域管理命令的常用選項,如圖:
[root@localhost ~]# firewall-cmd --get-default-zone
//顯示當前系統中的默認區域
[root@localhost ~]# firewall-cmd --list-all
//顯示默認區域的所有規則
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
//顯示網絡接口ens33對應的區域
[root@localhost ~]# firewall-cmd --zone=internal --change-interface=ens33
The interface is under control of NetworkManager, setting zone to 'internal'.
success
//將網絡接口ens33對應區域改爲internal區域
[root@localhost ~]# firewall-cmd --zone=internal --list-interfaces
ens33
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
internal
//驗證
[root@localhost ~]# firewall-cmd --get-active-zones
internal
interfaces: ens33
//顯示所有激活區域
4)服務管理
在最新版本firewalld中默認定義了70多種服務供我們使用,對於每個網絡區域,均可以配置允許訪問服務。當需要添加的服務在列表中沒有的話,可以添加端口。
區域服務管理的常用選項,如圖:
[root@localhost ~]# firewall-cmd --list-services
dhcpv6-client ssh
//顯示默認區域允許訪問的服務
[root@localhost ~]# firewall-cmd --add-service=http
//設置默認區域允許訪問http服務
[root@localhost ~]# firewall-cmd --list-services
dhcpv6-client ssh http
//驗證效果
[root@localhost ~]# firewall-cmd --zone=internal --add-port=80/tcp
success
//在internal區域上允許TCP協議80端口訪問
[root@localhost ~]# firewall-cmd --zone=internal --remove-port=443/tcp
success
//在internal區域上禁止TCP協議443端口訪問
[root@localhost ~]# firewall-cmd --list-all --zone=internal
internal (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client mdns samba-client ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
//查看指定區域的詳細配置
使用firewall-cmd命令行工具有兩種配置模式:
- 運行時模式:表示當前內存中運行的防火牆配置,在系統重啓或者firewalld服務重啓時配置將會失效;
- 永久模式:表示重啓firewalld服務或重啓系統時,系統將自動的加載防火牆的規則配置,是永久存儲在配置文件中;
firewall-cmd命令工具與配置模式相關的三個選項:
- --reload:重新加載防火牆並保持狀態信息,即將永久配置應用爲運行時配置;
- --permanent:帶此選項的命令用於設置永久規則,這些規則只有在重新啓動firewalld服務是規則纔會生效;若不帶此選項,表示用於設置運行時規則;
- --runtime-to-permanent:將當前的運行配置寫入規則配置文件中,使其成爲永久配置。
關於firewalld防火牆介紹到此結束!