如何使用 iptables 和 firewalld 工具來管理 Linux 防火牆規則

如下是如何使用 iptables 和 firewalld 工具來管理 Linux 防火牆規則。
如何使用 iptables 和 firewalld 工具來管理 Linux 防火牆規則如何使用 iptables 和 firewalld 工具來管理 Linux 防火牆規則html

防火牆linux

防火牆是一組規則。當數據包進出受保護的網絡區域時,進出內容(特別是關於其來源、目標和使用的協議等信息)會根據防火牆規則進行檢測,以肯定是否容許其經過。下面是一個簡單的例子:web

如何使用 iptables 和 firewalld 工具來管理 Linux 防火牆規則如何使用 iptables 和 firewalld 工具來管理 Linux 防火牆規則

防火牆能夠根據協議或基於目標的規則過濾請求。ubuntu

一方面,iptables是 Linux 機器上管理防火牆規則的工具。瀏覽器

另外一方面,firewalld也是 Linux 機器上管理防火牆規則的工具。bash

好吧,我認可整件事確實有點可笑,因此讓我來解釋一下。這一切都從 Netfilter 開始,它在 Linux 內核模塊級別控制訪問網絡棧。幾十年來,管理 Netfilter 鉤子的主要命令行工具是 iptables 規則集。服務器

由於調用這些規則所需的語法看起來有點晦澀難懂,因此各類用戶友好的實現方式,如 ufw和 firewalld 被引入,做爲更高級別的 Netfilter 解釋器。然而,ufw 和 firewalld 主要是爲解決單獨的計算機所面臨的各類問題而設計的。構建全方面的網絡解決方案一般須要 iptables,或者從 2014 年起,它的替代品 nftables (nft 命令行工具)。網絡

iptables 沒有消失,仍然被普遍使用着。事實上,在將來的許多年裏,做爲一名管理員,你應該會使用 iptables 來保護的網絡。可是 nftables 經過操做經典的 Netfilter 工具集帶來了一些重要的嶄新的功能。ssh

從如今開始,我將經過示例展現 firewalld 和 iptables 如何解決簡單的鏈接問題。curl

使用 firewalld 配置 HTTP 訪問

正如你能從它的名字中猜到的,firewalld 是systemd家族的一部分。firewalld 能夠安裝在 Debian/Ubuntu 機器上,不過,它默認安裝在 RedHat 和 CentOS 上。若是您的計算機上運行着像 Apache 這樣的 web 服務器,您能夠經過瀏覽服務器的 web 根目錄來確認防火牆是否正在工做。若是網站不可訪問,那麼 firewalld 正在工做。

你可使用firewall-cmd工具從命令行管理 firewalld 設置。添加–state參數將返回當前防火牆的狀態:

# firewall-cmd --state
running

默認狀況下,firewalld 處於運行狀態,並拒絕全部傳入流量,但有幾個例外,如 SSH。這意味着你的網站不會有太多的訪問者,這無疑會爲你節省大量的數據傳輸成本。然而,這不是你對 web 服務器的要求,你但願打開 HTTP 和 HTTPS 端口,按照慣例,這兩個端口分別被指定爲 80 和 443。firewalld 提供了兩種方法來實現這個功能。一個是經過–add-port參數,該參數直接引用端口號及其將使用的網絡協議(在本例中爲TCP)。 另一個是經過–permanent參數,它告訴 firewalld 在每次服務器啓動時加載此規則:

# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --permanent --add-port=443/tcp

–reload 參數將這些規則應用於當前會話:

# firewall-cmd --reload

查看當前防火牆上的設置,運行–list-services:

# firewall-cmd --list-services
dhcpv6-client http https ssh

假設您已經如前所述添加了瀏覽器訪問,那麼 HTTP、HTTPS 和 SSH 端口如今都應該是和dhcpv6-client同樣開放的 —— 它容許 Linux 從本地 DHCP 服務器請求 IPv6 IP 地址。

使用 iptables 配置鎖定的客戶信息亭

我相信你已經看到了信息亭——它們是放在機場、圖書館和商務場所的盒子裏的平板電腦、觸摸屏和 ATM 類電腦,邀請顧客和路人瀏覽內容。大多數信息亭的問題是,你一般不但願用戶像在本身家同樣,把他們當成本身的設備。它們一般不是用來瀏覽、觀看 YouTube 視頻或對五角大樓發起拒絕服務攻擊的。所以,爲了確保它們沒有被濫用,你須要鎖定它們。

一種方法是應用某種信息亭模式,不管是經過巧妙使用 Linux 顯示管理器仍是控制在瀏覽器級別。可是爲了確保你已經堵塞了全部的漏洞,你可能還想經過防火牆添加一些硬性的網絡控制。在下一節中,我將講解如何使用iptables 來完成。

關於使用 iptables,有兩件重要的事情須要記住:你給出的規則的順序很是關鍵;iptables 規則自己在從新啓動後將沒法保持。我會一次一個地在解釋這些。

信息亭項目

爲了說明這一切,讓咱們想象一下,咱們爲一家名爲 BigMart 的大型連鎖商店工做。它們已經存在了幾十年;事實上,咱們想象中的祖父母多是在那裏購物並長大的。可是現在,BigMart 公司總部的人可能只是在數着亞馬遜將他們永遠趕下去的時間。

