防火墻
防火墻是一套規(guī)則。當(dāng)數(shù)據(jù)包進(jìn)入或離開受保護(hù)的網(wǎng)絡(luò)空間時(shí),將根據(jù)防火墻規(guī)則測試數(shù)據(jù)包的內(nèi)容(特別是有關(guān)其來源、目標(biāo)和計(jì)劃使用的協(xié)議的信息),以確定是否應(yīng)該允許數(shù)據(jù)包通過。下面是一個(gè)簡單的例子:
防火墻可以根據(jù)協(xié)議或基于目標(biāo)的規(guī)則過濾請求.
一方面,iptables是管理Linux機(jī)器上防火墻規(guī)則的工具。
另一方面,firewalld也是管理Linux機(jī)器上防火墻規(guī)則的工具。
你對此有意見嗎?如果我告訴你外面還有另一個(gè)工具,叫做nftable?
好吧,我承認(rèn)整件事聞起來有點(diǎn)怪怪的,所以讓我解釋一下。這一切都是從Netfilter開始的,Netfilter控制Linux內(nèi)核模塊級別對網(wǎng)絡(luò)堆棧的訪問。幾十年來,管理Netfilter鉤子的主要命令行工具是iptables規(guī)則集。
因?yàn)檎{(diào)用這些規(guī)則所需的語法可能有點(diǎn)神秘,各種用戶友好的實(shí)現(xiàn)如下UFW并引入了Firewalld作為高級Netfilter解釋器.然而,UFW和Firewalld主要是為了解決獨(dú)立計(jì)算機(jī)所面臨的各種問題而設(shè)計(jì)的。構(gòu)建全尺寸的網(wǎng)絡(luò)解決方案通常需要iptables的額外功能,或者自2014年以來,它的替代品nftable(通過nft命令行工具)。
iptables沒有去任何地方,而且仍然被廣泛使用。事實(shí)上,在未來的許多年里,您應(yīng)該會(huì)在管理員的工作中遇到受iptables保護(hù)的網(wǎng)絡(luò)。但是nftable通過添加到經(jīng)典的Netfilter工具集,帶來了一些重要的新功能。
從現(xiàn)在開始,我將通過示例演示Firewalld和iptables如何解決簡單的連接問題。
使用Firewalld配置HTTP訪問
正如您從其名稱中可能猜到的那樣,F(xiàn)irewalld是systemd一家人。Firewalld可以安裝在Debian/Ubuntu機(jī)器上,但在RedHat和CentOS上是默認(rèn)的。如果在計(jì)算機(jī)上運(yùn)行了像Apache這樣的Web服務(wù)器,則可以通過瀏覽服務(wù)器的Web根目錄來確認(rèn)防火墻是否正常工作。如果這個(gè)網(wǎng)站無法到達(dá),那么Firewalld就在做它的工作。
您將使用firewall-cmd工具來管理命令行中的Firewalld設(shè)置。添加–state參數(shù)返回當(dāng)前防火墻狀態(tài):
# firewall-cmd --state
running
默認(rèn)情況下,F(xiàn)irewalld將處于活動(dòng)狀態(tài),并將拒絕所有傳入通信量,但有幾個(gè)例外情況,如SSH。這意味著您的網(wǎng)站將不會(huì)有太多的訪問者,這肯定會(huì)為您節(jié)省大量的數(shù)據(jù)傳輸成本。但是,由于這可能不是您對Web服務(wù)器的想法,所以您需要打開HTTP和HTTPS端口,按照約定,這兩個(gè)端口分別被指定為80和443。Firewalld提供了兩種方法來做到這一點(diǎn)。一個(gè)是通過–add-port參數(shù),直接引用端口號以及它將使用的網(wǎng)絡(luò)協(xié)議(在本例中為TCP)。這,這個(gè),那,那個(gè)–permanent參數(shù)告訴Firewalld在每次服務(wù)器啟動(dòng)時(shí)加載此規(guī)則:
# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --permanent --add-port=443/tcp
–reload參數(shù)將這些規(guī)則應(yīng)用于本屆會(huì)議:
對防火墻上的當(dāng)前設(shè)置很好奇嗎?跑–list-services:
# firewall-cmd --list-services
dhcpv6-client http https ssh
假設(shè)您添加了前面描述的瀏覽器訪問,HTTP、HTTPS和SSH端口現(xiàn)在都應(yīng)該是打開的dhcpv6-client,它允許Linux從本地DHCP服務(wù)器請求IPv 6 IP地址。
使用iptables配置鎖定的客戶信息亭
我敢肯定你見過售貨亭-它們是平板電腦、觸摸屏和類似ATM的個(gè)人電腦-在一個(gè)包廂里,機(jī)場、圖書館和商務(wù)室隨處可見,邀請顧客和過路人瀏覽內(nèi)容。大多數(shù)信息亭的特點(diǎn)是,你通常不希望用戶在家里把自己當(dāng)成自己的設(shè)備。它們通常不是用來瀏覽、觀看youtube視頻或?qū)ξ褰谴髽前l(fā)起拒絕服務(wù)攻擊的。所以,為了確保它們不被濫用,你需要把它們鎖起來。
一種方法是應(yīng)用某種Kiosk模式,無論是通過聰明地使用Linux顯示管理器還是在瀏覽器級別。但是,為了確保所有的漏洞都已堵塞,您可能還需要通過防火墻添加一些硬網(wǎng)絡(luò)控件。在下一節(jié)中,我將描述如何使用iptable來實(shí)現(xiàn)它。
關(guān)于使用iptables,有兩件重要的事情要記?。耗o出的規(guī)則的順序是至關(guān)重要的,僅憑它本身,Iptable規(guī)則將無法在重新啟動(dòng)后存活下來。我會(huì)在這里一次講一遍。
亭工程
為了說明這一切,讓我們想象一下,我們在一家名為BigMart的大型連鎖商店工作。他們已經(jīng)存在了幾十年;事實(shí)上,我們想象中的祖父母很可能是在那里購物長大的。但如今,BigMart公司總部的人可能只是在數(shù)著亞馬遜(Amazon)把他們永遠(yuǎn)趕下去之前的幾個(gè)小時(shí)。
盡管如此,BigMart的IT部門正在盡力而為,他們剛剛給您發(fā)送了一些WiFi準(zhǔn)備的信息亭設(shè)備,您可以在整個(gè)商店的戰(zhàn)略位置安裝這些設(shè)備。他們的想法是,他們將顯示一個(gè)登錄到BigMart.com產(chǎn)品頁面的網(wǎng)頁瀏覽器,允許他們查找商品特征、走道位置和庫存級別。這些信息亭還需要訪問bigmart-data.com,那里存儲(chǔ)了許多圖像和視頻媒體。
除此之外,您還希望允許更新,并在必要時(shí)允許包下載。最后,您希望只允許從本地工作站訪問入站SSH,并阻止其他所有人。下圖說明了這一切將如何運(yùn)作:
亭的交通流量由iptable控制。
劇本
下面是如何將所有這些都放入一個(gè)Bash腳本中:
#!/bin/bash
iptables -A OUTPUT -p tcp -d bigmart.com -j ACCEPT
iptables -A OUTPUT -p tcp -d bigmart-data.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ca.archive.ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j DROP
iptables -A OUTPUT -p tcp --dport 443 -j DROP
iptables -A INPUT -p tcp -s 10.0.3.1 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
我們的規(guī)則的基本解剖是從-A告訴iptables我們要添加以下規(guī)則。OUTPUT這意味著這個(gè)規(guī)則應(yīng)該成為輸出鏈的一部分。-p指示此規(guī)則僅適用于使用tcp協(xié)議的數(shù)據(jù)包,其中,-d告訴我們,目的地是bigmart.com。這,這個(gè),那,那個(gè)-j標(biāo)志指向ACCEPT作為當(dāng)數(shù)據(jù)包與規(guī)則匹配時(shí)要采取的操作。在第一條規(guī)則中,該操作是允許或接受請求。但在更低的范圍內(nèi),您可以看到將被刪除或拒絕的請求。
記住秩序很重要。這是因?yàn)閕ptables將運(yùn)行一個(gè)請求,超過它的每個(gè)規(guī)則,但只有在它得到匹配為止。所以一個(gè)向外發(fā)送的瀏覽器請求,比如說,youtube.com將通過前四條規(guī)則,但是當(dāng)它到達(dá)–dport 80或–dport 443規(guī)則-取決于它是HTTP請求還是HTTPS請求-它將被刪除。Iptable不會(huì)再費(fèi)心檢查了,因?yàn)槟鞘瞧ヅ涞摹?/p>
另一方面,如果系統(tǒng)請求ubuntu.com進(jìn)行軟件升級,那么當(dāng)它達(dá)到適當(dāng)?shù)囊?guī)則時(shí),它就會(huì)通過。顯然,我們在這里所做的是只允許發(fā)送HTTP或HTTPS請求到我們的BigMart或Ubuntu目的地,而不是其他目的地。
最后兩個(gè)規(guī)則將處理傳入的SSH請求。由于它們不使用端口80或443,而是使用22,所以它們不會(huì)被前面的兩個(gè)DROP規(guī)則所拒絕。在這種情況下,從我的工作站登錄請求將被接受,但其他任何地方的請求將被刪除。這一點(diǎn)很重要:確保用于端口22規(guī)則的IP地址與用于登錄的機(jī)器的地址相匹配-如果不這樣做,您將立即被鎖在門外。當(dāng)然,這沒什么大不了的,因?yàn)榘凑债?dāng)前的配置方式,您可以簡單地重新啟動(dòng)服務(wù)器,而iptables規(guī)則就會(huì)被刪除。如果您使用LXC容器作為您的服務(wù)器并從您的LXC主機(jī)登錄,那么使用您的主機(jī)用來連接到容器的IP地址,而不是它的公共地址。
如果我的機(jī)器的IP曾經(jīng)改變,您需要記住更新這個(gè)規(guī)則;否則,您將被鎖在門外。
在家里玩(希望是在一個(gè)丟棄的VM上)?太棒了創(chuàng)建自己的腳本?,F(xiàn)在我可以保存腳本,使用chmod使其可執(zhí)行,并將其運(yùn)行為sudo。別擔(dān)心bigmart-data.com not found錯(cuò)誤-當(dāng)然找不到;它不存在。
chmod +X scriptname.sh
sudo ./scriptname.sh
您可以在命令行中使用cURL。請求ubuntu.com有效,但是manning.com失敗了。
curl ubuntu.com
curl manning.com
將iptables配置為在系統(tǒng)啟動(dòng)時(shí)加載
現(xiàn)在,我如何使這些規(guī)則自動(dòng)加載每次售貨機(jī)啟動(dòng)?第一步是使用iptables-save工具。這將在根目錄中創(chuàng)建一個(gè)包含規(guī)則列表的文件。這個(gè)管道,后面跟著tee命令,是應(yīng)用我的sudo權(quán)限到字符串的第二部分:將文件實(shí)際保存到其他受限制的根目錄。
然后,我可以告訴系統(tǒng)運(yùn)行一個(gè)名為iptables-restore每次它啟動(dòng)。像我們在前面的模塊中看到的那樣的常規(guī)cron作業(yè)不會(huì)有幫助,因?yàn)樗鼈兪窃谠O(shè)定的時(shí)間運(yùn)行的,但是我們不知道我們的計(jì)算機(jī)何時(shí)會(huì)決定崩潰和重新啟動(dòng)。
有很多方法來處理這個(gè)問題。這里有一個(gè):
在我的Linux機(jī)器上,我將安裝一個(gè)名為anacron這將在/etc/目錄中提供一個(gè)名為anacrontab的文件。我將編輯該文件并添加以下內(nèi)容iptables-restore命令,告訴它每天(必要時(shí))在啟動(dòng)后一分鐘將該.Rule文件的當(dāng)前值加載到iptables中。我會(huì)給作業(yè)一個(gè)標(biāo)識符(iptables-restore),然后添加命令本身。既然你在家里和我一起玩,你應(yīng)該重新啟動(dòng)你的系統(tǒng)來測試這一切。
sudo iptables-save | sudo tee /root/my.active.firewall.rules
sudo apt install anacron
sudo nano /etc/anacrontab
1 1 iptables-restore iptables-restore < /root/my.active.firewall.rules
我希望這些實(shí)際的例子已經(jīng)說明了如何使用iptables和Firewalld來管理基于Linux的防火墻上的連接問題。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接