溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么使用防火墻讓Linux更加強(qiáng)大

發(fā)布時(shí)間:2021-10-23 14:10:48 來(lái)源:億速云 閱讀:153 作者:小新 欄目:系統(tǒng)運(yùn)維

這篇文章主要介紹怎么使用防火墻讓Linux更加強(qiáng)大,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

防火墻的工作原理

網(wǎng)絡(luò)里不同設(shè)備之間的通信是通過(guò)一種叫做端口port的網(wǎng)關(guān)實(shí)現(xiàn)的。這里的端口指的并不是像 USB 端口 或者 HDMI 端口這樣的物理連接。在網(wǎng)絡(luò)術(shù)語(yǔ)中,端口是一個(gè)純粹的虛擬概念,用來(lái)表示某種類型的數(shù)據(jù)到達(dá)或離開一臺(tái)計(jì)算機(jī)時(shí)候所走的路徑。其實(shí)也可以換個(gè)名字來(lái)稱呼,比如叫“連接”或者“門口”,不過(guò) 早在 1981 年的時(shí)候 它們就被稱作端口了,這個(gè)叫法也沿用至今。其實(shí)端口這個(gè)東西沒有任何特別之處,只是一種用來(lái)指代一個(gè)可能會(huì)發(fā)生數(shù)據(jù)傳輸?shù)牡刂返姆绞健?/p>

1972 年,發(fā)布了一份 端口號(hào)列表(那時(shí)候的端口被稱為“套接字socket”),并且從此演化為一組眾所周知的標(biāo)準(zhǔn)端口號(hào),幫助管理特定類型的網(wǎng)絡(luò)流量。比如說(shuō),你每天訪問網(wǎng)站的時(shí)候都會(huì)使用  80 和 443 端口,因?yàn)榛ヂ?lián)網(wǎng)上的絕大多數(shù)人都同意(或者是默認(rèn))數(shù)據(jù)從 web  服務(wù)器上傳輸?shù)臅r(shí)候是通過(guò)這兩個(gè)端口的。如果想要驗(yàn)證這一點(diǎn),你可以在使用瀏覽器訪問網(wǎng)站的時(shí)候在 URL 后面加上一個(gè)非標(biāo)準(zhǔn)的端口號(hào)碼。比如說(shuō),訪問  example.com:42 的請(qǐng)求會(huì)被拒絕,因?yàn)?example.com 在 42 端口上并不提供網(wǎng)站服務(wù)。

怎么使用防火墻讓Linux更加強(qiáng)大

Navigating to a nonstandard port produces an error

如果你是通過(guò) 80 端口訪問同一個(gè)網(wǎng)站,就可以(不出所料地)正常訪問了。你可以在 URL 后面加上 :80 來(lái)指定使用 80 端口,不過(guò)由于 80 端口是 HTTP 訪問的標(biāo)準(zhǔn)端口,所以你的瀏覽器其實(shí)已經(jīng)默認(rèn)在使用 80 端口了。

當(dāng)一臺(tái)計(jì)算機(jī)(比如說(shuō) web 服務(wù)器)準(zhǔn)備在指定端口接收網(wǎng)絡(luò)流量的時(shí)候,保持該端口向網(wǎng)絡(luò)流量開放是一種可以接受的(也是必要的)行為。但是不需要接收流量的端口如果也處在開放狀態(tài)就比較危險(xiǎn)了,這就是需要用防火墻解決的問題。

安裝 firewalld

有很多種配置防火墻的方式,這篇文章介紹 firewalld。在桌面環(huán)境下它被集成在網(wǎng)絡(luò)管理器Network Manager里,在終端里則是集成在 firewall-cmd 里。很多 Linux 發(fā)行版都預(yù)裝了這些工具。如果你的發(fā)行版里沒有,你可以把這篇文章當(dāng)成是管理防火墻的通用性建議,在你所使用的防火墻軟件里使用類似的方法,或者你也可以選擇安裝 firewalld。

