linux7 防火牆,firewall的說明及相關配置註釋

防火牆安全

Redhat Enterprise Linux7已經默認使用firewalld做爲防火牆,其使用方式已經變化。服務器

基於iptables的防火牆被默認不啓動,但仍然能夠繼續使用。網絡

RHEL7中有幾種防火牆共存:firewalldiptablesebtables等,默認使用firewalld做爲防火牆,管理工具是firewall-cmdRHEL7的內核版本是3.10,在此版本的內核裏防火牆的包過濾機制是firewalld,使用firewalld來管理netfilter,不過底層調用的命令仍然是iptables等。由於這幾種daemon是衝突的,因此建議禁用其餘幾種服務ssh

wKioL1b44ETxSYocAAAw9sDNvPM145.png 

例如若要禁用iptablesip6tablesebtables防火牆,方法以下圖tcp

wKiom1b437LwKLNQAAAKSz634Kk141.png 

ide

wKioL1b44GGzHeeTAAAFgzhItXw135.png 

查看這幾種服務是否正在運行工具

wKioL1b44HnT2KlfAAAmDekkh7Y786.png 

ui

wKioL1b44JiBrkFGAAAOCcVdWmg017.png 

RHEL7雖然有iptables可是不建議使用了,使用新的firewalld服務。url

查看firewalld軟件包是否安裝spa

wKiom1b44BjwSbt1AAADqdbewpc270.png 

Firewalld提供了支持網絡/防火牆區域(zone)定義網絡連接以及接口安全等級的防火牆管理工具。擁有運行時配置和永久配置選項。它也支持容許服務或者應用程序直接添加防火牆規則的接口。之前的 system-config-firewall防火牆模型是靜態的,每次修改都要求防火牆徹底重啓。這個過程包括內核 netfilter 防火牆模塊的卸載和新配置所需模塊的裝載等。相反,firewall daemon 動態管理防火牆,不須要重啓整個防火牆即可應用更改。於是也就沒有必要重載全部內核防火牆模塊了。

wKioL1b44MeTifpdAAKbTab-0Q4366.png 

 

什麼是區域網絡區域定義了網絡鏈接的可信等級。wKiom1b44DrD87EmAAAcus7xOms835.png

spacer.gif

數據包要進入到內核必需要經過這些zone中的一個,而不一樣的zone裏定義的規則不同(即信任度不同,過濾的強度也不同)。能夠根據網卡所鏈接的網絡的安全性來判斷,這張網卡的流量到底使用哪一個zone,好比上圖來自eth0的流量所有使用zone1的過濾規則,eth1的流量使用zone2。一張網卡同時只能綁定到一個zone

 

預約義的服務服務是端口和/或協議入口的組合。

 

端口和協議定義了 tcp udp 端口,端口能夠是一個端口或者端口範圍。

 

ICMP 阻塞能夠選擇 Internet 控制報文協議的報文。這些報文能夠是信息請求亦但是對信息請求或錯誤條件建立的響應。

 

假裝私有網絡地址能夠被映射到公開的IP地址。這是一次正規的地址轉換。

 

端口轉發端口能夠映射到另外一個端口以及/或者其餘主機。

 

在進行firewalld配置以前,我想來討論一下區域(zones)這個概念。默認狀況就有一些有效的區域。firewalld 提供的區域按照從不信任到信任的順序排序。

丟棄區域(Drop Zone):若是使用丟棄區域,任何進入的數據包將被丟棄。這個相似與咱們以前使用iptables -j drop。使用丟棄規則意味着將不存在響應。

阻塞區域(Block Zone):阻塞區域會拒絕進入的網絡鏈接,返回icmp-host-prohibited,只有服務器已經創建的鏈接會被經過即只容許由該系統初始化的網絡鏈接。

公共區域(Public Zone):只接受那些被選中的鏈接,默認只容許 ssh dhcpv6-client。這個 zone 是缺省 zone

外部區域(External Zone):這個區域至關於路由器的啓用假裝(masquerading)選項。只有指定的鏈接會被接受,即ssh,而其它的鏈接將被丟棄或者不被接受。

