介紹
Iptables是Linux發行版的軟件防火牆。這份速查表式指南提供了一個快速參考,介紹了iptables命令,這些命令將創建常見日常情境中有用的防火牆規則。這包括通過端口、網絡接口和來源IP地址允許和阻止各種服務的iptables示例。
如何使用本指南
- 這裡描述的大多數規則假設您的iptables設置為通過默認輸入策略拒絕入站流量,並且您希望有選擇性地允許入站流量
- 使用適用於您想要實現的目標的後續部分。大多數部分不依賴於其他任何部分,因此您可以獨立使用以下示例
- 使用本頁右側的內容菜單(在寬頁面寬度時)或您瀏覽器的查找功能來查找所需的部分
- 複製並粘貼所提供的命令行示例,將突出顯示的值替換為您自己的值
請注意,您的規則的順序很重要。所有這些iptables命令都使用-A
選項將新規則附加到鏈的末尾。如果您想將其放在鏈的其他位置,可以使用-I
選項,該選項允許您指定新規則的位置(或通過不指定規則號將其放在鏈的開頭)。
注意:在使用防火墙时,请注意不要通过阻止SSH流量(默认情况下为端口22)将自己锁在自己的服务器外面。如果由于防火墙设置而失去了访问权限,则可能需要通过基于Web的控制台连接到服务器以修复您的访问权限。如果您使用的是DigitalOcean,您可以阅读我们的恢复控制台产品文档以获取更多信息。一旦通过控制台连接,您可以更改防火墙规则以允许SSH访问(或允许所有流量)。如果您的保存的防火墙规则允许SSH访问,则另一种方法是重新启动服务器。
请记住,您可以使用sudo iptables -S
和sudo iptables -L
检查当前的iptables规则集。
让我们来看一下iptables命令!
保存规则
Iptables规则是短暂的,这意味着它们需要手动保存才能在重新启动后持续存在。
在Ubuntu上,保存iptables规则的一种方法是使用iptables-persistent
包。像这样使用apt进行安装:
在安装过程中,您将被询问是否要保存当前的防火墙规则。
如果您更新了防火墙规则并希望保存更改,请运行此命令:
其他Linux发行版可能有其他方法使您的iptables更改永久生效。请参阅相关文档以获取更多信息。
列出和删除规则
如果您想学习如何列出和删除iptables规则,请参阅本教程:如何列出和删除Iptables防火墙规则。
通常有用的规则
本节包括各种iptables命令,将创建通常在大多数服务器上有用的规则。
允许回环连接
迴路介面,也被稱為lo
,是電腦用來轉發網路連接到自己的地方。例如,如果您執行ping localhost
或ping 127.0.0.1
,您的伺服器將使用迴路對自己進行 ping 測試。如果您配置應用伺服器以localhost
地址連接到資料庫伺服器,迴路介面也會被使用。因此,您需要確保您的防火牆允許這些連接。
為了接受迴路介面上的所有流量,運行以下命令:
允許已建立和相關的入站連接
由於網路流量通常需要雙向 – 入站和出站 – 才能正常工作,因此通常會創建一個防火牆規則,允許已建立和相關的入站流量,以便伺服器允許由伺服器本身啟動的出站連接的返回流量。此命令將允許:
允許已建立的出站連接
你可能希望允許所有建立的連接的出站流量,這些連接通常是對合法入站連接的回應。這個命令會允許這樣做:
允許內部網絡訪問外部
假設eth0
是你的外部網絡,eth1
是你的內部網絡,這將允許你的內部訪問外部:
丟棄無效封包
一些網絡流量封包被標記為無效。有時候記錄這類封包可能很有用,但通常可以直接丟棄它們。使用這個命令進行:
阻止 IP 地址
為了阻止來自特定 IP 地址的網絡連接,例如 203.0.113.51
,運行此命令:
在這個例子中,-s 203.0.113.51
指定了源 IP 地址為 “203.0.113.51”。源 IP 地址可以在任何防火牆規則中指定,包括允許規則。
如果你想拒絕連接,而不是直接丟棄,這將會回應連接請求並顯示“連接被拒絕”錯誤,請將 “DROP” 替換為 “REJECT”,像這樣:
阻止對網絡接口的連接
要阻止從特定 IP 地址(例如 203.0.113.51
)到特定網絡接口(例如 eth0
)的連接,請使用以下命令:
這與前一個例子相同,只是增加了 -i eth0
。網絡接口可以在任何防火牆規則中指定,這是限制規則到特定網絡的好方法。
服務:SSH
如果你使用的是沒有本地控制台的服務器,你可能會想要允許傳入的 SSH 連接(端口 22),這樣你就可以連接並管理你的服務器。本部分涵蓋了如何使用各種與 SSH 相關的規則來配置你的防火牆。
允許所有SSH連入
要允許所有SSH連入,執行以下命令:
第二個命令允許已建立的SSH連接的傳出流量,只有在OUTPUT
策略未設置為ACCEPT
時才需要。
允許從特定IP地址或子網絡連入SSH
要允許從特定IP地址或子網絡連入SSH,請指定來源。例如,如果要允許整個203.0.113.0/24
子網絡,執行以下命令:
第二個命令允許已建立的SSH連接的傳出流量,只有在OUTPUT
策略未設置為ACCEPT
時才需要。
允許SSH連出
如果您的防火牆OUTPUT
策略未設置為ACCEPT
,且您希望允許外發的SSH連接 – 您的伺服器啟動對另一個伺服器的SSH連接 – 您可以運行以下命令:
允許從特定IP地址或子網絡接收Rsync請求
Rsync在端口873上運行,可用於將文件從一台計算機傳輸到另一台計算機。
要允許從特定IP地址或子網絡接收rsync請求,請指定來源IP地址和目標端口。例如,如果您希望允許整個203.0.113.0/24
子網絡能夠對您的伺服器進行rsync,請運行以下命令:
第二條命令允許已建立的rsync連接的外發流量,僅在OUTPUT
策略未設置為ACCEPT
時才需要。
服務:Web 伺服器
Web伺服器,例如Apache和Nginx,通常在端口80和443上監聽HTTP和HTTPS連接的請求。如果您的默認入站流量策略設置為拒絕或拒絕,則需要創建規則來允許您的伺服器對這些請求做出響應。
允許所有傳入的HTTP
允許所有傳入的HTTP(端口80)連接運行以下命令:
第二條命令允許OUTPUT
策略未設置為ACCEPT
時,已建立的HTTP連接的傳出流量。
允許所有傳入的HTTPS
允許所有傳入的HTTPS(端口443)連接運行以下命令:
第二條命令允許OUTPUT
策略未設置為ACCEPT
時,已建立的HTTP連接的傳出流量。
允許所有傳入的HTTP和HTTPS
如果您想允許HTTP和HTTPS流量,您可以使用multiport模塊創建一個允許這兩個端口的規則。要允許所有傳入的HTTP和HTTPS(端口443)連接,請運行以下命令:
第二個命令允許建立HTTP和HTTPS連接的出站流量,只有當OUTPUT
策略未設置為ACCEPT
時才是必要的。
服務:MySQL
MySQL監聽端口3306上的客戶端連接。如果您的MySQL數據庫服務器正在被遠程服務器上的客戶端使用,您需要確保允許該流量。
允許特定IP地址或子網的MySQL
要允許從特定IP地址或子網的MySQL連接,請指定來源。例如,如果您想允許整個203.0.113.0/24
子網,執行以下命令:
第二個命令,允許建立MySQL連接的出站流量,只有當OUTPUT
策略未設置為ACCEPT
時才是必要的。
允許MySQL連接到特定的網路接口
允許MySQL連接到特定的網絡接口——比如說你有一個私有網絡接口eth1
,請使用以下命令:
第二個命令允許已建立的MySQL連接的外部流量,只有在OUTPUT
策略未設置為ACCEPT
時才需要使用。
服務:PostgreSQL
PostgreSQL在端口5432上聆聽客戶端連接。如果您的PostgreSQL數據庫服務器被遠程服務器上的客戶端使用,請確保允許該流量。
從特定IP地址或子網絡許可PostgreSQL
為了允許從特定IP地址或子網絡接受到來的PostgreSQL連接,請指定來源。例如,如果您想允許整個203.0.113.0/24
子網絡,請運行以下命令:
第二個命令允許已建立的PostgreSQL連接的外部流量,只有在OUTPUT
策略未設置為ACCEPT
時才需要使用。
允許 PostgreSQL 連接到特定的網絡接口
要允許 PostgreSQL 連接到特定的網絡接口——比如說你有一個私有網絡接口 eth1
——請使用以下命令:
第二個命令允許 已建立 的 PostgreSQL 連接的傳出流量,僅在 OUTPUT
策略未設置為 ACCEPT
時才需要。
服務:郵件
郵件服務器,如 Sendmail 和 Postfix,根據用於郵件傳遞的協議監聽各種端口。如果您運行郵件服務器,請確定您正在使用哪些協議,並允許相應類型的流量。我們還將向您展示如何創建一個規則來阻止傳出的 SMTP 郵件。
阻止傳出的 SMTP 郵件
如果您的服務器不應該發送傳出郵件,您可能希望阻止該類流量。要阻止傳出的 SMTP 郵件,使用端口 25 的命令運行此命令:
這將配置 iptables 拒絕所有輸出端口 25 的流量。如果您需要拒絕不同端口號的其他服務,請將該端口號替換為上述的 25
。
允許所有輸入的 SMTP
要允許您的伺服器在端口 25 上回應 SMTP 連接,請運行以下命令:
第二個命令允許已建立的 SMTP 連接的輸出流量,僅在 OUTPUT
策略未設置為 ACCEPT
時才需要。
允許所有輸入的 IMAP
要允許您的伺服器回應 IMAP 連接,端口 143,請運行以下命令:
第二個命令允許已建立的 IMAP 連接的輸出流量,僅在 OUTPUT
策略未設置為 ACCEPT
時才需要。
允許所有輸入的 IMAPS
允許您的服務器回應 IMAPS 連接,端口 993,運行以下命令:
第二個命令允許 建立的 IMAPS 連接的傳出流量,只有在 OUTPUT
策略未設置為 ACCEPT
時才需要。
允許所有傳入的 POP3
要允許您的服務器回應 POP3 連接,端口 110,運行以下命令:
第二個命令允許 建立的 POP3 連接的傳出流量,只有在 OUTPUT
策略未設置為 ACCEPT
時才需要。
允許所有傳入的 POP3S
要允許您的服務器回應 POP3S 連接,端口 995,運行以下命令:
第二個命令允許 建立的 POP3S 連接的傳出流量,只有在 OUTPUT
策略未設置為 ACCEPT
時才需要。
結論
那應該包含了許多在配置iptables防火牆時常用的命令。當然,iptables是一個非常靈活的工具,所以如果這裡沒有涵蓋到您的特定需求,請隨意混合和匹配命令以及不同的選項。
如果您正在尋找幫助來確定您的防火牆應該如何設置,請查看這篇教程:如何選擇有效的防火牆策略來保護您的伺服器。