比如說(shuō)在 Ubuntu 上,你必須啟用 universe 軟件倉(cāng)庫(kù),關(guān)閉默認(rèn)的 ufw 防火墻,然后再安裝 firewalld

$ sudo systemctl disable ufw$ sudo add-apt-repository universe$ sudo apt install firewalld

Fedora、CentOS、RHEL、OpenSUSE,以及其它很多發(fā)行版默認(rèn)就包含了 firewalld。

無(wú)論你使用哪個(gè)發(fā)行版,如果希望防火墻發(fā)揮作用,就必須保持它在開啟狀態(tài),并且設(shè)置成開機(jī)自動(dòng)加載。你應(yīng)該盡可能減少在防火墻維護(hù)工作上所花費(fèi)的精力。

$ sudo systemctl enable --now firewalld

使用網(wǎng)絡(luò)管理器選擇區(qū)域

或許你每天都會(huì)連接到很多不同的網(wǎng)絡(luò)。在工作的時(shí)候使用的是一個(gè)網(wǎng)絡(luò),在咖啡館里是另一個(gè),在家里又是另一個(gè)。你的計(jì)算機(jī)可以判斷出哪一個(gè)網(wǎng)絡(luò)的使用頻率比較高,但是它并不知道哪一個(gè)是你信任的網(wǎng)絡(luò)。

一個(gè)防火墻的區(qū)域zone里包含了端口開放和關(guān)閉的預(yù)設(shè)規(guī)則。你可以通過(guò)使用區(qū)域來(lái)選擇一個(gè)對(duì)當(dāng)前網(wǎng)絡(luò)最適用的策略。

你可以打開網(wǎng)絡(luò)管理器里的連接編輯器(可以在應(yīng)用菜單里找到),或者是使用 nm-connection-editor & 命令以獲取所有可用區(qū)域的列表。

怎么使用防火墻讓Linux更加強(qiáng)大

Network Manager Connection Editor

在網(wǎng)絡(luò)連接列表中,雙擊你現(xiàn)在所使用的網(wǎng)絡(luò)。

在出現(xiàn)的網(wǎng)絡(luò)配置窗口中,點(diǎn)擊“通用”標(biāo)簽頁(yè)。

在“通用”面板中,點(diǎn)擊“防火墻區(qū)域”旁邊的下拉菜單以獲取所有可用區(qū)域的列表。

怎么使用防火墻讓Linux更加強(qiáng)大

Firewall zones

也可以使用下面的終端命令以獲取同樣的列表:

$ sudo firewall-cmd --get-zones

每個(gè)區(qū)域的名稱已經(jīng)可以透露出設(shè)計(jì)者創(chuàng)建這個(gè)區(qū)域的意圖,不過(guò)你也可以使用下面這個(gè)終端命令獲取任何一個(gè)區(qū)域的詳細(xì)信息:

$ sudo firewall-cmd --zone work --list-allwork  target: default  icmp-block-inversion: no  interfaces:  sources:  services: ssh dhcpv6-client  ports:  protocols:  [...]

在這個(gè)例子中,work 區(qū)域的配置是允許接收 SSH 和 DHCPv6-client 的流量,但是拒絕接收其他任何用戶沒有明確請(qǐng)求的流量。(換句話說(shuō),work 區(qū)域并不會(huì)在你瀏覽網(wǎng)站的時(shí)候攔截 HTTP 響應(yīng)流量,但是 會(huì) 攔截一個(gè)針對(duì)你計(jì)算機(jī)上 80 端口的 HTTP 請(qǐng)求。)