隔離區域(DMZ Zone):若是想要只容許給部分服務能被外部訪問,能夠在DMZ區域中定義。它也擁有隻經過被選中鏈接的特性,即ssh

工做區域(Work Zone):在這個區域,咱們只能定義內部網絡。好比私有網絡通訊才被容許,只容許sshipp-clientdhcpv6-client

家庭區域(Home Zone):這個區域專門用於家庭環境。它一樣只容許被選中的鏈接,即sshipp-clientmdnssamba-clientdhcpv6-client

內部區域(Internal Zone):這個區域和工做區域(Work Zone)相似,只有經過被選中的鏈接,和home區域同樣。

信任區域(Trusted Zone):信任區域容許全部網絡通訊經過。記住:由於trusted是最被信任的,即便沒有設置任何的服務,那麼也是被容許的,由於trusted是容許全部鏈接的

以上是系統定義的全部的 zone,可是這些 zone 並非都在使用。只有活躍的 zone 纔有實際操做意義。

Firewalld的原則:

若是一個客戶端訪問服務器,服務器根據如下原則決定使用哪一個 zone 的策略去匹配

1.若是一個客戶端數據包的源 IP 地址匹配 zone  sources,那麼該 zone 的規則就適

用這個客戶端;一個源只能屬於一個zone,不能同時屬於多個zone

2.若是一個客戶端數據包進入服務器的某一個接口(如eth0)區配zoneinterfaces

則麼該 zone 的規則就適用這個客戶端;一個接口只能屬於一個zone,不能同時屬於多個zone

3.若是上述兩個原則都不知足,那麼缺省的 zone 將被應用

你可使用任何一種 firewalld 配置工具來配置或者增長區域,以及修改配置。工具備例如firewall-config 這樣的圖形界面工具, firewall-cmd 這樣的命令行工具,或者你也能夠在配置文件目錄中建立或者拷貝區域文件/usr/lib/firewalld/zones 被用於默認和備用配置,/etc/firewalld/zones 被用於用戶建立和自定義配置文件。

命令行工具firewall-cmd支持所有防火牆特性,基本應用以下:

通常應用:

一、 獲取firewalld狀態

wKiom1b44IPi5c4UAAADOwVmzYE431.png 

2在不改變狀態的條件下從新加載防火牆:

wKiom1b44JbTR-UiAAADChBIlho516.png 

若是你使用--complete-reload,狀態信息將會丟失。

3獲取支持的區域列表

wKiom1b44KThkZ5AAAAFKVrwMxg301.png 

這條命令輸出用空格分隔的列表

4獲取全部支持的服務

wKioL1b44VKTsQ-0AAARIASdSZI461.png 

這條命令輸出用空格分隔的列表。

服務是firewalld所使用的有關端口和選項的規則集合。被啓動的服務會在firewalld服務開啓或者運行時自動加載。默認狀況下,不少服務是有效的。使用下面命令可列出有效的服務。

想要列出默認有效的服務,也能夠進入下面的目錄也可以取得。

# cd /usr/lib/firewalld/services/

wKioL1b44WKiVQijAAA2jGHmz_A542.png 

想要建立本身的服務,須要在下面的目錄下定義它。好比,如今我想添加一個rhmp服務,端口號1935。首先,任選一個服務複製過來。

wKioL1b44W-hYDNQAAALlHlDH0k961.png 

接下來把複製過來的文件重命名爲「rtmp.xml」,

wKiom1b44O7gE6WIAAAKXNcpWXE897.png 

接下來打開並編輯文件的頭部、描述、協議和端口號,以供RTMP服務使用,以下圖所示。

wKiom1b44QLCiIyOAAAKpMQ8s74188.png 

重啓firewalld服務或者從新加載設置,以激活這些設置。

# firewall-cmd --reload

爲確認服務是否已經啓動,運行下面的命令獲取有效的服務列表。

# firewall-cmd --get-services

wKioL1b44bKwqrlLAAAStbNic9s448.png 

