一個防火牆是保護機從任何不必要的流量之外的方法。它使用戶能夠通過定義一組
防火牆規則來控制主機上的傳入網絡流量。這些規則用於對傳入流量進行排序,並阻止或允許通過。firewalld是一個防火牆服務守護程序,它提供帶有D-Bus接口的動態可定製的基於主機的防火牆。它是動態的,可以創建,更改和刪除規則,而無需在每次更改規則時重新啟動防火牆守護程序。
firewalld使用區域和服務的概念,簡化流量管理。區域是預定義的規則集。可以將網絡接口和源分配給區域。允許的流量取決於計算機所連接的網絡以及此網絡的安全級別。防火牆服務是預定義的規則,涵蓋了允許特定服務的傳入流量並在區域內應用的所有必要設置。
服務使用一個或多個端口或地址進行網絡通信。防火牆根據端口過濾通信。要允許服務的網絡流量,必須打開其端口。firewalld阻止未明確設置為打開的端口上的所有流量。某些區域(如可信 區域)默認允許所有流量。
1、zone區域
firewalld可以用於根據用戶決定放置在該網絡中的接口和流量上的信任級別將網絡分成不同的區域。連接只能是一個區域的一部分,但區域可用於許多網絡連接。
NetworkManager通知firewalld接口的區域。您可以使用 firewall-config工具或命令行工具為具有 NetworkManager的接口分配區域。後兩者只編輯相應的 NetworkManager配置文件。如果使用或 firewall-config更改接口的區域,請求將轉發到 NetworkManager,而不由處理。 firewall-cmdfirewall-cmdfirewalld
預定義區域存儲在/usr/lib/firewalld/zones/目錄中,可以立即應用於任何可用的網絡接口。這些文件/etc/firewalld/zones/只有在修改後才會複製到目錄中。下表介紹了預定義區域的默認設置:
block
任何傳入的網絡連接都會被icmp-host-prohibited消息拒絕,IPv4並禁止icmp6-adm- for IPv6。只能從系統內啟動網絡連接。
dmz
既不屬於外網也不屬於內網的獨特區域,對於非軍事區中的計算機,這些計算機可公開訪問,並且對內部網絡的訪問權限有限。僅接受選定的傳入連接。
drop
在沒有任何通知的情況下丟棄任何傳入網絡數 只能進行傳出網絡連接。
external
用於在啟用偽裝的外部網絡上使用,尤其適用於路由器。您不相信網絡上的其他計算機不會損害您的計算機。僅接受選定的傳入連接。
home
當您主要信任網絡上的其他計算機時,可在家中使用。僅接受選定的傳入連接。
internal
當您最信任網絡上的其他計算機時,用於內部網絡。僅接受選定的傳入連接。
public
用於您不信任網絡上其他計算機的公共區域。僅接受選定的傳入連接。
trusted
接受所有網絡連接。
work
用於您最信任網絡上其他計算機的工作。僅接受選定的傳入連接。
其中一個區域設置為默認區域。將接口連接添加到NetworkManager時,會將它們分配給默認區域。安裝時,默認區域firewalld設置為public區域。可以更改默認區域。
2、運行時和永久設置
在運行時模式下提交的任何更改僅在運行時應用firewalld。當firewalld重新啟動,設置恢復到它們的永久值。
要使更改在重新引導後保持不變,請使用該--permanent選項再次應用它們。或者,要在firewalld運行時進行持久更改,請使用該--runtime-to-permanent firewall-cmd選項。
如果在firewalld僅使用該--permanent選項運行時設置規則,則在firewalld重新啟動之前它們不會生效。但是,重新啟動會firewalld關閉所有打開的端口並停止網絡流量。
3、使用CLI在運行時和永久配置中修改設置
使用CLI,您不能同時在兩種模式下修改防火牆設置。您只能修改運行時或永久模式。要在永久模式下修改防火牆設置,請使用--permanent帶有該firewall-cmd命令的選項。
firewall-cmd --permanent <other>
如果沒有此選項,該命令將修改運行時模式。
要在兩種模式下更改設置,可以使用兩種方法:
更改運行時設置,然後將其永久化,如下所示:
#firewall-cmd <other>
#firewall-cmd --runtime-to-permanent
- 設置永久設置並將設置重新加載到運行時模式:
#firewall-cmd --permanent <other>
#firewall-cmd --reload
第一種方法允許您在將設置應用於永久模式之前測試設置。
注意!!!
特別是在遠程系統上,不正確的設置可能導致用戶將自己鎖定在機器外。要防止出現這種情況,請使用該--timeout選項。在指定的時間後,任何更改都將恢復為其先前的狀態。使用此選項排除了該--permanent選項。
例如,要添加SSH服務15分鐘:
# firewall-cmd --add-service=ssh --timeout 15m
4、常用命令
要停止firewalld,請作為根用戶輸入以下命令:
~]# systemctl stop firewalld
要防止firewalld在系統啟動時自動啟動,請以root用戶身份發出以下命令:
~]# systemctl disable firewalld
要啟動firewalld,請作為根用戶輸入以下命令:
~]# systemctl start firewalld
要確保firewalld在系統啟動時自動啟動,請以root用戶身份輸入以下命令:
~]# systemctl enable firewalld
若要檢查firewalld是否正在運行,請輸入以下命令:
~]$ systemctl status firewalld
另外,檢查firewall-cmd是否可以通過輸入以下命令連接到守護進程:
~]$ firewall-cmd --state
要查看活動區域列表,以及當前分配給它們的接口列表,請輸入以下命令:
~]$ firewall-cmd --get-active-zones
要找出接口(例如em1)當前分配到的區域,請輸入以下命令:
~]$ firewall-cmd --get-zone-of-interface=em1
要找出分配給某個區域(例如公共區域)的所有接口,請輸入以下命令作為根:
~]# firewall-cmd --zone=public --list-interfaces
若要查找區域(例如公共區域)的所有設置,請輸入以下命令作為根:
~]# firewall-cmd --zone=public --list-all
要查看當前加載的服務列表,請以root用戶身份輸入以下命令:
~]# firewall-cmd --get-services
如果自定義服務已經創建,但沒有加載,可以列出如下:
~]# firewall-cmd --permanent --get-services
要開始刪除所有傳入和傳出的數據包:
~]# firewall-cmd --panic-on
要重新開始傳遞傳入和傳出數據包:
~]# firewall-cmd --panic-off
允許ssh服務通過
~]#firewall-cmd --enable service=ssh
打開80端口:
~]# firewall-cmd --zone=internal --add-port=80/tcp
~] # firewall-cmd – reload
端口轉發,22to3777:
~]# firewall-cmd --zone=external --add-masquerade //啟用偽裝。
~] # firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=322 //將區域external的22號端口轉到322端口。
要在不中斷用戶連接(不丟失狀態信息)的情況下重新加載防火牆,請作為根用戶輸入以下命令:
~]# firewall-cmd --reload
若要重新加載防火牆並中斷用戶連接,丟棄狀態信息,請作為根用戶輸入以下命令:
~]# firewall-cmd --complete-reload
要向專區添加接口(例如,要將em1添加到公共專區),請作為根用戶輸入以下命令:
~]# firewall-cmd --zone=public --add-interface=em1
要獲得默認區域(例如,為public),輸入以下命令作為根:
~]# firewall-cmd --get-default-zone
要設置默認區域(例如,為public),輸入以下命令作為根:
~]# firewall-cmd --set-default-zone=public
要列出一個區域(例如dmz)的所有打開端口,輸入以下命令作為根:
~]# firewall-cmd --zone=dmz --list-ports
要將端口添加到區域(例如,允許TCP流量將端口8080添加到dmz區域),輸入以下命令作為根:
~]# firewall-cmd --zone=dmz --add-port=8080/tcp
要向區域添加一個端口範圍(例如,要允許從5060到5061的端口到公共區域,輸入以下命令作為根:
~]# firewall-cmd --zone=public --add-port=5060-5061/udp
要向專區添加服務(例如,允許SMTP進入工作專區),請作為根用戶輸入以下命令:
~]# firewall-cmd --zone=work --add-service=smtp
要從區域中刪除服務(例如,要從工作區域中刪除SMTP),輸入以下命令作為根:
~]# firewall-cmd --zone=work --remove-service=smtp
要將自定義規則添加到“IN_public_allow”鏈,可以發出以下命令作為根:
~]# firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 123 -j ACCEPT
要從“IN_public_allow”鏈中刪除自定義規則,可以發出以下命令作為根:
~]# firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 123 -j ACCEPT
要列出“IN_public_allow”鏈中的規則,可以發出以下命令作為根:
~]# firewall-cmd --direct --get-rules ipv4 filter IN_public_allow
閱讀更多 一個路過的醬油瓶 的文章