歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 使用netfilter/iptables構建防火牆

使用netfilter/iptables構建防火牆

日期:2017/2/27 14:18:42   编辑:更多Linux
  對於Internet上的系統,不管是什麼情況都要明確一點:網絡是不安全的。因此,雖然創建一個防火牆並不能保證系統100%安全,但卻是絕對必要的。Linux提供了一個非常優秀的防火牆工具—netfilter/iptables。它完全免費、功能強大、使用靈活、可以對流入和流出的信息進行細化控制,且可以在一台低配置機器上很好地運行。本文將簡單介紹使用netfilter/iptables實現防火牆架設和Internet連接共享等應用。 netfilter/iptabels應用程序,被認為是Linux中實現包過濾功能的第四代應用程序。netfilter/iptables包含在2.4以後的內核中,它可以實現防火牆、NAT(網絡地址翻譯)和數據包的分割等功能。netfilter工作在內核內部,而iptables則是讓用戶定義規則集的表結構。netfilter/iptables從ipchains和ipwadfm(IP防火牆管理)演化而來,功能更加強大。下文將netfilter/iptabels統一稱為iptables。 可以用iptables為Unix、Linux和BSD個人工作站創建一個防火牆,也可以為一個子網創建防火牆以保護其它的系統平台。iptales只讀取數據包頭,不會給信息流增加負擔,也無需進行驗證。要想獲得更好的安全性,可以將其和一個代理服務器(比如squid)相結合。 基本概念 典型的防火牆設置有兩個網卡:一個流入,一個流出。iptables讀取流入和流出數據包的報頭,將它們與規則集(Ruleset)相比較,將可接受的數據包從一個網卡轉發至另一個網卡,對被拒絕的數據包,可以丟棄或按照所定義的方式來處理。 通過向防火牆提供有關對來自某個源地址、到某個目的地或具有特定協議類型的信息包要做些什麼的指令,規則控制信息包的過濾。通過使用iptables系統提供的特殊命令iptables建立這些規則,並將其添加到內核空間特定信息包過濾表內的鏈中。關於添加、去除、編輯規則的命令,一般語法如下: iptables [-t table] command [match] [target] 1.表(table) [-t table]選項允許使用標准表之外的任何表。表是包含僅處理特定類型信息包的規則和鏈的信息包過濾表。有三個可用的表選項:filter、nat和mangle。該選項不是必需的,如果未指定,則filter作為缺省表。各表實現的功能如表1所示。 表1 三種表實現的功能 http://tech.ccidnet.com/pub/attachment/2004/3/278843.jpg 2.命令(command) command部分是iptables命令最重要的部分。它告訴iptables命令要做什麼,例如插入規則、將規則添加到鏈的末尾或刪除規則。表2是最常用的一些命令及例子。 表2 命令的功能和樣例 http://tech.ccidnet.com/pub/attachment/2004/3/278844.jpg 3.匹配(match) iptables命令的可選match部分指定信息包與規則匹配所應具有的特征(如源地址、目的地址、協議等)。匹配分為通用匹配和特定於協議的匹配兩大類。這裡將介紹可用於采用任何協議的信息包的通用匹配。表3是一些重要且常用的通用匹配及示例說明。 表3 通用匹配及示例說明 http://tech.ccidnet.com/pub/attachment/2004/3/278845.jpg 4.目標(target) 目標是由規則指定的操作,對與那些規則匹配的信息包執行這些操作。除了允許用戶定義的目標之外,還有許多可用的目標選項。表4是常用的一些目標及示例說明。 除表4外,還有許多用於建立高級規則的其它目標,如LOG、REDIRECT、MARK、MIRROR和MASQUERADE等。 表4 目標及示例說明 http://tech.ccidnet.com/pub/attachment/2004/3/278846.jpg應用iptables 與ipchains和ipfwadm不同的是,iptables可以配置有狀態的防火牆。iptables可以檢測到源地址和目的地址、源端口和目的端口及流入數據包的順序,即iptables記住了在現有連接中,哪些數據包已經被允許接收。這使得暫時性的端口只有在需要時才會被打開,並且會拒絕所有永久性占用端口的請求,大大地加強了安全性。同時,那些被更改了報頭的數據包,即使包含有一個被允許的目的地址和端口,也會被檢測到並被丟棄。此外,有狀態的防火牆能夠指定並記住為發送或接收信息包所建立連接的狀態。防火牆可以從信息包的連接跟蹤狀態獲得該信息。在決定新的信息包過濾時,防火牆所使用的這些狀態信息可以增加其效率和速度。 1.啟動和停止iptables


下面將正式使用iptables來創建防火牆。啟動和停止iptables的方法取決於所使用的Linux發行版,可以先查看所使用Linux版本的文檔。 一般情況下,iptables已經包含在Linux發行版中,運行iptables --version來查看系統是否安裝了iptables。在Red Hat 9.0中,安裝的版本是iptables v1.2.7a。如果系統沒有安裝iptables,則可以從http://www.netfilter.org下載。 2.查看規則集 上面僅對iptables的用法做了一個簡單介紹,使用中可以運行man iptables來查看所有命令和選項的完整介紹,或者運行iptables -help來查看一個快速幫助。要查看系統中現有的iptables規劃集,可以運行以下命令: iptables --list 下面是沒有定義規劃時iptables的樣子: Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 如上例所示,每一個數據包都要通過三個內建的鏈(INPUT、OUTPUT和FORWARD)中的一個。 filter是最常用的表,在filter表中最常用的三個目標是ACCEPT、DROP和REJECT。DROP會丟棄數據包,不再對其進行任何處理。REJECT會把出錯信息傳送至發送數據包的主機。 圖1 Red Hat 9.0中安全設置的GUI工具 http://tech.ccidnet.com/pub/attachment/2004/3/278847.gif 在Red Hat 9.0中,提供一個GUI程序來讓用戶對系統的安裝級別進行簡單的配置。該工具的啟動方法是:主選單→系統設置→安全工具(如圖1所示)。在此將安全級別設為“高級”,並選擇使用默認的防火牆規則。點擊確定後,再用iptables -list顯示,發現iptables與沒有定義規則前已經有很大不同,如下所示: [root@workstation root]# iptables --list Chain INPUT (policy ACCEPT) target prot opt source destination RH-Lokkit-0-50-INPUT all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination RH-Lokkit-0-50-INPUT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination ...... 現實中一般不使用這個GUI工具,因為它的功能有限,也不夠透明。相比較而言,SuSE 9.0中相應的配置工具要好得多,它可以在GUI下對防火牆進行更加細化的配置(比如增加了IP轉發和偽裝等功能的配置)。盡管這樣,一般還是自己來增加和刪除規則。 圖2 SuSE 9.0中YaST配置工具中的防火牆設置 http://tech.ccidnet.com/pub/attachment/2004/3/278848.gif .增加規則 本例中的規則將會阻止來自某一特定IP范圍內的數據包,因為該IP地址范圍被管理員懷疑有大量惡意攻擊者在活動: # iptables -t filter -A INPUT -s 123.456.789.0/24 -j DROP 也可以很輕易地阻止所有流向攻擊者IP地址的數據包,該命令稍有不同: # iptables -t filter -A OUTPUT -d 123.456.789.0/24 -j DROP 注意這裡的A選項,如前所述,使用它說明是給現有的鏈添加規則。 4.刪除規則 網絡上的惡意攻擊者總是在變化的,因此需要不斷改變IP。假設一個網上攻擊者轉移到新的IP地址,而其老的IP地址被分配給一些清白的用戶,那麼這時這些用戶的數據包將無法通過你的網絡。這種情況下,可以使用帶-D選項的命令來刪除現有的規則: # iptables -t filter -D OUTPUT -d 123.456.789.0/24 -j DROP 5.缺省的策略 創建一個具有很好靈活性、可以抵御各種意外事件的規則需要大量的時間。對於那些沒有時間這樣做的人,最基本的原則是“先拒絕所有的數據包,然後再允許需要的”。下面來為每一個鏈設置缺省的規則: # iptables -P INPUT DROP # iptables -P FORWARD DROP # iptables -P OUTPUT ACCEPT

這裡選項-P用於設置鏈的策略,只有三個內建的鏈才有策略。這些策略可以讓信息毫無限制地流出,但不允許信息流入。很多時候需要接收外部信息,則可使用以下命令: # iptables -t filter -A INPUT -s 123.456.789.0/24 -j ACCEPT 6.SYN的使用 不能關閉所有端口,也不能只指定某些端口處於打開狀態,那麼怎樣才能設置一個有效的規則,既可以允許普通用戶正常通過,又可以阻止惡意攻擊者訪問網絡呢? 剛開始使用iptables的人可以充分利用syn標識來阻止那些未經授權的訪問。iptables只檢測數據包的報頭,事實上,除iptables以外,很多其它有用的數據包分析都是基於報頭的。比如,在進行Web沖浪時,一個請求從你的PC發送



# iptables -t filter -A INPUT -s 123.456.789.0/24 -j ACCEPT 6.SYN的使用 不能關閉所有端口,也不能只指定某些端口處於打開狀態,那麼怎樣才能設置一個有效的規則,既可以允許普通用戶正常通過,又可以阻止惡意攻擊者訪問網絡呢? 剛開始使用iptables的人可以充分利用syn標識來阻止那些未經授權的訪問。iptables只檢測數據包的報頭,事實上,除iptables以外,很多其它有用的數據包分析都是基於報頭的。比如,在進行Web沖浪時,一個請求從你的PC發送



Copyright © Linux教程網 All Rights Reserved