返回部落格

設定 Iptables 防火牆:基本規則與指令

設定 Iptables 防火牆:基本規則與指令

簡介

Iptables​ 是一個命令列 ​防火牆 ​公用程式。這意味著它是一款允許您在系統上設定防火牆的軟體。它通常預設安裝在 ​Linux​ 系統上。在本指南中,我們將 ​討論一些與 iptables​ 防火牆搭配使用的常見規則和指令。每當有連線嘗試與您的系統建立時,防火牆都會參考這些規則來決定下一步應該採取什麼行動。

Iptables 指令

本指南將介紹一些最基本的 iptables 指令。要遵循本指南,您需要對什麼是 iptables 及其運作方式有基本的了解。這將有助於您更好地掌握使用以下指令所實施的規則。請記住,下面給出的任何指令都可以單獨使用。另一方面,您也可以混合搭配它們以滿足您的特定需求。

注意事項

在您繼續閱讀之前,請記住以下幾點:

  • iptables 中規則的順序非常重要。
  • 要在鏈的末尾附加新規則,您的 ​iptables 指令必須使用 ​-A。​​
  • 如果您想在其他位置附加規則,則必須使用 ​-I 選項。此選項使您能夠指定規則的確切位置。如果您想將規則放在鏈的開頭,只需不提供規則編號即可。
  • 為了確保您能持續存取伺服器,請預設封鎖連接埠 22 上的 SSH 流量。
  • 如果您未能這樣做並失去對伺服器的存取權限,您可以使用主控台重新連線。允許 SSH 流量以變更防火牆設定。
  • 如果您想查看目前生效的規則集,請使用指令 sudo iptables -S​ 和 ​ ​sudo iptables -L。

此外,我們有一份 ​關於如何列出和刪除 iptables 防火牆規則的詳細指南​, 這將進一步幫助您充分利用您的 iptables 防火牆。

現在我們已經完成了準備工作,讓我們深入了解一些 ​常見的 iptables 指令​:

如何儲存您的規則

我們將首先確定如何儲存您的規則。請務必注意,iptables 規則是暫時的。這意味著除非您儲存它們,否則它們將在您重新啟動系統後遺失。以下是您分別在 ​Ubuntu​ 和 ​CentOS​ 伺服器上手動儲存新規則的方法:

  • Ubuntu

在 Ubuntu 伺服器上儲存新規則最簡單的方法是使用 iptables-persistent​ 套件。您可以輕鬆地 ​按照本教學建立 Ubuntu 伺服器​。

現在,儲存新 iptables 規則的第一步是使用 apt-get 安裝 iptables-persistent ​套件。以下是獲取它的方法:

Iptables Firewall 1

在安裝過程中,您需要決定是否要儲存目前生效的防火牆規則。若要改為更新規則並儲存變更,請使用以下指令:

Iptables Firewall 2

上述指令通常適用於 16.04 之後的 Ubuntu 版本。如果您使用的是較早的版本,請改用以下指令:

  • CentOS

您可以在 CentOS 6 或更舊的版本上使用 iptables 設定防火牆。CentOS 7 則改用 FirewallD。請遵循此 教學以了解如何在 CentOS 7 上設定 FirewallD.

您可以使用 ​iptables 初始化指令碼在 CentOS 上儲存新規則。請參閱以下指令:

此指令將儲存您的 iptables 防火牆新規則。目前作用中的 iptables 規則可以在 /etc/sysconfig/iptables​ 檔案中。

實用的 Iptables 指令

現在,讓我們繼續介紹一些您可能需要在伺服器上使用的非常實用的 iptables 防火牆指令。

  • 環迴連線

首先,我們將探討如何允許環迴連線。您的系統使用環迴介面來向自身傳送連線。例如,假設您執行了以下指令:​ping localhost​ 或 ​ping 127.0.0.1​。您的伺服器將使用環回介面,或 lo​,本質上是 ping 自身。其他時候,如果您的應用程式伺服器配置為連接到「localhost」位址,伺服器也可能會使用它。

無論情況如何,您都需要確保您的 iptables 防火牆不會阻擋這些連線。因此,您必須允許環回連線以使這些功能得以運作。

以下是您要執行以允許所有進入環回介面之流量的指令:

Iptables Firewall 3

  • 已建立和相關的傳入連線

另一種您可能需要允許的連線類型是傳出連線。為了確保您的伺服器分別接收和發送傳入和傳出流量,您需要允許已建立和相關的傳入連線。這允許伺服器將返回流量發送到傳出連線。使用此指令來允許已建立以及相關的傳入連線:

Established and Related Incoming Connections

  • 已建立的傳出連線

伺服器通常會以已建立連線的傳出流量形式,向傳入連線發送回應。要允許這些,請使用以下指令:

Established Outgoing Connections

  • 內部到外部

有時,您甚至可能需要配置防火牆以提供內部存取外部的權限。預設情況下,您的外部網路應該是 ​eth0​ 和 ​eth1 應該是您的內部網路。如果是這種情況,請使用此指令來啟用存取:

Internal to External

  • 捨棄無效封包

