5分鐘理解Centos7防火牆firewalld

来源:http://www.cnblogs.com/excelib/archive/2016/01/22/5150647.html
-Advertisement-
Play Games

版權聲明:本內容為原創內容,轉載請聲明出處。原文地址:http://www.excelib.com/article/287/showfirewalld簡介Centos7中預設將原來的防火牆iptables升級為了firewalld,firewalld跟iptables比起來至少有兩大好處:1、fir...


版權聲明:本內容為原創內容,轉載請聲明出處。

原文地址:http://www.excelib.com/article/287/show

firewalld簡介

Centos7中預設將原來的防火牆iptables升級為了firewalld,firewalld跟iptables比起來至少有兩大好處:

1、firewalld可以動態修改單條規則,而不需要像iptables那樣,在修改了規則後必須得全部刷新才可以生效;

2、firewalld在使用上要比iptables人性化很多,即使不明白“五張表五條鏈”而且對TCP/IP協議也不理解也可以實現大部分功能。

 

多知道點

iptables實際包含五張表

大部分iptables的資料都介紹說iptables包含四張表、五條鏈,不過實際上iptables還有第五張表——security表,但 是這張表需要和selinux結合使用,而selinux雖然已經發佈了十多年了但是直到現在還有很多人對他的理解不夠透徹,甚至有很多人會將其關閉!

其實selinux的設計理念在安全上來說是非常優秀的,而且理解了其設計理念之後再去使用也沒那麼複雜,只不過其內置的規則是非常複雜的,等有 機會學生專門給大家介紹一下selinux,現在還回到iptables的五張表,他們分別是filter、nat、mangle、raw和 security。

filter表就是我們最常使用的過濾表;nat表主要用於數據包轉發,比如區域網的電腦如果想連接互聯網,那麼就可以使用nat給轉發一 下;mangle表的規則可以對數據包進行修改,比如修改ttl值等;raw表主要是為了提高效率使用的,raw本身的含義是指“原生的”、“未經過加工 的”,符合raw表所對應規則的數據包將會跳過一些檢查,這樣就可以提高效率,當然,raw表的優先順序也是最高的;security是跟selinux相 關的MAC模式的安全過濾。

當然,這些內容大家瞭解一下就行,即使不理解也可以使用將firewalld使用的很好。

 

firewalld和iptables的關係

firewalld自身並不具備防火牆的功能,而是和iptables一樣需要通過內核的netfilter來實現,也就是說firewalld和 iptables一樣,他們的作用都是用於維護規則,而真正使用規則幹活的是內核的netfilter,只不過firewalld和iptables的結 構以及使用方法不一樣罷了。

firewalld的結構

我們這裡所說的結構並不是firewalld軟體的結構,而是配置文件的結構。

在具體介紹firewalld配置文件結構之前學生先來給大家介紹一下firewalld的配置模式,firewalld的配置模式設計的非常巧妙,而且這種設計思路也非常值得我們借鑒和學習。

firewalld的配置模式

firewalld的配置文件以xml格式為主(主配置文件firewalld.conf例外),他們有兩個存儲位置

1、/etc/firewalld/

2、/usr/lib/firewalld/

使用時的規則是這樣的:當需要一個文件時firewalld會首先到第一個目錄中去查找,如果可以找到,那麼就直接使用,否則會繼續到第二個目錄中查找。

firewalld的這種配置文件結構的主要作用是這樣的:在第二個目錄中存放的是firewalld給提供的通用配置文件,如果我們想修改配置, 那麼可以copy一份到第一個目錄中,然後再進行修改。這麼做有兩個好處:首先我們日後可以非常清晰地看到都有哪些文件是我們自己創建或者修改過的,其 次,如果想恢復firewalld給提供的預設配置,只需要將自己在第一個目錄中的配置文件刪除即可,非常簡單,而不需要像其他很多軟體那樣在修改之前還 得先備份一下,而且時間長了還有可能忘掉之前備份的是什麼版本。

當然,這種配置模式也並不是firewalld的首創,在其他很多地方也都有用到,比如java中用於記錄日誌的logback也是這種模式,他在 查找配置文件時會首先在根目錄下找logback-test.xml文件,如果可以找到就直接使用,如果找不到就會接著找logback.xml文件,如 果還找不到就會使用自己包裡邊自帶的配置文件,這樣使用起來就非常方便了,比如我們可以把logback-test.xml和logback.xml兩個 文件都創建出來,在開發機上使用logback-test.xml文件,然後在往伺服器部署的時候直接將其刪掉就可以了!當然還有很多產品也使用了這種配 置模式,spring的很多子框架也使用的是這種模式,比如spring MVC中的組件配置也是這樣,如果沒有配置的話就會使用預設的配置,當然,我們這裡不是在講Spring MVC所以就不展開了,如果想瞭解更多細節大家可以參考學生編寫的《看透Spring MVC:源代碼分析與實踐》一書。

配置文件結構

firewalld的配置文件結構非常簡單,主要有兩個文件和三個目錄:

文件:firewalld.conf、lockdown-whitelist.xml

目錄:zones、services、icmptypes

另外,如果使用到direct,還會有一個direct.xml文件。我們要註意,在保存預設配置的目錄“/usr/lib/firewalld/”中只有我們這裡所說的目錄,而沒有firewalld.conf、lockdown-whitelist.xml和direct.xml這三個文件,也就是說這三個文件只存在於“/etc/firewalld/”目錄中。

下麵學生分別來給大家介紹一下這些文件和目錄的作用

  • firewalld.conf:firewalld的主配置文件,是鍵值對的格式,不過非常簡單,只有五個配置項

    • DefaultZone:預設使用的zone,關於zone學生稍後給大家詳細介紹,預設值為public;

    • MinimalMark: 標記的最小值,linux內核會對每個進入的數據包都進行標記,目的當然是為了對他們進行區分,比如學生在前面給大家補充iptables五張表相關的內 容時候介紹說符合raw表規則的數據包可以跳過一些檢查,那麼是怎麼跳過的呢?這裡其實就是使用的標記,當然對數據包的標記還有很多作用。這裡所設置的 MinimalMark值就是標記的最小值,預設值為100,一般情況下我們不需要對其進行修改,但是如果我們有特殊需要的時候就可以通過對其進行修改來 告訴linux所使用標記的最小值了,比如我們需要給符合某條件的數據包標記為123,這時候為了防止混淆就需要將MinimalMark設置為一個大於 123的值了;

    • CleanupOnExit:這個配置項非常容易理解,他表示當退出firewalld後是否清除防火牆規則,預設值為yes;

    • Lockdown: 這個選項跟D-BUS介面操作firewalld有關,firewalld可以讓別的程式通過D-BUS介面直接操作,當Lockdown設置為yes的 時候就可以通過lockdown-whitelist.xml文件來限制都有哪些程式可以對其進行操作,而當設置為no的時候就沒有限制了,預設值為 no;

    • IPv6_rpfilter:其功能類似於rp_filter,只不過是針對ipv6版的,其作用是判斷所接受到的包是否是偽造的,檢查方式主要是通過路由表中的路由條目實現的,更多詳細的信息大家可以搜索uRPF相關的資料,這裡的預設值為yes。

  • lockdown-whitelist.xml:當Lockdown為yes的時候用來限制可以通過D-BUS介面操作firewalld的程式

  • direct.xml:通過這個文件可以直接使用防火牆的過濾規則,這對於熟悉iptables的用戶來說會非常順手,另外也對從原來的iptables到firewalld的遷移提供了一條綠色通道

  • zones:保存zone配置文件

  • services:保存service配置文件

  • icmptypes:保存和icmp類型相關的配置文件

 

在firewalld的使用中最基礎也是最重要的就是對zone的理解,不過現在還普遍理解的不是很透徹,下麵學生就來給大家詳細介紹一下zone到底是什麼。

zone

firewalld預設提供了九個zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他們都保存在“/usr/lib /firewalld/zones/”目錄下。這些zone之間是什麼關係?他們分別適用用哪些場景呢?

為了弄明白這些問題大家需要先明白zone的本質含義。學生在上一節給大家介紹防火牆時說過防火牆就相當於一個門衛,門衛對具體某個來訪的人判斷是否應該放行是依靠規則來判斷的,而我們這裡的zone其實就是一套規則集,或者說是一套判斷的方案。

理解了這層含義firewalld就容易了,比如上面的九個zone其實就是九種方案,而且起決定作用的其實是每個xml文件所包含的內容,而不是 文件名,所以大家不需要對每種zone(每個文件名)的含義花費過多的精力,比如trusted這個zone會信任所有的數據包,也就是說所有數據包都會 放行,但是public這個zone只會放行其中所配置的服務,其他的一律不予放行,其實我們如果將這兩個文件中的內容互換一下他們的規則就換過來了,也 就是public這個zone會放行所有的數據包,下麵我們來看一下這兩個文件的內容

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="ssh"/>   <service name="dhcpv6-client"/> </zone>

trusted.xml

<?xml version="1.0" encoding="utf-8"?> <zone target="ACCEPT">   <short>Trusted</short>   <description>All network connections are accepted.</description> </zone>

我們要特別註意trusted.xml中zone的target,就是因為他設置為了ACCEPT,所以才會放行所有的數據包,而 public.xml中的zone沒有target屬性,這樣就會預設拒絕通過,所以public這個zone(這種方案)只有其中配置過的服務才可以通 過。

其他的zone大家可以自己打開xml文件來看一下,這裡學生就不一一介紹了,關於zone配置文件的詳細結構及含義後面學生再給大家進行講解,下麵學生再給大家介紹一下firewalld中的service。

service