你可以依次查看每一個(gè)區(qū)域,弄清楚它們分別都允許什么樣的流量。比較常見的有:

  • work:這個(gè)區(qū)域應(yīng)該在你非常信任的網(wǎng)絡(luò)上使用。它允許 SSH、DHCPv6 和 mDNS,并且還可以添加更多允許的項(xiàng)目。該區(qū)域非常適合作為一個(gè)基礎(chǔ)配置,然后在此之上根據(jù)日常辦公的需求自定義一個(gè)工作環(huán)境。

  • public: 用在你不信任的網(wǎng)絡(luò)上。這個(gè)區(qū)域的配置和工作區(qū)域是一樣的,但是你不應(yīng)該再繼續(xù)添加其它任何允許項(xiàng)目。

  • drop:  所有傳入連接都會(huì)被丟棄,并且不會(huì)有任何響應(yīng)。在不徹底關(guān)閉網(wǎng)絡(luò)的條件下,這已經(jīng)是最接近隱形模式的配置了,因?yàn)橹辉试S傳出網(wǎng)絡(luò)連接(不過(guò)隨便一個(gè)端口掃描器就可以通過(guò)傳出流量檢測(cè)到你的計(jì)算機(jī),所以這個(gè)區(qū)域并不是一個(gè)隱形裝置)。如果你在使用公共  WiFi,這個(gè)區(qū)域可以說(shuō)是最安全的選擇;如果你覺得當(dāng)前的網(wǎng)絡(luò)比較危險(xiǎn),這個(gè)區(qū)域也一定是最好的選擇。

  • block: 所有傳入連接都會(huì)被拒絕,但是會(huì)返回一個(gè)消息說(shuō)明所請(qǐng)求的端口被禁用了。只有你主動(dòng)發(fā)起的網(wǎng)絡(luò)連接是被允許的。這是一個(gè)友好版的 drop 區(qū)域,因?yàn)殡m然還是沒有任何一個(gè)端口允許傳入流量,但是說(shuō)明了會(huì)拒絕接收任何不是本機(jī)主動(dòng)發(fā)起的連接。

  • home: 在你信任網(wǎng)絡(luò)里的其它計(jì)算機(jī)的情況下使用這個(gè)區(qū)域。該區(qū)域只會(huì)允許你所選擇的傳入連接,但是你可以根據(jù)需求添加更多的允許項(xiàng)目。

  • internal: 和工作區(qū)域類似,該區(qū)域適用于內(nèi)部網(wǎng)絡(luò),你應(yīng)該在基本信任網(wǎng)絡(luò)里的計(jì)算機(jī)的情況下使用。你可以根據(jù)需求開放更多的端口和服務(wù),同時(shí)保持和工作區(qū)域不同的一套規(guī)則。

  • trusted: 接受所有的網(wǎng)絡(luò)連接。適合在故障排除的情況下或者是在你絕對(duì)信任的網(wǎng)絡(luò)上使用。

為網(wǎng)絡(luò)指定一個(gè)區(qū)域

你可以為你的任何一個(gè)網(wǎng)絡(luò)連接都指定一個(gè)區(qū)域,并且對(duì)于同一個(gè)網(wǎng)絡(luò)的不同連接方式(比如以太網(wǎng)、WiFi 等等)也可以指定不同的區(qū)域。

選擇你想要的區(qū)域,點(diǎn)擊“保存”按鈕提交修改。

怎么使用防火墻讓Linux更加強(qiáng)大

Setting a new zone

養(yǎng)成為網(wǎng)絡(luò)連接指定區(qū)域的習(xí)慣的最好辦法是從你最常用的網(wǎng)絡(luò)開始。為你的家庭網(wǎng)絡(luò)指定家庭區(qū)域,為工作網(wǎng)絡(luò)指定工作區(qū)域,為你最喜歡的圖書館或者咖啡館的網(wǎng)絡(luò)指定公關(guān)區(qū)域。

一旦你為所有常用的網(wǎng)絡(luò)都指定了一個(gè)區(qū)域,在之后加入新的網(wǎng)絡(luò)的時(shí)候(無(wú)論是一個(gè)新的咖啡館還是你朋友家的網(wǎng)絡(luò)),試圖也為它指定一個(gè)區(qū)域吧。這樣可以很好地讓你意識(shí)到不同的網(wǎng)絡(luò)的安全性是不一樣的,你并不會(huì)僅僅因?yàn)槭褂昧?Linux 而比任何人更加安全。