5獲取全部支持的ICMP類型

wKiom1b44SbwQq8CAAAIx8qMuCw777.png 

這條命令輸出用空格分隔的列表。

6列出所有啓用的區域的特性(即查詢當前防火牆策略)

解釋:特性能夠是定義的防火牆策略,如:服務、端口和協議的組合、端口/數據報轉發、假裝、ICMP 攔截或自定義規則等

wKiom1b44TryTeD3AAAQENBfVLg669.png 

上面的命令將會列出每種區域如blockdmzdropexternalhomeinternalpublictrusted以及work。若是區域還有其它詳細規則(rich-rules)、啓用的服務或者端口,這些區域信息也會分別被羅列出來

7輸出區域所有啓用的特性。若是略區域,將顯示默認區域的信息。

firewall-cmd [--zone=] --list-all

wKiom1b44UvDliQpAAAKtSppA2k817.png 

輸出指定區域啓動的特性

wKioL1b44fujWbUOAAALWGIAMNM681.png 

8、查看默認區域

wKiom1b44WyTNWW9AAADn5B0pZg950.png 

public區域是默認區域。

在文件/etc/firewalld/firewalld.conf中定義成DefaultZone=public

9設置默認區域

firewall-cmd --set-default-zone=區域名

wKioL1b44iThrqEdAAAGsGBVwxs893.png 

流入默認區域中配置的接口的新訪問請求將被置入新的默認區域。當前活動的鏈接將不受影響。

10獲取活動的區域

wKiom1b44ZizHu4ZAAAGt4z4Rts624.png 

這條命令將用如下格式輸出每一個區域所含接口:

區域名

interfaces :  接口名

11根據接口獲取區域即須要查看哪一個區域和這個接口綁定即查看某個接口是屬於哪一個zone的:

firewall-cmd --get-zone-of-interface=接口名

wKioL1b44kngcJWhAAAETDdLPKU110.png 

這條命令將輸出接口所屬的區域名稱。

12將接口(網卡)增長到區域

firewall-cmd [--zone=] --add-interface=接口名

wKioL1b44ljRyko5AAAD0QUmlyk666.png 

若是接口不屬於區域,接口將被增長到區域。若是區域被省略了,將使用默認區域。接口在從新加載後將從新應用。

13修改接口所屬區域

firewall-cmd [--zone=] --change-interface=接口名

wKiom1b44czRIojsAAAEr_KZqYY098.png 

這個選項與 --add-interface 選項類似,可是當接口已經存在於另外一個區域的時候,該接口將被添加到新的區域。

14從區域中刪除一個接口

firewall-cmd [--zone=] --remove-interface=接口名

wKiom1b44d-zA0aIAAAK8eKFb24912.png 

注:若是某個接口不屬於任何Zone,那麼這個接口的全部數據包使用默認的Zone的規則

15查詢區域中是否包含某接口

firewall-cmd [--zone=] --query-interface=接口名

wKioL1b44onhOUfMAAAD7NWN3B0094.png 

若是區域被省略了,將使用默認區域

16列舉區域中啓用的服務

firewall-cmd [ --zone= ] --list-services

wKiom1b44fzB-O0BAAAD_9laaFQ271.png 

若是區域被省略了,將使用默認區域

查看home區域中啓用服務

wKiom1b44hzwY9eWAAAFL-LCZhI807.png 

17啓用應急模式阻斷全部網絡鏈接,以防出現緊急情況

wKioL1b44s-iXV79AAADFQmcs8o855.png 

18禁用應急模式

firewall-cmd --panic-off

19查詢應急模式

firewall-cmd --query-panic

其餘相關的配置項能夠查看firewall-cmd的手冊頁:#man  firewall-cmd

處理運行時區域

運行時模式下對區域進行的修改不是永久有效的。從新加載或者重啓後修改將失效。

1啓用區域中的一種服務給某個區域開啓某個服務

firewall-cmd [--zone=區域] --add-service=服務 [--timeout=秒數]

