天天看點

Linux下雙網卡Firewalld的配置流程

實驗室拟态存儲的項目需要通過LVS-NAT模式通過LVS伺服器來區隔内外網的服務,是以安全防護的重心則落在了LVS伺服器之上。筆者最終選擇通過firewalld放行端口的方式來實作需求,由于firewall與傳統Linux使用的iptable工具有不小的差別,接下來通過部落格來記錄一下firewalld的配置流程。

1.Firewall服務的簡介:

firewalld提供了一個 動态管理的防火牆,用以支援不同網絡區域的規則,配置設定對一個網絡及其相關連結和界面一定程度的信任。它具備對 IPv4 和 IPv6 防火牆設定的支援。它支援以太網橋,并有分離運作時間和永久性配置選擇。它還具備一個通向服務或者應用程式以直接增加防火牆規則的接口。

上述内容是來自

RetHat官方文檔

的說明,看起來不知所雲。是以筆者在這裡簡單介紹一下firewalld的定位與傳統的iptable存在什麼樣的不同:

  • 動态防火牆

    firewalld 提供的是動态的防火牆服務。配置的改變可以随時随地立刻執行,不再需要儲存或者執行這些改變。而iptable的部分,每一個單獨更改意味着要清除所有舊有的規則和從 裡讀取所有新的規則,相對來說firewalld的方式會更加靈活。

  • 區域隔離

    firewalld 提供了區域隔離的服務,也就是說類似于window之中的公共網絡與内部網絡的差別,可以通過不同的區域的配置對應的規則來實作不同的網絡規則服務。通過區域規則的方式,可以讓防火牆的工作更加的靈活。

如圖所示,firewalld的防火牆本質上是建立在原生的iptable防火牆之上的抽象層,通過定制規則的方式來利用iptable的功能,是以兩個防火牆是上下級并行工作的關系,最終都需要落地到核心之中的netfilter來實作網絡包的過濾,來簡化防火牆的工作流程。(傳統iptable的“四表五鍊”實在是有夠複雜~~囧rz)

iptable與firewalld的邏輯層次

2.系統環境:

如下圖所示,這裡需要在LVS的伺服器需要部署firewall的防火牆,這裡筆者僅簡要梳理一下一台LVS伺服器的工作:

系統結構的示意圖

系統平台:Centos 7

LVS伺服器: 雙網卡

  • 外網位址:219.223.199.154
  • 内網位址:192.168.1.17

對外伺服器:

  • 伺服器A:192.168.1.11
  • 伺服器B:192.168.1.14

在這裡,外網位址之上需要開放的端口為10086端口,通過該端口進行轉發。而内網位址之上并不設定限制,我們認為是安全的網絡環境。

3.配置流程:

Firewalld的配置可通過三種方式:

  • firewall-config

    一個圖形化的使用者接口的配置工具

  • firewall-cmd

    一個指令行的使用者接口的配置工具

  • 靜态xml檔案配置

    firewalld 的配置設定存儲在/etc/firewalld/ 目錄下的 xml 檔案裡。可以通過檢視和編輯這些 xml 檔案,來實作firewall的配置。

之後筆者的配置流程主要是基于firewall-cmd指令展開,首先啟動firewall服務:

systemctl start firewalld.service  //啟動firewalld服務
           

接下來,開放外網網卡的對應的TCP端口,這裡筆者選擇public區域,也就是雙網卡同時開放端口。

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

該指令的配置了public區域添加10086的端口,後續的參數--permannet則代表永久添加。也就是一次寫入,後續重新開機之後依然生效。在firewall之中支援如下不同的區域區隔與過濾規則,之後不同的配置可以參考下面的内容:

區域

drop: 丢棄所有進入的包,而不給出任何響應
block: 拒絕所有外部發起的連接配接,允許内部發起的連接配接
public: 允許指定的進入連接配接
external: 同上,對僞裝的進入連接配接,一般用于路由轉發
dmz: 允許受限制的進入連接配接
work: 允許受信任的計算機被限制的進入連接配接,類似 workgroup
home: 同上,類似 homegroup
internal: 同上,範圍針對所有網際網路使用者
trusted: 信任所有連接配接
           

過濾規則

source: 根據源位址過濾
interface: 根據網卡過濾
service: 根據服務名過濾
port: 根據端口過濾
icmp-block: icmp 封包過濾,按照 icmp 類型配置
masquerade: ip 位址僞裝
forward-port: 端口轉發
rule: 自定義規則
           

之後通過LVS配置好下圖是通過ipvsadm配置好的轉發機制:

LVS轉發機制

通過外網嘗試連接配接外網的ip位址,219.223.199.154:10086,發現并無法聯通後端伺服器的服務,也就是運作在192.168.1.11與192.168.1.14的伺服器。

調用ipvsadm -lcn指令之後,發現内網的轉發出現了問題:

内網轉發的問題

通過抓包發現LVS伺服器在内網網卡192.168.1.17上的通信包被攔截,于是繼續通過firewalld-cmd指令開發内網網卡的端口,将内網網卡加入trusted區域:

firewall-cmd --zone=trusted --add-interface=enp3s0
           

接下來可以看到開放了對應内網網卡到trusted,trusted區域允許所有通信包放行,因為内網是相對安全的環境,是以并不存在很大的影響,調用:

firewall-cmd --list-all-zones
           

指令展示firewall的配置結果,public與trusted區域都出于active狀态,外網服務能夠正常連接配接内網的端口服務了。

可以看到上述public的設定之中涉及到了對應的ssh服務于dhcpv6-client的服務,在Firewalld之中是可以直接通過服務來放行對應的内容,也就是上文參數service,詳細的配置參數需要在目錄/usr/lib/firewalld/services之中進行配置,我們嘗試打開上文ssh服務的内容:

SSH服務的配置目錄

由上文的配置内容可見:所謂的服務配置防火牆,本身也是通過标注協定與端口的方式進行的,隻不過是用服務的邏輯進行包裝了。至于使用哪種形式,各位見仁見智了。

小結

梳理了一下在LVS下雙網卡Firewalld的配置流程。至于Debian系列的發行版也是大同小異,隻不過Firewalld工具需要自行使用apt-get進行安裝。上述内容若有疏漏,望各位指點斧正。

繼續閱讀