實(shí)驗(yàn)室擬態(tài)存儲(chǔ)的項(xiàng)目需要通過(guò)lvs-nat模式通過(guò)lvs服務(wù)器來(lái)區(qū)隔內(nèi)外網(wǎng)的服務(wù),所以安全防護(hù)的重心則落在了lvs服務(wù)器之上。筆者最終選擇通過(guò)firewalld放行端口的方式來(lái)實(shí)現(xiàn)需求,由于firewall與傳統(tǒng)linux使用的iptable工具有不小的區(qū)別,接下來(lái)通過(guò)博客來(lái)記錄一下firewalld的配置流程。
1.firewall服務(wù)的簡(jiǎn)介:
firewalld提供了一個(gè) 動(dòng)態(tài)管理的防火墻,用以支持不同網(wǎng)絡(luò)區(qū)域的規(guī)則,分配對(duì)一個(gè)網(wǎng)絡(luò)及其相關(guān)鏈接和界面一定程度的信任。它具備對(duì) ipv4 和 ipv6 防火墻設(shè)置的支持。它支持以太網(wǎng)橋,并有分離運(yùn)行時(shí)間和永久性配置選擇。它還具備一個(gè)通向服務(wù)或者應(yīng)用程序以直接增加防火墻規(guī)則的接口。
上述內(nèi)容是來(lái)自rethat官方文檔的說(shuō)明,看起來(lái)不知所云。所以筆者在這里簡(jiǎn)單介紹一下firewalld的定位與傳統(tǒng)的iptable存在什么樣的不同:
- 動(dòng)態(tài)防火墻
firewalld 提供的是動(dòng)態(tài)的防火墻服務(wù)。配置的改變可以隨時(shí)隨地立刻執(zhí)行,不再需要保存或者執(zhí)行這些改變。而iptable的部分,每一個(gè)單獨(dú)更改意味著要清除所有舊有的規(guī)則和從 里讀取所有新的規(guī)則,相對(duì)來(lái)說(shuō)firewalld的方式會(huì)更加靈活。
- 區(qū)域隔離
firewalld 提供了區(qū)域隔離的服務(wù),也就是說(shuō)類(lèi)似于window之中的公共網(wǎng)絡(luò)與內(nèi)部網(wǎng)絡(luò)的區(qū)別,可以通過(guò)不同的區(qū)域的配置對(duì)應(yīng)的規(guī)則來(lái)實(shí)現(xiàn)不同的網(wǎng)絡(luò)規(guī)則服務(wù)。通過(guò)區(qū)域規(guī)則的方式,可以讓防火墻的工作更加的靈活。
如圖所示,firewalld的防火墻本質(zhì)上是建立在原生的iptable防火墻之上的抽象層,通過(guò)定制規(guī)則的方式來(lái)利用iptable的功能,所以?xún)蓚€(gè)防火墻是上下級(jí)并行工作的關(guān)系,最終都需要落地到內(nèi)核之中的netfilter來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)包的過(guò)濾,來(lái)簡(jiǎn)化防火墻的工作流程。(傳統(tǒng)iptable的“四表五鏈”實(shí)在是有夠復(fù)雜~~囧rz)
2.系統(tǒng)環(huán)境:
如下圖所示,這里需要在lvs的服務(wù)器需要部署firewall的防火墻,這里筆者僅簡(jiǎn)要梳理一下一臺(tái)lvs服務(wù)器的工作:
系統(tǒng)平臺(tái):centos 7
lvs服務(wù)器: 雙網(wǎng)卡
- 外網(wǎng)地址:219.223.199.154
- 內(nèi)網(wǎng)地址:192.168.1.17
對(duì)外服務(wù)器:
- 服務(wù)器a:192.168.1.11
- 服務(wù)器b:192.168.1.14
在這里,外網(wǎng)地址之上需要開(kāi)放的端口為10086端口,通過(guò)該端口進(jìn)行轉(zhuǎn)發(fā)。而內(nèi)網(wǎng)地址之上并不設(shè)置限制,我們認(rèn)為是安全的網(wǎng)絡(luò)環(huán)境。
3.配置流程:
firewalld的配置可通過(guò)三種方式:
- firewall-config
一個(gè)圖形化的用戶(hù)接口的配置工具
- firewall-cmd
一個(gè)命令行的用戶(hù)接口的配置工具
- 靜態(tài)xml文件配置
firewalld 的配置設(shè)定存儲(chǔ)在/etc/firewalld/ 目錄下的 xml 文件里??梢酝ㄟ^(guò)查看和編輯這些 xml 文件,來(lái)實(shí)現(xiàn)firewall的配置。
之后筆者的配置流程主要是基于firewall-cmd命令展開(kāi),首先啟動(dòng)firewall服務(wù):
1
|
systemctl start firewalld.service // 啟動(dòng)firewalld服務(wù) |
接下來(lái),開(kāi)放外網(wǎng)網(wǎng)卡的對(duì)應(yīng)的tcp端口,這里筆者選擇public區(qū)域,也就是雙網(wǎng)卡同時(shí)開(kāi)放端口。
1
|
firewall-cmd --zone=public --add-port=10086 /tcp --permanent |
該命令的配置了public區(qū)域添加10086的端口,后續(xù)的參數(shù)--permannet則代表永久添加。也就是一次寫(xiě)入,后續(xù)重啟之后依然生效。在firewall之中支持如下不同的區(qū)域區(qū)隔與過(guò)濾規(guī)則,之后不同的配置可以參考下面的內(nèi)容:
區(qū)域
1
2
3
4
5
6
7
8
9
|
drop: 丟棄所有進(jìn)入的包,而不給出任何響應(yīng) block: 拒絕所有外部發(fā)起的連接,允許內(nèi)部發(fā)起的連接 public: 允許指定的進(jìn)入連接 external: 同上,對(duì)偽裝的進(jìn)入連接,一般用于路由轉(zhuǎn)發(fā) dmz: 允許受限制的進(jìn)入連接 work: 允許受信任的計(jì)算機(jī)被限制的進(jìn)入連接,類(lèi)似 workgroup home: 同上,類(lèi)似 homegroup internal: 同上,范圍針對(duì)所有互聯(lián)網(wǎng)用戶(hù) trusted: 信任所有連接 |
過(guò)濾規(guī)則
1
2
3
4
5
6
7
8
|
source : 根據(jù)源地址過(guò)濾 interface: 根據(jù)網(wǎng)卡過(guò)濾 service: 根據(jù)服務(wù)名過(guò)濾 port: 根據(jù)端口過(guò)濾 icmp-block: icmp 報(bào)文過(guò)濾,按照 icmp 類(lèi)型配置 masquerade: ip 地址偽裝 forward-port: 端口轉(zhuǎn)發(fā) rule: 自定義規(guī)則 |
之后通過(guò)lvs配置好下圖是通過(guò)ipvsadm配置好的轉(zhuǎn)發(fā)機(jī)制:
通過(guò)外網(wǎng)嘗試連接外網(wǎng)的ip地址,219.223.199.154:10086,發(fā)現(xiàn)并無(wú)法聯(lián)通后端服務(wù)器的服務(wù),也就是運(yùn)行在192.168.1.11與192.168.1.14的服務(wù)器。
調(diào)用ipvsadm -lcn命令之后,發(fā)現(xiàn)內(nèi)網(wǎng)的轉(zhuǎn)發(fā)出現(xiàn)了問(wèn)題:
通過(guò)抓包發(fā)現(xiàn)lvs服務(wù)器在內(nèi)網(wǎng)網(wǎng)卡192.168.1.17上的通信包被攔截,于是繼續(xù)通過(guò)firewalld-cmd命令開(kāi)發(fā)內(nèi)網(wǎng)網(wǎng)卡的端口,將內(nèi)網(wǎng)網(wǎng)卡加入trusted區(qū)域:
1
|
firewall-cmd --zone=trusted --add-interface=enp3s0 |
接下來(lái)可以看到開(kāi)放了對(duì)應(yīng)內(nèi)網(wǎng)網(wǎng)卡到trusted,trusted區(qū)域允許所有通信包放行,因?yàn)閮?nèi)網(wǎng)是相對(duì)安全的環(huán)境,所以并不存在很大的影響,調(diào)用:
1
|
firewall-cmd --list-all-zones |
命令展示firewall的配置結(jié)果,public與trusted區(qū)域都出于active狀態(tài),外網(wǎng)服務(wù)能夠正常連接內(nèi)網(wǎng)的端口服務(wù)了。
可以看到上述public的設(shè)置之中涉及到了對(duì)應(yīng)的ssh服務(wù)于dhcpv6-client的服務(wù),在firewalld之中是可以直接通過(guò)服務(wù)來(lái)放行對(duì)應(yīng)的內(nèi)容,也就是上文參數(shù)service,詳細(xì)的配置參數(shù)需要在目錄/usr/lib/firewalld/services之中進(jìn)行配置,我們嘗試打開(kāi)上文ssh服務(wù)的內(nèi)容:
由上文的配置內(nèi)容可見(jiàn):所謂的服務(wù)配置防火墻,本身也是通過(guò)標(biāo)注協(xié)議與端口的方式進(jìn)行的,只不過(guò)是用服務(wù)的邏輯進(jìn)行包裝了。至于使用哪種形式,各位見(jiàn)仁見(jiàn)智了。
小結(jié)
梳理了一下在lvs下雙網(wǎng)卡firewalld的配置流程。debian系列的發(fā)行版也是大同小異,只不過(guò)firewalld工具需要自行使用apt-get進(jìn)行安裝。上述內(nèi)容若有疏漏,望各位指點(diǎn)斧正。
原文鏈接:https://www.cnblogs.com/happenlee/archive/2018/04/24/8928843.html