操做啓用區域中的一種服務。若是未指定區域,將使用默認區域。若是設定了超時時間,服務將只啓用特定秒數。

wKiom1b44j6QZT54AAAR0RdrxLo158.png 

使區域中的 ipp-client 服務生效60:

啓用默認區域中的http服務:firewall-cmd --add-service=http

2禁用區域中的某種服務即關閉某個服務

firewall-cmd [--zone=區域] --remove-service=服務

此舉禁用區域中的某種服務。若是未指定區域,將使用默認區域。

:禁止默認區域中的 http 服務:

wKiom1b44knSlCFrAAAPT9UWxBk936.png 

3查詢區域中是否啓用了特定服務

firewall-cmd [--zone=區域] --query-service=服務

wKioL1b44vPgWcP8AAAEa2YbCbA966.png 

Yes表示服務啓用,no表示服務關掉了。

4啓用區域端口和協議組合

firewall-cmd [--zone=區域] --add-port=portid[-portid]/protocol [--timeout=seconds]

操做將啓用端口和協議的組合。端口能夠是一個單獨的端口或者是一個端口範圍 - 。協議能夠是tcpudp

wKiom1b44l-zhfjlAAAWDqoAHlY195.png 

5禁用端口和協議組合

firewall-cmd [--zone=區域] --remove-port=portid[-portid]/protocol

wKioL1b44wuiwtElAAAD6qoa3Iw390.png 

6查詢區域中是否啓用了端口和協議組合

firewall-cmd [--zone=區域] --query-port=portid[-portid]/protocol

wKiom1b44nnSWZkjAAAD801LKVY605.png 

7啓用區域中的 IP 假裝功能

firewall-cmd [--zone=區域] --add-masquerade

操做啓用區域的假裝功能。私有網絡的地址將被隱藏並映射到一個公有IP。這是地址轉換的一種形式,經常使用於路由。因爲內核的限制,假裝功能僅可用於IPv4

8禁用區域中的 IP 假裝

firewall-cmd [--zone=區域] --remove-masquerade

9查詢區域的假裝狀態

firewall-cmd [--zone=區域] --query-masquerade

10啓用區域的 ICMP 阻塞功能

firewall-cmd [--zone=區域] --add-icmp-block=icmp類型

wKiom1b44oTgUP37AAAEJgqgrEs360.png 

操做將啓用選中的 Internet 控制報文協議(ICMP)報文進行阻塞。 ICMP 報文能夠是請求信息或者建立的應答報文,以及錯誤應答。

11禁止區域的 ICMP 阻塞功能

firewall-cmd [--zone=區域] --remove-icmp-block=icmp類型

12查詢區域的 ICMP 阻塞功能

firewall-cmd [--zone=區域] --query-icmp-block=icmp類型

13在區域中啓用端口轉發或映射

firewall-cmd [--zone=區域] --add-forward-port=port=portid[-portid]:proto=protocol[ :toport=portid[-portid]][ :toaddr=address [/mask]]

端口能夠映射到另外一臺主機的同一端口,也能夠是同一主機或另外一主機的不一樣端口。端口號能夠是一個單獨的端口或者是端口範圍 - 。協議能夠爲tcpudp。目標端口能夠是端口號或者是端口範圍 - 。目標地址能夠是 IPv4 地址。受內核限制,端口轉發功能僅可用於IPv4

意思是凡是來從external進來的22端口的數據包所有轉發到211.106.65.50

firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=211.106.65.50

14禁止區域的端口轉發或者端口映射

firewall-cmd [--zone=] --remove-forward-port=port=portid[-portid]:proto=protocol[ :toport=portid[-portid]][ :toaddr=address [/mask]]

15查詢區域的端口轉發或者端口映射

firewall-cmd [--zone=]--query-forward-port=port=portid[-portid]:proto=protocol[ :toport=portid[-portid]][ :toaddr=address [/mask]]

處理永久區域

永久選項不直接影響運行時的狀態。這些選項僅在重載或者重啓服務時可用。爲了使用運行時和永久設置,須要分別設置二者。選項--permanent須要是永久設置的第一個參數。