有時,某些網路流量封包會被標記為無效。大多數時候,您只需捨棄這些無效封包即可。為此,請使用以下指令:

Dropping Invalid Packets

封鎖 IP 位址的規則

接下來,我們將介紹一些可用於封鎖來自特定 IP 位址之連線的指令。為了簡化說明,我們將在指令中使用 ​15.15.15.51 IP 位址作為範例。您可以用您特定的 IP 位址替換此值。

在 ​-s 15.15.15.51 中,​-s​ 代表來源(source)。因此,該指令指定了來源 IP 位址「15.15.15.51」。同樣地,您可以在任何防火牆規則中指定來源 IP 位址。這包括允許和拒絕規則。

如果您想拒絕連線,您將在指令中用 REJECT 代替 DROP,如下所示:

因此,每當該特定 IP 位址發送連線請求時,您的伺服器都會給出「連線被拒(connection refused)」錯誤。

  • 封鎖到特定介面的連線

您可以封鎖從特定 IP 位址到特定網路介面的所有連線請求。在我們的範例中,IP 位址是 15.15.15.51​,而網路介面是 ​eth0​。使用此指令來封鎖連線:

極佳的一點是,您可以在任何規則中指定網路介面。這意味著任何規則都可以套用並僅限於特定的網路。

服務規則:SSH

SSH ​在您使用雲端伺服器時會變得非常重要。在這種情況下,您需要允許連接埠 22 上的傳入 SSH 連線。啟用這些連線可讓您連接並管理您的伺服器。在這裡,我們將討論一些與 SSH 相關的常見規則。

  • 允許所有傳入的 SSH

以下指令可啟用所有傳入的 SSH 連線:

在上述設定中,只有在 ​OUTPUT​ 策略未設定為 ​ACCEPT​。它允許已建立之 SSH 連線的傳出流量。

  • 允許來自特定子網路的傳入 SSH

前一個指令允許所有傳入連線。您可以使用以下指令,僅允許來自特定 IP 位址或子網路的傳入連線。假設您只想允許來自 ​15.15.15.0/24​ 子網路:

與之前相同,只有在 ​OUTPUT​ 策略未設定為 ​ACCEPT​。它允許已建立之 SSH 連線的傳出流量。

  • 允許傳出 SSH

如果防火牆的 ​OUTPUT​ 策略未設定為 ​ACCEPT​ 且您想要啟用 SSH 連線,請使用這些指令。這將允許您的伺服器向其他伺服器發起 SSH 連線:

若要進一步在您的雲端伺服器上利用 SSH,請參閱我們關於 ​ 如何在 Ubuntu 中使用 SSH 連線至遠端伺服器 ​以及 如何設定您的 Linux 伺服器以使用金鑰型 SSH 驗證​.

  • 允許來自特定子網路的傳入 Rsync

Rsync​ 是一項可用於在系統之間傳輸檔案的功能。它在連接埠 873 上執行。因此,如果您想允許來自特定 IP 位址或子網路在連接埠 873 上的傳入 Rsync 連線,請使用以下指令:

如您所見,我們指定了來源 IP 位址以及目的地連接埠。只有在防火牆的 ​OUTPUT​ 策略未設定為 ​ACCEPT​。它允許已建立之 Rsync 連線的傳出流量。此外,您可以參閱我們的 ​關於如何利用 Rsync 同步 VPS 上的本機與遠端目錄的教學課程​.

服務規則:網頁伺服器

HTTP 連線通常在連接埠 80 上接收。同樣地,HTTPS 通常使用連接埠 443。網頁伺服器如 ​Apache​ 與 ​Nginx​ 會監聽這些連接埠以接收連線請求。有時,預設設定可能會使您的伺服器拒絕或捨棄這些傳入請求。這就是為什麼您需要設定新規則以允許流量通過的原因。

  • 允許所有傳入的 HTTP 連線

您可以使用以下指令允許連接埠 80 上的所有傳入 HTTP 連線:

只有在防火牆的 ​OUTPUT​ 策略未設定為 ACCEPT​。它允許已建立之 HTTP 連線的傳出流量。

  • 允許所有傳入的 HTTPS 連線

使用以下命令以允許連接埠 443 上的所有傳入 HTTPS 連線請求:

只有在 iptables 防火牆的 ​OUTPUT​ 策略未設定為 ACCEPT​ 時,您才需要使用第二條命令。它允許已建立的 HTTP 連線的傳出流量。

  • 允許來自 HTTP 和 HTTPS 的所有傳入連線

如果您想同時允許來自 HTTP 和 HTTPS 連接埠的流量,可以使用 multiport 模組。在這種情況下,請使用以下命令:

只有在防火牆的 ​OUTPUT​ 策略未設定為 ACCEPT​。它允許已建立的 HTTP 和 HTTPS 連線的傳出流量。

服務規則:MySQL

有時用戶端可能會使用遠端伺服器來存取您的 ​MySQL​ 資料庫伺服器。在這種情況下,您需要手動允許來自相關連接埠的傳入流量。MySQL 會接聽來自連接埠 3306 的連線請求。

  • 允許來自子網路的傳入 MySQL 連線