儘管如此,BigMart 的 IT 部門正在盡他們最大努力提供解決方案,他們向你發放了一些具備 WiFi 功能信息亭設備,你在整個商店的戰略位置使用這些設備。其想法是,登陸到 BigMart.com 產品頁面,容許查找商品特徵、過道位置和庫存水平。信息亭還容許進入 bigmart-data.com,那裏儲存着許多圖像和視頻媒體信息。

除此以外,您還須要容許下載軟件包更新。最後,您還但願只容許從本地工做站訪問 SSH,並阻止其餘人登陸。下圖說明了它將如何工做:

如何使用 iptables 和 firewalld 工具來管理 Linux 防火牆規則如何使用 iptables 和 firewalld 工具來管理 Linux 防火牆規則

*信息亭業務流由 iptables 控制。 *

腳本

如下是 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

咱們從基本規則 -A 開始分析,它告訴 iptables 咱們要添加規則。OUTPUT 意味着這條規則應該成爲輸出鏈的一部分。-p 表示該規則僅使用 TCP 協議的數據包,正如 -d 告訴咱們的,目的地址是 bigmart.com。-j 參數的做用是當數據包符合規則時要採起的操做是 ACCEPT。第一條規則表示容許(或接受)請求。但,往下的規則你能看到丟棄(或拒絕)的請求。

規則順序是很重要的。由於 iptables 會對一個請求遍歷每一個規則,直到遇到匹配的規則。一個向外發出的瀏覽器請求,好比訪問 bigmart.com 是會經過的,由於這個請求匹配第一條規則,可是當它到達 dport 80 或 dport 443 規則時——取決因而 HTTP 仍是 HTTPS 請求——它將被丟棄。當遇到匹配時,iptables 再也不繼續往下檢查了。

另外一方面,向 ubuntu.com 發出軟件升級的系統請求,只要符合其適當的規則,就會經過。顯然,咱們在這裏作的是,只容許向咱們的 BigMart 或 Ubuntu 發送 HTTP 或 HTTPS 請求,而不容許向其餘目的地發送。

最後兩條規則將處理 SSH 請求。由於它不使用端口 80 或 443 端口,而是使用 22 端口,因此以前的兩個丟棄規則不會拒絕它。在這種狀況下,來自個人工做站的登陸請求將被接受,可是對其餘任何地方的請求將被拒絕。這一點很重要:確保用於端口 22 規則的 IP 地址與您用來登陸的機器的地址相匹配——若是不這樣作,將當即被鎖定。固然,這沒什麼大不了的,由於按照目前的配置方式,只需重啓服務器,iptables 規則就會所有丟失。若是使用 LXC 容器做爲服務器並從 LXC 主機登陸,則使用主機 IP 地址鏈接容器,而不是其公共地址。

若是機器的 IP 發生變化,請記住更新這個規則;不然,你會被拒絕訪問。

在家玩(是在某種一次性虛擬機上)?太好了。建立本身的腳本。如今我能夠保存腳本,使用 chmod 使其可執行,並以 sudo 的形式運行它。不要擔憂「igmart-data.com 沒找到」之類的錯誤 —— 固然沒找到;它不存在。

chmod +X scriptname.sh
sudo ./scriptname.sh

你可使用 cURL 命令行測試防火牆。請求 ubuntu.com 奏效,但請求manning.com是失敗的

curl ubuntu.com
curl manning.com

配置 iptables 以在系統啓動時加載

如今,我如何讓這些規則在每次信息亭啓動時自動加載?第一步是將當前規則保存。使用 iptables-save 工具保存規則文件。這將在根目錄中建立一個包含規則列表的文件。管道後面跟着 tee 命令,是將個人sudo 權限應用於字符串的第二部分:將文件實際保存到不然受限的根目錄。

而後我能夠告訴系統每次啓動時運行一個相關的工具,叫作 iptables-restore 。咱們在上一章節(LCTT 譯註:指做者的書)中看到的常規 cron 任務並不適用,由於它們在設定的時間運行,可是咱們不知道何時咱們的計算機可能會決定崩潰和重啓。

有許多方法來處理這個問題。這裏有一個:

在個人 Linux 機器上,我將安裝一個名爲anacron的程序,該程序將在 /etc/ 目錄中爲咱們提供一個名爲 anacrontab 的文件。我將編輯該文件並添加這個 iptables-restore 命令,告訴它加載那個 .rule 文件的當前內容。當引導後,規則天天(必要時)01:01 時加載到 iptables 中(LCTT 譯註:anacron 會補充執行因爲機器沒有運行而錯過的 cron 任務,所以,即使 01:01 時機器沒有啓動,也會在機器啓動會盡快執行該任務)。我會給該任務一個標識符(iptables-restore),而後添加命令自己。若是你在家和我一塊兒這樣,你應該經過重啓系統來測試一下。

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

我但願這些實際例子已經說明了如何使用 iptables 和 firewalld 來管理基於 Linux 的防火牆上的鏈接問題。

原文來自: https://www.linuxprobe.com/linux-iptables-irewalld.html

相關文章
相關標籤/搜索