1獲取永久選項所支持的服務

firewall-cmd --permanent --get-services

2獲取永久選項所支持的ICMP類型列表

firewall-cmd --permanent --get-icmptypes

3獲取支持的永久區域

firewall-cmd --permanent --get-zones

4、配置防火牆在public區域打開http協議,並保存,以至重啓有效

firewall-cmd --permanent --zone=public --add-service=http

查看永久模式下public區域是否打開http服務。

firewall-cmd --permanent --zone=public --query-service=http

5、防火牆開放8080端口在public區域

firewall-cmd --permanent --zone=public --add-port=8080/tcp

6、僅容許部分IP訪問本機服務配置

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4"

source address="192.168.0.0/24" service name="http" accept"

禁止遠程IP訪問ssh

firewall-cmd --permanent --zone=public --add-rich-rule=’rule family=ipv4

source address=192.168.0.0/24 service name=ssh accept’

查看rich規則

Firewall-cmd  --list-rich-rules

7、刪除rich規則

firewall-cmd --permanent --zone=public --remove-rich-rule=’rule family=ipv4

source address=192.168.0.0/24 service name=ssh accept’

8、僅容許部分IP訪問本機端口配置

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4"

source address="192.168.0.0/24"port protocol="tcp" port="8080" accept"

9、建立rich規則,能夠指定日誌的前綴和輸出級別

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.4/24"port port=8080 protocol="tcp" log prefix=proxy level=warning accept"

能夠經過查看/var/log/messages日誌文件

10端口轉發。實驗環境下,desktop訪問server5423端口,將訪問server80端口。

Server上的操做:(172.25.0.10desktopIP地址)

wKioL1b44zfQ2QRbAAAIQC2zWS0592.png 

11172.25.1.0/24網段內的客戶端不能訪問主機的SSH

wKiom1b44qeTCzpMAAAKpmUAtg8924.png 

12、也可經過配置如下XML文件,進行對防火牆的配置修改

#cat /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>

<zone>

<short>Public</short>

<description>For use in public areas. You do not trust the other computers on networks

               to not harm your computer. Only selected incoming connections are accepted.</description>

<service name="dhcpv6-client"/>

<service name="ssh"/>

<rule family="ipv4">

<source address="192.168.0.4/24"/>

<service name="http"/>

<accept/>

</rule>

</zone>

總結

netfilter 防火牆老是容易受到規則順序的影響,由於一條規則在鏈中沒有固定的位置。在一條規則以前添加或者刪除規則都會改變此規則的位置。在靜態防火牆模型中,改變防火牆就是重建一個乾淨和完善的防火牆設置,默認鏈一般也沒有安全的方式添加或刪除規則而不影響其餘規則。

動態防火牆有附加的防火牆功能鏈。這些特殊的鏈按照已定義的順序進行調用,於是向鏈中添加規則將不會干擾先前調用的拒絕和丟棄規則。從而利於建立更爲合理完善的防火牆配置。

下面是一些由守護進程建立的規則,過濾列表中啓用了在公共區域對 ssh , mdns ipp-client 的支持:

wKiom1b44rSzaApxAAAsZ4IgH1U231.png 

總結:

圖形化配置工具

firewall daemon 主要的配置工具是firewall-config。它支持防火牆的全部特性。管理員也能夠用它來改變系統或用戶策略。

命令行客戶端

firewall-cmd是命令行下提供大部分圖形工具配置特性的工具。

附錄:要想了解更多firewall防火牆更多知識能夠查看firewall的相關手冊頁,下圖所顯示的就是firewall防火牆的相關手冊頁:

wKiom1b44sDhFnCdAAAhiPbiLj0245.png 

若要查看rich-rule手冊頁

wKioL1b446GjgORkAAAKhilyZog724.png 

wKioL1b4427zMXitAAAC5NscZxQ554.png 

例如:容許icmp協議的數據包通訊

wKiom1b44vGjr1dsAAAECm6CsBc220.png

相關文章
相關標籤/搜索