如果您想允許來自特定子網路的 MySQL 連線,則必須指定來源。在我們的範例中,我們將使用以下命令允許來自 15.15.15.0/24​ 子網路的傳入流量:

只有在防火牆的 ​OUTPUT​ 策略未設定為 ACCEPT​ 時,您才需要使用第二條命令。它允許已建立的 MySQL 連線的傳出流量。

  • 啟用至介面的 MySQL 連線

如果您還想指定哪個網路介面應該接收 MySQL 連線,可以使用以下命令:

在這種情況下,我們允許連線到名為 eth1​.

只有在防火牆的 ​OUTPUT​ 策略未設定為 ACCEPT​ 時,您才需要使用第二條命令。它允許已建立的 MySQL 連線的傳出流量。

您可以參考我們的 ​在伺服器上輕鬆設定 MySQL 的教學課程​.

服務規則:PostgreSQL

您的用戶端可能會使用遠端伺服器來存取您的 ​PostgreSQL​ 資料庫伺服器。在這種情況下,您需要允許這些傳入連線。這些連線將通過連接埠 5432。

  • 允許來自子網路的傳入 PostgreSQL 連線

您可以使用以下命令來允許來自特定子網路或 IP 位址的傳入 PostgreSQL 連線。如您所見,我們指定了來源,即 ​15.15.15.0/24​ 子網路。

只有在防火牆的 ​OUTPUT​ 策略未設定為 ACCEPT​。它允許已建立的 PostgreSQL 連線的傳出流量。

  • 啟用特定介面的 PostgreSQL 連線

如果您只想允許特定網路介面的 PostgreSQL 連線,請使用以下命令:

在這種情況下,我們允許連線到名為 eth1​ 的私有網路介面。只有在防火牆 OUTPUT 策略未設置為 ACCEPT 時,您才需要使用第二個命令。它允許已建立的 PostgreSQL 連線的傳出流量。

請遵循此 教學課程在您的 Ubuntu 伺服器上安裝 PostgreSQL​.

服務規則:郵件

您可能還需要根據您使用的任何郵件伺服器來設定防火牆。例如,SendmailPostfix 可以在許多不同的連接埠上接收連線。這取決於您用於郵件傳遞的協定。要封鎖和允許某些郵件連線,您需要知道您使用的是什麼協定。

  • 允許傳入的 SMTP 連線

SMTP 連線通常使用連接埠 25 傳入。雖然 SMTP 也常用連接埠 587 傳送外寄郵件。要允許您的伺服器回應這些連線,請使用以下命令:

只有在防火牆 OUTPUT​ 策略未設置為 ACCEPT 時,您才需要使用第二個命令。它允許已建立的 SMTP 連線的傳出流量。

  • 允許所有傳入的 IMAP

要允許您的伺服器回應連接埠 143 上的所有傳入 IMAP 連線,只需輸入並執行以下命令:

只有在防火牆 ​OUTPUT 策略未設置為 ACCEPT​ 時,您才需要使用第二個命令。它允許已建立的 IMAP 連線的傳出流量。

  • 允許所有傳入的 IMAPS

使用以下命令讓您的伺服器回應連接埠 993 上的 IMAPS 連線:

只有在防火牆 OUTPUT 策略未設置為 ACCEPT 時,您才需要使用第二個命令。它允許已建立的 IMAPS 連線的傳出流量。

  • 允許所有傳入的 POP3

這些連線將在連接埠 993 上傳入。如果您希望您的伺服器回應 IMAPS 連線請求,請使用以下命令:

只有在防火牆 OUTPUT 策略未設置為 ACCEPT 時,您才需要使用第二個命令。它允許已建立的 POP3 連線的傳出流量。

  • 允許所有傳入的 POP3S

使用以下命令允許您的伺服器與在連接埠 995 上傳入的 POP3S 請求建立連線:

只有在防火牆的 ​OUTPUT 策略未設置為 ACCEPT​。它允許已建立的 POP3S 連線的傳出流量。

  • 如何阻止傳出 SMTP 郵件

與其允許傳入連線並啟用伺服器回應,您可能更想完全阻止傳出郵件。您可以使用此命令阻止連接埠 25 上的所有傳出 SMTP 郵件:

因此,所有在連接埠 25 上的傳出流量都將被 iptables 防火牆拒絕。如果您想拒絕任何其他服務,可以使用相同的命令結構。您只需要將連接埠 25 替換為相關的連接埠號碼即可。

結論

本指南涵蓋了基本的 iptables 防火牆命令。它為您提供了有效配置 iptables 防火牆所需的基本工具。請記住,沒有萬能的解決方案。這些命令非常靈活。這意味著您可以以最適合您和您需求的方式來使用它們。

祝您使用愉快!

author

Manpreet Singh

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的創意設計師,專注於透過傳統與創新行銷渠道建立一致的企業形象。他擅長將藝術願景與策略行銷相融合,創造具有影響力的品牌敘事。

留言

目前尚無留言。成為第一個留言的人吧。