1. 程式人生 > >iptables 與 firewalld 防火墻

iptables 與 firewalld 防火墻

轉發 兩個 ice 規則 以及 正常 自身 正在 基本

保障數據的安全性是繼保障數據的可用性之後最為重要的一項工作。防火墻作為公網與內網之間的保護屏障,在保障數據的安全性方面起著至關重要的作用。

1.防火墻管理工具

相較於企業內網,外部的公網環境更加惡劣,罪惡叢生。在公網與企業內網之間充當保護屏障的防火墻雖然有軟件或硬件之分,但主要功能都是依據策略對穿越防火墻自身的流量進行過濾。防火墻策略可以基於流量的源目地址、端口號、協議、應用等信息來定制,然後防火墻使用預先定制的策略規則監控出入的流量,若流量與某一條策略規則相匹配,則執行相應的處理,反之則丟棄。這樣一來,就可以保證僅有合法的流量在企業內網和外部公網之間流動了。

iptables與firewalld都不是真正的防火墻,它們都只是用來定義防火墻策略的防火墻管理工具而已,或者說,它們只是一種服務。iptables服務會把配置好的防火墻策略交由內核層面的netfilter網絡過濾器來處理,而firewalld服務則是把配置好的防火墻策略交由內核層面的nftables包過濾框架來處理。換句話說,當前在Linux系統中其實存在多個防火墻管理工具,旨在方便運維人員管理Linux系統中的防火墻策略,我們只需要配置妥當其中的一個就足夠了。

2.iptables

在早期的Linux系統中,默認使用的是iptables防火墻管理服務來配置防火墻。盡管新型的firewalld防火墻管理服務已經被投入使用多年,但是大量的企業在生產環境中依然出於各種原因而繼續使用iptables。

2.1 策略與規劃鏈

防火墻會從上至下的順序來讀取配置的策略規則,在找到匹配項後就立即結束匹配工作並去執行匹配項中定義的行為(即放行或阻止)。如果在讀取完所有的策略規則之後沒有匹配項,就去執行默認的策略。一般而言,防火墻策略規則的設置有兩種:一種是“通”(即放行),一種是“堵”(即阻止)。當防火墻的默認策略為拒絕時(堵),就要設置允許規則(通),否則誰都進不來;如果防火墻的默認策略為允許時,就要設置拒絕規則,否則誰都能進來,防火墻也就失去了防範的作用。

iptables服務把用於處理或過濾流量的策略條目稱之為規則,多條規則可以組成一個規則鏈,而規則鏈則依據數據包處理位置的不同進行分類,具體如下:

  • 在進行路由選擇前處理數據包(PREROUTING);
  • 處理流入的數據包(INPUT);
  • 處理流出的數據包(OUTPUT);
  • 處理轉發的數據包(FORWARD);
  • 在進行路由選擇後處理數據包(POSTROUTING)。

一般來說,從內網向外網發送的流量一般都是可控且良性的,因此我們使用最多的就是INPUT規則鏈,該規則鏈可以增大黑客人員從外網入侵內網的難度。

iptables 服務的術語有:ACCEPT(允許流量通過)、REJECT(拒絕流量通過)、LOG(記錄日誌信息)、DROP(拒絕流量通過)。DROP 是直接將流量丟棄而且不響應;REJECT則會在拒絕流量後再回復一條“您的信息已經收到,但是被扔掉了”信息,從而讓流量發送方清晰地看到數據被拒絕的響應信息。

2.2 iptables 中基本的命令參數

iptables命令可以根據流量的源地址、目的地址、傳輸協議、服務類型等信息進行匹配,一旦匹配成功,iptables就會根據策略規則所預設的動作來處理這些流量。另外,再次提醒一下,防火墻策略規則的匹配順序是從上至下的,因此要把較為嚴格、優先級較高的策略規則放到前面,以免發生錯誤。iptables 中常用參數及作用:

技術分享圖片

在iptables後加-L查看已有防火墻規則鏈:

技術分享圖片

加-F參數清空已有防火墻規則鏈:

技術分享圖片

把INPUT規則鏈的默認策略設置為拒絕:

技術分享圖片

防火墻策略有兩種:通 和 堵。把INPUT鏈設置為默認拒絕後,就要寫入允許策略了,另外,規則鏈的默認拒絕動作只能是DROP,不能是REJECT。

向INPUT鏈中添加允許 ICMP 流量進入的策略規則:

在日常運維工作中,經常會使用ping命令來檢查對方主機是否在線,而向防火墻的INPUT規則鏈中添加一條允許ICMP流量進入的策略規則就默認允許了這種ping命令檢測行為。

技術分享圖片
通過ifconfig命令查看本機ip
技術分享圖片

技術分享圖片

刪除INPUT鏈中剛剛加入的那條策略(允許ICMP流量),並把默認策略設置為允許:

技術分享圖片

將INPUT鏈設置為只允許指定網段的主機訪問本機的22端口,拒絕來自其他所有的主機流量:

技術分享圖片

防火墻策略規則是按照從上到下的順序匹配的,因此一定要把允許動作放到拒絕動作前面,否則所有的流量就將被拒絕掉,從而導致任何主機都無法訪問我們的服務。另外,這裏提到的22號端口是ssh服務使用的。

設置完後,使用 IP 地址 在 192.168.122.0/24 網段內的主機訪問服務器的22端口:

技術分享圖片

然後使用IP地址在 上述網段外的主機訪問服務器的22端口,就不會顯示拒絕了。

向INPUT鏈中添加拒絕所有人訪問本機的12345端口策略:

技術分享圖片

