linux入門系列10--firewalld防火牆管理

来源:https://www.cnblogs.com/heimatengyun/archive/2020/02/15/12310664.html
-Advertisement-
Play Games

上一篇文章學習了用戶及文件相關許可權,本篇繼續學習防火牆技術。 ...


上一篇文章學習了用戶及文件相關許可權,本篇繼續學習防火牆技術。

防火牆作為公網與內網之間的保護屏障,對系統至關重要。防火牆又分為硬體防火牆和軟體防火牆,主要功能都是依據設置的策略對穿越防火牆的流量進行過濾。本篇主要講解Centos7系統自帶的軟體防火牆。

由於在初學階段為了避免干擾很多時候我們都是直接關閉防火牆,但在生產環境這樣做是很不安全的,因此我們需要掌握防火牆的相關配置方法。

一、Linux防火牆概述

Linux系統包含兩個層面的防火牆,一種是基於TCP/IP的流量過濾工具,另外一種是TCP Wrappers服務。前者包括iptables、firewalld等防火牆,後者是能允許或禁止Linux系統提供服務的防火牆,在更高層面保護系統的安全。

在RHEL7系統中,firewalld取代了之前版本的iptables防火牆,成為預設的防火牆。二者有很大區別,iptables的防火牆策略是交由內核層面的netfilter網路過濾器來處理的,而firewalld則是交由內核層面的nftables包過濾框架來處理。

嚴格意義上說,iptables和firewalld都不是真正的防火牆,只是用來定義防火牆策略的防火牆管理工具而已,他們都是一種服務。

防火牆管理工具主要是為了方便運維管理人員對防火牆策略進行配置和管理,這類工具思路大同小異,只要掌握一個即可,本文主要講解firewalld這款防火牆管理工具。

二、firewalld防火牆管理工具

Centos7中集成了多款防火牆工具,其中預設的是firewalld,全稱為:Dynamic Firewall Manager of Linux systems,Linux系統的動態防火牆管理器。它用於命令行界面CLI或圖形用戶界面GUI兩種管理方式,下文將分別進行介紹。

firewalld相比之前傳統的防火牆管理配置工具,它支持動態更新技術並加入了區域(zone)的概念。簡單說就是事先定義幾套防火牆策略模板,用戶根據實際場景進行選擇,從而實現策略之間的快速切換。比如設置好home和work區域的策略後,在家就選擇home區域,在公司就選擇work策略,極大提升了防火牆策略的應用效率。

firewalld中蟬蛹的區功能變數名稱稱和策略規則如下:

區域 預設策略規則
trusted 運行所有的數據包
home 拒絕流入的流量,除非與流出的流量相關。如果流量與ssh、mdns、ipp-client、amba-client、dhcpv6-client服務相關則允許流量
internal 同home
work 拒絕流入的流量,除非與流出的流量數相關。如果流量與 ssh、ipp-client 與 dhcpv6-client 服務相關,則允許流量
public 拒絕流入的流量,除非與流出的流量相關。如果流量與 ssh、dhcpv6-client 服務 相關,則允許流量
external 拒絕流入的流量,除非與流出的流量相關;而如果流量與 ssh 服務相關,則允許流量
dmz 拒絕流入的流量,除非與流出的流量相關;而如果流量與 ssh 服務相關,則允許流量
block 拒絕流入的流量,除非與流出的流量相關
drop 同block

2.1 firewall-cmd

firewall-cmd是 firewalld 防火牆配置管理工具的 CLI(命令行界面)版本。它的參數一般都是以“長格式”來提供的。它的參數較多,但是由於centos7已經支持此命令的參數補齊了,所以要多用tab鍵。下表列出常用的參數及作用,更多參數自行通過man命令進行查看。

參數 作用
--get-default-zone 查詢預設的區功能變數名稱稱
--set-default-zone=<區功能變數名稱稱> 設置預設的區域,使其永久生效
--get-zones 顯示可用的區域
--get-active-zones 顯示當前正在使用的區域與網卡名稱
--get-services 顯示預先定義的服務
--add-source= 將源自此 IP 或子網的流量導向指定的區域
--remove-source= 不再將源自此 IP 或子網的流量導向某個指定區域
--add-interface=<網卡名稱> 將源自該網卡的所有流量都導向某個指定區域
--change-interface=<網卡名稱> 將某個網卡與區域進行關聯
--list-all 顯示當前區域的網卡配置參數、資源、埠以及服務等信息
--list-all-zones 顯示所有區域的網卡配置參數、資源、埠以及服務等信息
--add-service=<服務名> 設置預設區域允許該服務的流量
--add-port=<埠號/協議> 設置預設區域允許該埠的流量
--remove-service=<服務名> 設置預設區域不再允許該服務的流量
--remove-port=<埠號/協議> 設置預設區域不再允許該埠的流量
--reload 讓“永久生效”的配置規則立即生效,並覆蓋當前的配置規則
--panic-on 開啟應急狀況模式
--panic-off 關閉應急狀況模式