service是firewalld中另外一個非常重要的概念,不過其含義是非常簡單的。學生還是拿門衛的例子來給大家做解釋,在iptables 的時代我們給門衛下達規則時需要告訴他“所有到22號樓的人全部予以放行”、“所有到80號樓的人全部予以放行”等等,不過到了firewalld的時代 就不需要這樣了,而是可以直接下達像“到銷售部的全部予以放行”這樣的命令,然後門衛再一查發現銷售部在80號樓,那麼所有到80號樓的人門衛就都會放行 了。我們這裡的樓牌號和埠號相對應,部門名和服務名相對應,這樣大家應該就可以理解service的作用了。

從埠號改為服務名主要有兩個好處:首先是使用服務名配置的語義清晰,不容易出錯;其次在對某個服務的埠號進行修改的時候只需要修改相應的 service文件就可以了,而不需要再修改防火牆方案——zone。這其實跟DNS將ip地址和功能變數名稱關聯了起來是一樣的道理。下麵學生再來給大家介紹一 下service的配置文件。

service配置文件的命名規則是<服務名>.xml,比如ssh的配置文件是ssh.xml,http的配置文件是 http.xml等,他們預設保存在“/usr/lib/firewalld/services/”目錄下,常見的服務其中都可以找到,如果我們想修改某 個服務的配置,那麼可以複製一份到“/etc/firewalld/services/”目錄下然後進行修改就可以了,要想恢復預設配置直接將我們自己的 配置文件刪除就可以了。我們來看一下ssh服務的ssh.xml文件

<?xml version="1.0" encoding="utf-8"?> <service>   <short>SSH</short>   <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>   <port protocol="tcp" port="22"/> </service>

可以看到這裡配置了tcp的22號埠,所以將ssh服務配置到所使用的zone(預設public)中後tcp的22號埠就開放了。如果我們想將ssh的埠修改為222,那麼只需要將ssh.xml複製一份到“/firewalld/services/”中,然後將埠號修改為222就可以了。當然直接修改“/usr/lib/firewalld/services/”中的配置文件也可以實現,但是強烈建議不要那麼做,原因相信大家都明白。

明白原理之後使用起來就可以非常靈活了,比如我們將“/etc/firewalld/services/ssh.xml”文件複製一份到“/etc/firewalld/services/”中,然後將名字改為abc.xml,並且將abc這個服務配置到所使用的zone中,這時22埠就會開放。也就是說在zone中所配置的服務其實跟實際的服務並不存在直接聯繫,而是和相應配置文件中配置的內容有關係。

配置方法

firewalld的配置方法主要有三種:firewall-config、firewall-cmd和直接編輯xml文件,其中 firewall-config是圖形化工具,firewall-cmd是命令行工具,而對於linux來說大家應該更習慣使用命令行方式的操作,所以 firewall-config我們就不給大家介紹了。具體的配置方法學生在下一節給大家進行介紹。

參考文獻

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文由ilanniweb提供友情贊助,首發於爛泥行天下想要獲得更多的文章,可以關註我的微信ilanniweb公司的業務是使用tomcat做web容器,為了更有效的利用伺服器的性能,我們一般部署多個tomcat做業務的負載均衡。一、業務需求目前一臺伺服器上,部署了4個tomcat,也就相當於4個節點。...
  • 上一篇,運用 Linux 的 sysfs,控制本機上的 LED 燈,usr0 至 usr3,這次用 GPIO 控制外部的電路,點亮 LED 燈。 這次的全部材料: BBB 一臺 購買 BBB 自帶的 USB 數據線 麵包板一塊 470Ω 三枚(至少一枚) 白、紅、黃、綠 LED 燈各一個(至少一個)...
  • 一.概述 barrier(屏障)與互斥量,讀寫鎖,自旋鎖不同,它不是用來保護臨界區的。相反,它跟條件變數一樣,是用來協同多線程一起工作!!!條件變數是多線程間傳遞狀態的改變來達到協同工作的效果。屏障是多線程各自做自己的工作,如果某一線程完成了工作,就等...
  • linux回收站機制
  • 這個問題困擾了我,可能有兩個原因。1、文件夾許可權不夠,至少也要給出 USERS 組的可讀可寫許可權;2、文件夾的磁碟滿了,文件寫不進去了;如果是這個不能創建和寫的問題,很大的概率就是文件的許可權。沒有網上一大堆的解釋。改變方法:1 #chown-Rmysql:mysql/usr/local/mysql/...
  • 本文轉自調整虛擬記憶體,支持原創、尊重原創,分享知識!個人發現有些翻譯不當的地方,稍微做了下修改、調整。如果英文足夠NB,建議閱讀英文。 虛擬記憶體通常被進程、文件系統緩存以及內核消耗。虛擬記憶體的使用由很多因素決定,受以下參數影響: swappiness 參數值可為 0-100,控制系統 swap 的使...
  • 需求:把找到的文件逐行輸出,然後用rm在許可的情況下刪除前置準備:$lsrm.sh test1 test2 test3 test4 test5 test6$cat rm.sh#! /bin/bashwhile read fileinfodo rm -iv $fileinfodone< <( ...
  • TryVistalizator- this tool allows you to change display language in Windows editions other than (officially supported) Ultimate, like Starter, Home Ba...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...