默認(rèn)區(qū)域

每次你加入一個(gè)新的網(wǎng)絡(luò)的時(shí)候,firewalld 并不會(huì)提示你進(jìn)行選擇,而是會(huì)指定一個(gè)默認(rèn)區(qū)域。你可以在終端里輸入下面這個(gè)命令來(lái)獲取你的默認(rèn)區(qū)域:

$ sudo firewall-cmd --get-defaultpublic

在這個(gè)例子里,默認(rèn)區(qū)域是 public 區(qū)域。你應(yīng)該保證該區(qū)域有非常嚴(yán)格的限制規(guī)則,這樣在將它指定到未知網(wǎng)絡(luò)中的時(shí)候才比較安全?;蛘吣阋部梢栽O(shè)置你自己的默認(rèn)區(qū)域。

比如說(shuō),如果你是一個(gè)比較多疑的人,或者需要經(jīng)常接觸不可信任的網(wǎng)絡(luò)的話,你可以設(shè)置一個(gè)非常嚴(yán)格的默認(rèn)區(qū)域:

$ sudo firewall-cmd --set-default-zone dropsuccess$ sudo firewall-cmd --get-defaultdrop

這樣一來(lái),任何你新加入的網(wǎng)絡(luò)都會(huì)被指定使用 drop 區(qū)域,除非你手動(dòng)將它制定為另一個(gè)沒有這么嚴(yán)格的區(qū)域。

通過(guò)開放端口和服務(wù)實(shí)現(xiàn)自定義區(qū)域

Firewalld 的開發(fā)者們并不是想讓他們?cè)O(shè)定的區(qū)域能夠適應(yīng)世界上所有不同的網(wǎng)絡(luò)和所有級(jí)別的信任程度。你可以直接使用這些區(qū)域,也可以在它們基礎(chǔ)上進(jìn)行個(gè)性化配置。

你可以根據(jù)自己所需要進(jìn)行的網(wǎng)絡(luò)活動(dòng)決定開放或關(guān)閉哪些端口,這并不需要對(duì)防火墻有多深的理解。

預(yù)設(shè)服務(wù)

在你的防火墻上添加許可的最簡(jiǎn)單的方式就是添加預(yù)設(shè)服務(wù)。嚴(yán)格來(lái)講,你的防火墻并不懂什么是“服務(wù)”,因?yàn)樗恢蓝丝谔?hào)碼和使用協(xié)議的類型。不過(guò)在標(biāo)準(zhǔn)和傳統(tǒng)的基礎(chǔ)之上,防火墻可以為你提供一套端口和協(xié)議的組合。

比如說(shuō),如果你是一個(gè) web 開發(fā)者并且希望你的計(jì)算機(jī)對(duì)本地網(wǎng)絡(luò)開放(這樣你的同事就可以看到你正在搭建的網(wǎng)站了),可以添加 httphttps 服務(wù)。如果你是一名游戲玩家,并且在為你的游戲公會(huì)運(yùn)行開源的 murmur 語(yǔ)音聊天服務(wù)器,那么你可以添加 murmur 服務(wù)。還有其它很多可用的服務(wù),你可以使用下面這個(gè)命令查看:

$ sudo firewall-cmd --get-services    amanda-client amanda-k5-client bacula bacula-client \    bgp bitcoin bitcoin-rpc ceph cfengine condor-collector \    ctdb dhcp dhcpv6 dhcpv6-client dns elasticsearch \    freeipa-ldap freeipa-ldaps ftp [...]

如果你找到了一個(gè)自己需要的服務(wù),可以將它添加到當(dāng)前的防火墻配置中,比如說(shuō):

$ sudo firewall-cmd --add-service murmur