使用firewall配置策略有兩種模式:運行時模式(runtime)、永久模式(permanent)。運行時模式又稱為當前生效模式,而且隨著系統的重啟會失效,它是預設的模式。而如果需要配置永久生效,就需要添加--permanent 參數。

主要註意的是永久模式配置的策略只有重啟之後才能自動生效,如果想讓配置的策略立即生效,需要手動執行firewall-cmd --reload 命令。

2.1.1 防火牆狀態管理

如果安裝本系列教程逐步操作的話,系統以及是預設安裝了firewalld服務,如果你用的是其他系統或未安裝firewalld服務,可以通過命令自行安裝即可。安裝命令:yum install firewalld firewall-config

  • 查看防火牆狀態
[root@heimatengyun ~]# firewall-cmd --state 
running
[root@heimatengyun ~]# systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since Sat 2019-12-21 21:26:53 CST; 1h 31min ago
 Main PID: 915 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─915 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Dec 21 21:26:53 heimatengyun systemd[1]: Started firewalld - dynamic firewal....
Hint: Some lines were ellipsized, use -l to show in full.

可以使用firewall-cmd --state 或systemctl status firewalld查看防火牆狀態。

  • 重啟防火牆服務
[root@heimatengyun ~]# systemctl restart firewalld.service 

註意等同於systemctl restart firewalld,可以省略服務尾碼名。

  • 停止防火牆服務
[root@heimatengyun ~]# systemctl stop firewalld
[root@heimatengyun ~]# firewall-cmd --state    
not running
  • 啟動防火牆服務
[root@heimatengyun ~]# systemctl start firewalld
[root@heimatengyun ~]# firewall-cmd --state     
running
2.1.2 防火牆配置文件

配置文件說明:firewalld 存放配置文件有兩個目錄,/usr/lib/firewalld/和/etc/firewalld/。前者存放了一些預設的文件,後者主要是存放用戶自定義的數據,所以我們添加的service或者rule都在後者下麵進行。

[root@heimatengyun ~]# ls /usr/lib/firewalld/
icmptypes  services  zones
[root@heimatengyun ~]# ls /etc/firewalld/
firewalld.conf  icmptypes  lockdown-whitelist.xml  services  zones

server:存儲服務數據,就是一組定義好的規則。

zones:存儲區域規則。

firewalld.conf:預設配置文件,可以設置預設使用的區域,預設區域為 public,對應 zones目錄下的public.xml。

2.1.3 常用配置命令及案例
  • 查看當前使用的區域
[root@heimatengyun ~]# firewall-cmd --get-default-zone 
public
  • 查看當前使用的區域是否允許請求ssh和https協議的流量
[root@heimatengyun ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@heimatengyun ~]# firewall-cmd --zone=public --query-service=https
no
  • 設置https協議流量為永久允許並立即生效
[root@heimatengyun ~]# firewall-cmd --zone=public --add-service=https
success
[root@heimatengyun ~]# firewall-cmd --zone=public --query-service=https
yes
[root@heimatengyun ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@heimatengyun ~]# firewall-cmd --reload
success
  • 允許8080和8081埠流量,僅限當前生效
