IPTables 是在 Linux 上通過命令行運行的防火牆系統的名稱。該程序主要作為Ubuntu上的默認實用程序提供。管理員經常使用 IPTables 防火牆來允許或阻止流量進入他們的網絡。
如果您是 IPTables 的新手,那麼您需要做的第一件事就是使用以下命令更新或安裝它:
$ sudo apt-get install iptables
雖然不熟悉命令行界面的用戶發現 IPTables 有一個學習曲線,但該實用程序本身非常簡單易用。有一系列核心命令可以作為控制流量的基礎。話雖如此,您在更改 IPTables 規則時需要非常小心。輸入錯誤的命令可能會將您完全鎖定在 IPTables 之外,直到您解決物理機內的問題。
在本文中,我們將為您提供 IPTables 的基本指南,並向您介紹基礎知識。在我們進入 IPTables 的核心之前,你需要確保你有一個運行 Ubuntu 16.04的VPA和一個帶有 SSH 客戶端的 本地機器。如果您已經擁有這些,那麼是時候開始了。
Contents
IPTables 教程:鏈
在 IPTables 中要掌握的基本概念之一是鏈的概念。鏈本質上是一個規則。過濾器的表具有您在 IPTables 上會遇到的三個鏈;輸入、轉發 和輸出。
-
- INPUT – INPUT 鍊是控制傳入數據包的規則。您可以在此處阻止或允許新連接。您可以根據端口、協議和源 IP 地址執行此操作。
- FORWARD – FORWARD 鏈過濾正在轉發到不同終端位置的傳入數據包。除非您正在路由或專門尋找轉發,否則您不太可能使用此鏈。
- OUTPUT – OUTPUT 鏈用於管理傳出數據包和連接。請務必注意,如果您 ping 外部主機,則輸入鏈將用於將數據返回給您。
默認鏈行為
您可能希望在開始時直接進入配置特定規則,但您需要先後退一步來定義默認行為。要確定鏈的默認行為是什麼,您需要運行以下命令:
$ sudo iptables -L command
這將顯示以下內容:
user@ubuntu:~$ sudo iptables -L -v Chain INPUT (policy ACCEPT) Chain FORWARD (policy ACCEPT) Chain OUTPUT (policy ACCEPT) user@ubuntu:~$
此信息準確地告訴您鏈的配置目的。在示例中,輸入、轉發和輸出鏈已配置為接受流量。這些設置是一個很好的起點,因為它們不會阻止您可能想要的任何連接。
但是,如果您發現您的策略不接受連接,那麼您可以輸入以下每個命令來接受所有連接:
$ sudo iptables —policy INPUT ACCEPT
$ sudo iptables —policy OUTPUT ACCEPT
$ sudo iptables —policy FORWARD ACCEPT
一旦您的默認設置接受所有連接,您就可以通過阻止 IP 地址和端口號來控制對 IPTables 的訪問。這允許您指定要阻止的連接,而不是默認阻止所有連接。
如果您正在處理特別敏感的信息,那麼您可以將默認設置配置為自動阻止所有連接。通過這種方式,您可以使用 IPTables 來選擇您想要允許的單個 IP 地址。為此,您需要輸入以下命令:
$ sudo iptables —policy INPUT DROP
$ sudo iptables —policy OUTPUT DROP
$ sudo iptables —policy FORWARD DROP
大多數用戶最好接受所有連接,但如果您在高安全性服務器上工作,則值得記住。
配置單個連接
配置默認鏈行為後,就可以配置單個連接了。這是您配置所謂的連接特定響應的地方。這實質上是告訴 IPTables 在連接到 IP 地址或端口時如何進行交互。這些回應如下;接受,放棄,拒絕。
正如您在上圖中所看到的,用戶已經定義了鏈規則來根據要求允許、丟棄或拒絕連接。以下是對每個響應所包含的內容的描述:
- ACCEPT – 此配置僅允許進行連接。
- DROP – Drop 阻止連接,而不以任何方式與源交互。
- REJECT – 這會阻止嘗試的連接,但也會發送錯誤消息。這通常是為了通知源連接嘗試已被防火牆阻止。
如何允許或阻止連接
根據您的設置,有許多不同的方法可以阻止或允許連接。下面的示例使用隱蔽阻塞方法,即使用Drop 斷開連接而無需任何交互。 iptables -A 允許我們向默認鏈設置建立的規則添加額外的警告。您將在下面看到如何使用此命令來阻止連接:
阻止單個 IP 地址:
$ sudo iptables -A INPUT -S 10.10.10.10 -j DROP
在上面的示例中,您可以將 10.10.10.10 替換為要阻止的 IP 地址。
阻止一系列 IP 地址:
$ sudo iptables -A INPUT -s 10.10.10.10.0/24 -j DROP
或者
$ sudo iptables -A INPUT -s 10.10.10.0/255.255.255/.0 -j DROP
阻塞單個端口:
$ sudo iptables -A INPUT -p tcp —dport ssh -s 10.10.10.10 -j DROP
請注意,’ssh 可以替換為任何協議或端口號。同樣需要注意的是,代碼的 -p tcp 段用於表示您要阻止的協議是使用 UDP 還是 TCP。
如果協議使用 UDP,那麼您將輸入-p udp而不是-p tcp。您還可以通過輸入以下命令來阻止來自 IP 地址的所有連接:
$ sudo iptables -A INPUT -p tcp —dport ssh -jDROP
雙向通信:連接狀態 IPTables 教程
您遇到的大多數協議都需要雙向通信才能進行傳輸。這意味著傳輸由輸入和輸出組成。進入您系統的內容與輸出的內容一樣重要。連接狀態允許您在雙向連接和單向連接之間混合和匹配。在下面的示例中,SSH 協議阻止了來自 IP 地址的 SSH 連接,但允許連接到 IP 地址:
$ sudo iptables -A INPUT -p tcp —dport ssh -s 10.10.10.10 -m state —state NEW, ESTABLISHED -j ACCEPT $ sudo iptables -A OUTPUT -p tcp —sport 22 -d 10.10.10.10。-m state —state ESTABLISHED -J ACCEPT
輸入更改連接狀態的命令後,您需要保存更改。如果您不這樣做,那麼當您關閉該實用程序時,您的配置將會丟失。根據您使用的分發系統,您可以使用許多不同的命令:
Ubuntu:
$ sudo /sbin/iptables-save
紅帽 / CentOS –
$ sudo /sbin/service iptables save
或者
$ sudo /etc/init.d/iptables save
記住使用這些命令非常重要,因為它可以消除每次加載實用程序時都必須進行配置的麻煩。
刪除規則
與能夠保存規則同樣重要的是能夠刪除它們。如果您犯了錯誤或只是想消除舊規則,則可以使用選項 – D 命令。此命令需要與您輸入的規則編號結合使用。該數字告訴 IPTables 要刪除哪個規則。例如,如果您要輸入:
$ sudo iptables -D INPUT 10
那麼您配置的第 10 條規則將被刪除。
如果您想清理房屋並刪除一系列規則,則可以使用-F 命令。您可以通過輸入以下內容來執行此操作:
$ sudo iptables -F
這將清除整個規則集並刷新您的 IPTable。
IPTables:學習鏈規則!
我們的 IPTables 教程到此結束。如您所見,IPTables 是一種用於阻止和允許Linux發行版上的流量的多功能工具。有效地使用該實用程序涉及有效地設置默認配置並在此基礎上構建其他規則。默認配置將允許您概述允許或拒絕流量的廣泛流量意圖;這些規則將允許您根據 IP 地址、端口和協議來構建您的方法。
我們只是觸及了 IPTables 潛力的皮毛,您可以使用大量不同的命令來決定如何體驗服務器上的流量。但是,我們建議您在開始使用其他命令之前先了解基礎知識。例如,在致力於任何更專業的事情之前,您需要先了解基本的鏈規則。
一旦您習慣了 IPTables 的工作方式,您就可以開始整合更多規則來定制您的體驗。通過這樣做,您將能夠以比以往更高的精度準確指定您將允許的連接類型。