這個(gè)命令 在你的默認(rèn)區(qū)域里 添加了指定服務(wù)所需要的所有端口和協(xié)議,不過(guò)在重啟計(jì)算機(jī)或者防火墻之后就會(huì)失效。如果想讓你的修改永久有效,可以使用 --permanent 標(biāo)志:

$ sudo firewall-cmd --add-service murmur --permanent

你也可以將這個(gè)命令用于一個(gè)非默認(rèn)區(qū)域:

$ sudo firewall-cmd --add-service murmur --permanent --zone home
端口

有時(shí)候你希望允許的流量并不在 firewalld 定義的服務(wù)之中。也許你想在一個(gè)非標(biāo)準(zhǔn)的端口上運(yùn)行一個(gè)常規(guī)服務(wù),或者就是想隨意開放一個(gè)端口。

舉例來(lái)說(shuō),也許你正在運(yùn)行開源的 虛擬桌游 軟件 MapTool。由于 MapTool 服務(wù)器應(yīng)該使用哪個(gè)端口這件事情并沒有一個(gè)行業(yè)標(biāo)準(zhǔn),所以你可以自行決定使用哪個(gè)端口,然后在防火墻上“開一個(gè)洞”,讓它允許該端口上的流量。

實(shí)現(xiàn)方式和添加服務(wù)差不多:

$ sudo firewall-cmd --add-port 51234/tcp

這個(gè)命令 在你的默認(rèn)區(qū)域 里將 51234 端口向 TCP 傳入連接開放,不過(guò)在重啟計(jì)算機(jī)或者防火墻之后就會(huì)失效。如果想讓你的修改永久有效,可以使用 --permanent 標(biāo)志:

$ sudo firewall-cmd --add-port 51234/tcp --permanent

你也可以將這個(gè)命令用于一個(gè)非默認(rèn)區(qū)域:

$ sudo firewall-cmd --add-port 51234/tcp --permanent --zone home

在路由器的防火墻上設(shè)置允許流量和在本機(jī)上設(shè)置的方式是不同的。你的路由器可能會(huì)為它的內(nèi)嵌防火墻提供一個(gè)不同的配置界面(原理上是相同的),不過(guò)這就超出本文范圍了。

移除端口和服務(wù)

如果你不再需要某項(xiàng)服務(wù)或者某個(gè)端口了,并且設(shè)置的時(shí)候沒有使用 --permanent 標(biāo)志的話,那么可以通過(guò)重啟防火墻來(lái)清除修改。

如果你已經(jīng)將修改設(shè)置為永久生效了,可以使用 --remove-port 或者 --remove-service 標(biāo)志來(lái)清除:

$ sudo firewall-cmd --remove-port 51234/tcp --permanent

你可以通過(guò)在命令中指定一個(gè)區(qū)域以將端口或者服務(wù)從一個(gè)非默認(rèn)區(qū)域中移除。

$ sudo firewall-cmd --remove-service murmur --permanent --zone home

自定義區(qū)域

你可以隨意使用 firewalld 默認(rèn)提供的這些區(qū)域,不過(guò)也完全可以創(chuàng)建自己的區(qū)域。比如如果希望有一個(gè)針對(duì)游戲的特別區(qū)域,你可以創(chuàng)建一個(gè),然后只有在玩兒游戲的時(shí)候切換到該區(qū)域。

如果想要?jiǎng)?chuàng)建一個(gè)新的空白區(qū)域,你可以創(chuàng)建一個(gè)名為 game 的新區(qū)域,然后重新加載防火墻規(guī)則,這樣你的新區(qū)域就啟用了:

$ sudo firewall-cmd --new-zone game --permanentsuccess$ sudo firewall-cmd --reload

一旦創(chuàng)建好并且處于啟用狀態(tài),你就可以通過(guò)添加玩游戲時(shí)所需要的服務(wù)和端口來(lái)實(shí)現(xiàn)個(gè)性化定制了。

以上是“怎么使用防火墻讓Linux更加強(qiáng)大”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI