Iptables是為Linux作業系統構建的一個非常靈活的防火牆實用程式。無論您是Linux新手還是系統管理員,iptables可能在某種程度上對您非常有用。請繼續閱讀,我們將向您展示如何配置最通用的Linux防火牆。
埃齊曼攝。
iptables是一個命令列防火牆實用程式,它使用策略鏈來允許或阻止流量。當連線試圖在您的系統上建立自身時,iptables會在其列表中查詢與之匹配的規則。如果找不到,它將使用預設操作。
iptables幾乎總是預裝在任何Linux發行版上。要更新/安裝它,只需檢索iptables包:
sudo apt-get install iptables
除了Firestarter這樣的iptables之外,還有一些GUI替代品,但是一旦您關閉了一些命令,iptables就不是那麼難了。在配置iptables規則時要特別小心,特別是當您使用SSH連線到伺服器時,因為一個錯誤的命令可能會將您永久鎖定,直到在物理機器上手動修復為止。
iptables使用三個不同的鏈:輸入、轉發和輸出。
輸入–此鏈用於控制傳入連線的行為。例如,如果使用者嘗試SSH到您的PC/伺服器,iptables將嘗試將IP地址和埠與輸入鏈中的規則相匹配。
轉發–此鏈用於實際上未在本地傳遞的傳入連線。想想路由器——資料總是被髮送到路由器,但很少真正傳送到路由器本身;資料只是被轉發到它的目標。除非您在系統上執行某種路由、本地或其他需要轉發的操作,否則您甚至不會使用此鏈。
有一種可靠的方法可以檢查您的系統是否使用/需要前向鏈。
iptables -L -v
上面的螢幕截圖顯示的是一個已經運行了幾個星期的伺服器,對傳入或傳出連線沒有限制。如您所見,輸入鏈處理了11GB的資料包,輸出鏈處理了17GB的資料包。另一方面,前向鏈不需要處理單個數據包。這是因為伺服器沒有進行任何型別的轉發或用作直通裝置。
輸出–此鏈用於傳出連線。例如,如果您嘗試pingtl80.cn網站,iptables將檢查其輸出鏈,以檢視關於ping和tl80.cn網站在做出允許或拒絕連線嘗試的決定之前。
警告
即使ping外部主機似乎只需要遍歷輸出鏈,但請記住,要返回資料,也將使用輸入鏈。在使用iptables鎖定系統時,請記住許多協議都需要雙向通訊,因此輸入和輸出鏈都需要正確配置。SSH是一種常見的協議,人們在兩個鏈上都忘記了允許它。
在進入並配置特定規則之前,您需要確定三個鏈的預設行為是什麼。換句話說,如果連線與任何現有規則都不匹配,您希望iptables做什麼?
要檢視策略鏈當前配置為如何處理不匹配的流量,請執行iptables-L命令。
如您所見,我們還使用grep命令來提供更清晰的輸出。在那張截圖中,我們的連鎖店目前可以接受流量。
很多時候,您都希望系統預設接受連線。除非您以前更改過策略鏈規則,否則應該已經配置此設定。無論哪種方式,下面都是預設接受連線的命令:
iptables --policy INPUT ACCEPT iptables --policy OUTPUT ACCEPT iptables --policy FORWARD ACCEPT
透過預設接受規則,您可以使用iptables拒絕特定的IP地址或埠號,同時繼續接受所有其他連線。我們馬上就去處理那些命令。
如果希望拒絕所有連線並手動指定允許連線的連線,則應將鏈的預設策略更改為drop。這樣做可能只對包含敏感資訊並且只有相同IP地址的伺服器才有用。
iptables --policy INPUT DROP iptables --policy OUTPUT DROP iptables --policy FORWARD DROP
配置了預設的鏈策略後,您可以開始向iptables新增規則,以便它知道在遇到來自或到特定IP地址或埠的連線時該怎麼做。在本指南中,我們將介紹三種最基本、最常用的“回答”。
接受–允許連線。
斷開-斷開連線,假裝從未發生過。如果您不希望原始碼意識到您的系統存在,這是最好的。
拒絕–不允許連線,但發回錯誤。如果您不希望某個特定的源連線到您的系統,但是您希望他們知道您的防火牆阻止了他們,那麼這是最好的。
顯示這三個規則之間差異的最好方法是顯示當一臺PC嘗試ping一臺為每種設定配置了iptables的Linux機器時的樣子。
允許連線:
正在斷開連線:
拒絕連線:
配置策略鏈後,現在可以配置iptables以允許或阻止特定的地址、地址範圍和埠。在這些示例中,我們將連線設定為DROP,但您可以根據需要和策略鏈的配置將連線切換為ACCEPT或REJECT。
注意:在這些示例中,我們將使用iptables-A將規則附加到現有鏈中。iptables從列表的頂部開始,遍歷每個規則,直到找到一個匹配的規則。如果需要在另一條規則的上方**規則,可以使用iptables-I[chain][number]來指定它應該在列表中的編號。
來自單個IP地址的連線
此示例顯示如何阻止來自IP地址10.10.10.10的所有連線。
iptables -A INPUT -s 10.10.10.10 -j DROP
來自一系列IP地址的連線
此示例顯示如何阻止10.10.10.0/24網路範圍內的所有IP地址。您可以使用網路掩碼或標準斜槓符號來指定IP地址的範圍。
iptables -A INPUT -s 10.10.10.0/24 -j DROP
或
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
連線到特定埠
此示例演示如何阻止10.10.10.10中的SSH連線。
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
您可以用任何協議或埠號替換“ssh”。程式碼的-p tcp部分告訴iptables協議使用哪種連線。如果要阻止使用UDP而不是TCP的協議,則需要使用-p UDP。
此示例演示如何阻止來自任何IP地址的SSH連線。
iptables -A INPUT -p tcp --dport ssh -j DROP
正如我們前面提到的,很多協議都需要雙向通訊。例如,如果您想允許SSH連線到您的系統,那麼輸入和輸出鏈需要新增一個規則。但是,如果您只希望允許SSH進入您的系統呢?向輸出鏈新增規則不也允許傳出SSH嘗試嗎?
這就是連線狀態的來源,它提供了允許雙向通訊但只允許建立單向連線的能力。看看這個示例,其中允許10.10.10.10的SSH連線,但不允許10.10.10.10的SSH連線。但是,只要會話已經建立,系統就可以透過SSH發回資訊,這使得這兩個主機之間的SSH通訊成為可能。
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
您對iptables規則所做的更改將在下次iptables服務重新啟動時取消,除非您執行儲存更改的命令。此命令可能因您的發行版而異:
烏班圖:
sudo /**in/iptables-save
紅帽/CentOS:
/**in/service iptables save
或者
/etc/init.d/iptables save
列出當前配置的iptables規則:
iptables -L
新增-v選項將為您提供資料包和位元組資訊,新增-n將以數字形式列出所有內容。換句話說,主機名、協議和網路都列為數字。
要清除當前配置的所有規則,可以發出flush命令。
iptables -F
...僅僅因為Linux有安全漏洞並不意味著你需要防病毒軟體或防火牆軟體。儘管您可能會決定安裝一個,但這並沒有什麼錯,這裡有一些原因說明它可能沒有您想象的那麼有用。 ...
... 預設情況下,Linux附帶了一個名為iptables的防火牆工具。然而,由於它很難使用,人們大多使用它的前端,Gufw防火牆是一個流行的選擇。它實際上是簡單防火牆的前端,防火牆本身是基於iptables的。 ...
... 防火牆一般不適合初學者。它們有許多複雜的設定、選項和功能,需要進行微調。否則,你的防禦系統可能會有一個大洞。 ...
如果您曾經執行過任何網路監視,您應該熟悉Nmap。它是一個強大的埠掃描器,允許管理員定位他們網路中的弱點。 ...
...、栓接和Tor的複選框來啟用額外的連線控制。除非您熟悉iptables,否則不建議更改iptables鏈設定。 ...
...n將為您管理監視、禁止和取消禁止。 fail2ban與Linux防火牆iptables整合。它透過在防火牆中新增規則來執行對可疑IP地址的禁令。為了保持這個解釋的清晰,我們使用iptables和一個空的規則集。 當然,如果您擔心安全性,那麼您可...
...一個簡單的查詢就會發現他們可以嘗試利用的漏洞。 “iptables模組已載入,但沒有啟用的規則”:Linux防火牆已啟動並執行,但沒有為其設定規則。 清除警告 每個警告都有一個指向網頁的連結,該網頁描述了問題以及您可以採...