[root@heimatengyun ~]# firewall-cmd --zone=public --list-ports 
[root@heimatengyun ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[root@heimatengyun ~]# firewall-cmd --zone=public --list-ports            
8080-8081/tcp

2.2 firewall-config

firewall-config是 firewalld 防火牆配置管理工具的 GUI(圖形用戶界面)版本,幾 乎可以實現所有以命令行來執行的操作。即使沒有扎實的 Linux 命令基 礎,也完全可以通過它來妥善配置 RHEL 7 中的防火牆策略。

2.2.1 主界面

輸入命令後,將打開主界面

[root@heimatengyun ~]# firewall-config 

file

頂部的Configuration對應選擇是運行模式還是永久模式。

左邊Zones選項卡對應的是不同的區域。

2.2.2 配置案例

在使用 firewall-config 工具配置完防火牆策略之後,無須進行二次確認,因為只要有修改內容,它就自動進行保存。

  • 配置允許當前區域中http服務流量且僅限當前有效

file

  • 試添加一條防火牆策略規則,使其放行訪問 8080~8088 埠(TCP 協議)的流量, 並將其設置為永久生效

file

添加規則後,還需要reload讓配置的策略立即生效。

file

三、TCP Wrappers服務

TCP Wrappers是RHEL7系統中預設啟用的一款流量監控程式,它能夠根據來訪主機的地址與本機的目標服務程式作出允許或拒絕的操作。

前文已提到firewalld是基於TCP/IP 協議的流量過濾工具,而 TCP Wrappers 服務則是能允許或 禁止 Linux 系統提供服務的防火牆,從而在更高層面保護了 Linux 系統的安全運行。

TCP Wrappers 服務的防火牆策略由兩個控制列表文件所控制,用戶可以編輯允許控制列表文 件來放行對服務的請求流量,也可以編輯拒絕控制列表文件來阻止對服務的請求流量。

控制列表 文件修改後會立即生效,系統將會先檢查允許控制列表文件(/etc/hosts.allow),如果匹配到相應 的允許策略則放行流量;如果沒有匹配,則去進一步匹配拒絕控制列表文件(/etc/hosts.deny),若 找到匹配項則拒絕該流量。如果這兩個文件全都沒有匹配到,則預設放行流量。

3.1 配置原則
  • 編寫拒絕策略規則時,填寫的是服務名稱,而非協議名稱;

  • 建議先編寫拒絕策略規則,再編寫允許策略規則。

3.2 常用配置參數

TCP Wrappers服務的控制列表文件中常用的參數如下表:

客戶端類型 示例 滿足條件的客戶端列表
單一主機 192.168.1.1 ip地址為192.168.1.1的主機
指定網段 192.168.1. ip段為192.168.1.0/24的主機
指定網段 192.168.10.0/255.255.255.0 IP 段為 192.168.10.0/24 的主機
指定 DNS 尾碼 .heimatengyun.com 所有尾碼為.heimatengyun.com的主機
指定主機名稱 www.heimatengyun.com 主機名稱為www.heimatengyun.com的主機
指定所有客戶端 ALL或* 所有主機全部包括在內
3.3 案例
  • 配置指定ip能遠程登錄到伺服器

編輯hosts.deny文件

[root@heimatengyun ~]# vi /etc/hosts.deny

添加:sshd:* 保存並退出。

此時退出遠程連接工具,再次遠程連接,將無法連接進去。

直接登錄虛擬機,並編輯/etc/hosts.allow文件,允許本地電腦的ip能遠程連接伺服器。

[root@heimatengyun ~]# vi /etc/hosts.allow

添加:sshd:192.168.78. 保存並退出

註意此處的192.168.78. 為你將訪問linux的ip地址,根據實際情況進行設置。本文演示的環境中取的是VMnet8的ip地址,而不是宿主機的ip。

然後再次用遠程連接工具,發現可以連接上了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與伺服器建立連接,然後伺服器根據ip給客戶端網頁發送信息。 其實,這個需求並不難,只是剛開始對websocket的內容不太瞭解。上網搜索了一下,有通過asp.net core 實現的,有 ...
  • 昨天看新聞,說人教社開放了人教版中小學教材電子版的春季教材(下載地址:http://bp.pep.com.cn/jc/ ),就想著給兒子全下載下來以備後用。不過人工下載真是麻煩枯燥,為了省事,就寫個爬蟲。原本打算用python,回頭想了下,好久沒用C#了,就用C#寫吧。 具體思路和實現步驟如下 1. ...
  • 檢查一臺ORACLE資料庫伺服器的crontab作業(用戶為oracle,實際環境中可能為oracle、也有可能是其它用戶)時,發現出現下麵提示信息: $ crontab -l You (oracle) are not allowed to use this program (crontab) Se... ...
  • linux下tar命令解壓到指定的目錄 : #tar zxvf xx.tar.gz -C /xx//把根目錄下的xx.tar.gz解壓到/xx/下,前提要保證存在/xx這個目錄 這個和cp命令有點不同,cp命令如果不存在這個目錄就會自動創建這個目錄! ...
  • xPath:一種HTML和XML的查詢語言,他能在XML和HTML的樹狀結構中尋找節點 安裝xPath: pip方法: pip install lxml win+R:cmd 打開命令控制台: 此時可以看到xml已經安裝完成 HTML: 一種網頁的標準、規範。編寫網頁文檔的主要語言。超文本鏈接【可以跳 ...
  • 問題: 由於長時間沒有操作過自己安裝的虛擬機,導致連root用戶的密碼都忘了,也真是沒誰了。 我使用的是centos6.5,今天就記錄一下,如何重置root用戶的密碼。 操作步驟: 步驟一: 當開機啟動出現啟動的圖標的時候,這時快速按下Esc或者E,一定要快點,不然總是來不及,也可以啟動後就一直點。 ...
  • API:application program interface ABI:application binary interface linux系統的ABI文件是ELF格式的 windows系統的ABI文件是exe,msi格式的 系統級開發語言:c/c++ ​ 作品:httpd,vsftpd,ngi ...
  • ARM 前幾天剛發佈了 Cortex-M 家族最新一款內核 - Cortex-M55 以及首款面向 Cortex-M 系列的 microNPU - Ethos-U55。Cortex-M55 是第一款面向 AI/ML 的 Cortex-M 內核,痞子衡也專門為此寫過一篇小文 《為AI/ML而生(Cor... ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...