向INPUT鏈中添加拒絕 192.168.122.5 主機訪問本機 80 端口(Web服務)的策略規則:(需後續添加)
向INPUT鏈中添加拒絕所有主機訪問本機 1000~1024 端口的策略規則:(需後續添加)

使用iptables命令配置的防火墻規則默認會在系統下一次重啟時失效,如果想讓配置的防火墻策略永久生效,還要執行保存命令:service iptables save

3.firewalld

RHEL 7系統中集成了多款防火墻管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems,Linux系統的動態防火墻管理器)服務是默認的防火墻配置管理工具,它擁有基於CLI(命令行界面)和基於GUI(圖形用戶界面)的兩種管理方式。

相較於傳統的防火墻管理配置工具,firewalld支持動態更新技術並加入了區域(zone)的概念。簡單來說,區域就是firewalld預先準備了幾套防火墻策略集合(策略模板),用戶可以根據生產場景的不同而選擇合適的策略集合,從而實現防火墻策略之間的快速切換。在以往,我們需要頻繁地手動設置防火墻策略規則,而現在只需要預設好區域集合,然後只需輕點鼠標就可以自動切換了,從而極大地提升了防火墻策略的應用效率。

firewalld中常見的區域名稱(默認為public)以及相應的策略規則如下表:

技術分享圖片

3.1 終端管理工具

firewalld-cmd是firewalld防火墻配置管理工具的CLI(命令行界面)版本。它的參數一般都是以“長格式”來提供的,RHEL 7系統支持部分命令的參數補齊,其中就包含這條命令。也就是說,現在除了能用Tab鍵自動補齊命令或文件名等內容之外,還可以用Tab鍵來補齊下表中所示的長格式參數了。
firewalld-cmd命令中使用的參數及作用:
技術分享圖片

與Linux系統中其他的防火墻策略配置工具一樣,使用firewalld配置的防火墻策略默認為運行時(Runtime)模式,又稱為當前生效模式,而且隨著系統的重啟會失效。如果想讓配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用firewall-cmd命令正常設置防火墻策略時添加--permanent參數,這樣配置的防火墻策略就可以永久生效了。但是,永久生效模式設置的策略只有在系統重啟之後才能生效。如果想讓配置的策略立即生效,需要手動執行firewall-cmd --reload命令。

查看 firewalld 服務當前所使用的區域:

技術分享圖片

首先ifconfig命令查詢網卡名稱(這裏是ens32),然後開啟網卡(使用命令 ifup ens32),查詢 ens32 網卡在 firewalld 服務中的區域:

技術分享圖片

網卡未開啟的話結果為 no zone。

把 firewalld 服務中 ens32 網卡的默認區域修改為 external,並在系統重啟後生效。分別查看當前與永久模式下的區域名稱(結果與本人所學教程不符.........先放這裏吧。):

技術分享圖片

把firewalld服務的當前默認區域設置為 public:

技術分享圖片

啟動/關閉 firewalld防火墻服務的應急狀況模式,阻斷一切網絡連接:

技術分享圖片

查詢 public 區域是否允許請求 SSH 和 HTTPS 協議的流量:

技術分享圖片

把 firewalld 服務中請求 HTTPS 協議的流量設置為 永久允許,並立即生效:

技術分享圖片

把 firewalld 服務中請求 HTTP 協議的流量設置為永久拒絕,並立即生效:

技術分享圖片

把在firewalld服務中訪問8080和8081端口的流量策略設置為允許,但僅限當前生效:

技術分享圖片

把原本訪問本機888端口的流量轉發到22端口,要且求當前和長期均有效:

流量轉發命令格式為firewall-cmd --permanent --zone=<區域> --add-forward-port=port=<源端口號>:proto=<協議>:toport=<目標端口號>:toaddr=<目標IP地址>
技術分享圖片
(需後續添加)

3.2 圖形管理工具

firewall-config(命令):firewalld防火墻配置管理工具的GUI(圖形用戶界面)版本,幾乎可以實現所有以命令行來執行的操作。功能如下:

  1. 選擇運行時(Runtime)模式或永久(Permanent)模式的配置。
  2. 可選的策略集合區域列表。
  3. 常用的系統服務列表。
  4. 當前正在使用的區域。
  5. 管理當前被選中區域中的服務。
  6. 管理當前被選中區域中的端口。
  7. 開啟或關閉SNAT(源地址轉換協議)技術。
  8. 設置端口轉發策略。
  9. 控制請求icmp服務的流量。
  10. 管理防火墻的富規則。
  11. 管理網卡設備。
  12. 被選中區域的服務,若勾選了相應服務前面的復選框,則表示允許與之相關的流量。
  13. firewall-config工具的運行狀態。

4.服務的訪問控制列表

TCP Wrappers是RHEL 7系統中默認啟用的一款流量監控程序,它能夠根據來訪主機的地址與本機的目標服務程序作出允許或拒絕的操作。換句話說,Linux系統中其實有兩個層面的防火墻,第一種是前面講到的基於TCP/IP協議的流量過濾工具,而TCP Wrappers服務則是能允許或禁止Linux系統提供服務的防火墻,從而在更高層面保護了Linux系統的安全運行。

TCP Wrappers服務的防火墻策略由兩個控制列表文件所控制,用戶可以編輯允許控制列表文件來放行對服務的請求流量,也可以編輯拒絕控制列表文件來阻止對服務的請求流量。控制列表文件修改後會立即生效,系統將會先檢查允許控制列表文件(/etc/hosts.allow),如果匹配到相應的允許策略則放行流量;如果沒有匹配,則去進一步匹配拒絕控制列表文件(/etc/hosts.deny),若找到匹配項則拒絕該流量。如果這兩個文件全都沒有匹配到,則默認放行流量。

iptables 與 firewalld 防火墻