iptables防火牆

企業通過架設各種應用程序提供各種網絡訪服務。有web網站,電子郵件系統,ftp服務器,數據庫系統

        linux中的防火牆---netfilter和iptables

      linux防火牆基礎

                主要工作在網絡層,針對TCP/IP數據包實現過濾和限制,屬於典型的包過濾防火牆,linux系統的防火牆基於內核編碼實現,其具有穩定的性能和高效率。

            netilter:指的是linux內核中實現包過濾防火牆的內部結構,不以程序或文件的形式存在,屬於“內核態,又稱爲內核空間”的防火牆功能體系

            iptables:指的是用來管理linux防火牆的命令程序,通常位於/sbin/iptables目錄下,屬於“用戶態,又稱爲用戶空間”的防火牆功能體系

    iptables的表,鏈結構

            iptables的作用是爲包過濾機制實現提供規則,通過各種不同的規則,告訴netfilter對來自某些源,前往某些目的或具有某些協議的數據包應該如何處理,爲了更加方便地組織和管理防火牆規則,iptables採用了“表”和“鏈”的分層結構

            每個規則“表”相當於內核空間的一個容器,根據規則集的不同用途劃分爲默認的四個表;每個表容器內包括不同的規則鏈。根據處理數據包的不同時機劃分爲五種鏈,而決定師傅過濾或處理數據包的各種規則,按先後順序存放在各規則鏈中。

        規則表

            iptables管理這四個不同的規則表,其功能分別由獨立的內核模塊實現。

                    filter表:filter表用來對數據包進行過濾,根據具體的規則要求決定如何處理一個數據包,filter表對應的內核模塊爲iptable_filter,表內包含三個鏈,即INPUT,FORWARD,OUTPUT. 

                    nat表網絡地址轉換表主要用來修改數據包的ip地址,端口號信息,nat表對應的內核模塊爲iptable_nat,表內包含三個鏈,即PREROUTING,POSTROUTING,OUTPUT。

                    mangle表:mangle表用來修改數據包的TOS服務類型,TTL生存週期,或者爲數據包設置Mark標記,實現流量×××,策略路由等應用。mangle表對應的內核模塊爲iptable_mangle,表內包含五個鏈,即PREROUTING,POSAROUATING,INPUT,OUTPUT,FORWARD。

                    raw表:是1.2.9版本以後新增的表,主要用來決定是否對數據包進行狀態跟蹤,raw表對應的內核模塊爲iptable_raw,表內包含兩個鏈,即OUTPUT,PREROUTING。

        規則鏈

            iptables默認劃分爲五中不同的規則鏈,五種鏈的名稱,各自的介入時機

                INPUT鏈:當收到訪問防火牆本機地址的數據包入站時

                OUTPUT鏈:當防火牆本機向外發送數據包時

                FORWARD鏈:當接受到需要通過防火牆中轉發送給其他地址的數據包時

                PREROUTING鏈:對數據包做路由選擇之前

                POSTROUTING鏈:對數據包做路由選擇之後

                INPUT,OUTPUT鏈主要用於主機型防火牆中,即主要針對服務器本機進行保護的防火牆,而FORWARD,PREROUTING,POSTROUTING鏈多用在網絡型防火牆中

        數據包過濾的匹配流程

            規則表之間的順序

                當數據包抵達防火牆是,將依次應用raw表,mangle表,nat表和filter表對應鏈內的規則,應用順序raw>mangle>nat>filter

            規則鏈之間的順序

                根據規則鏈的劃分原則,不同鏈的處理時機是比較固定,因此規則鏈之間的順序取決於數據包的流向

                    入站數據流向:外界的數據包到達防火後,首先被PREROUTING鏈處理,然後進行路由選擇;如果數據包的目標地址是防火牆本機,那麼內核將其傳遞給INPUT鏈進行處理,通過以後在交給系統上層的應用程序進行響應。

                    轉發數據流向:來自外界數據包到達防火牆後,首先被PREROUTING鏈處理,然後再進行路由選擇;如果數據包的目標地址是其他外部地址,則內核將其傳遞給FORWARD鏈進行出出力,最後交給POSTROUTING鏈進行處理

                    出站數據流向:防火牆本機向外部地址發送的數據包,首先被OUTPUT鏈處理,然後進行路由選擇,再交給POSTROUTING鏈進行處理

              規則鏈內部各種防火牆規則之間的順序

                    當數據包經過每條規則鏈是,依次按第一條規則,第二條規則。。。的順序進行匹配和處理鏈內的過濾遵循“匹配即停止”的原則,一旦找到一條相匹配的規則,則不再檢查本鏈內後續的其他規則。

編寫防火牆規則

        基本語法,數據包控制類型

                使用iptable命令管理,編寫防火牆規則是,基本格式

                    iptables [-t 表名] 管理選項 [鏈名] [匹配條件] [-j 控制類型]

                其中表名,鏈名用來指定iptables命令所操作的表和鏈,未指定表名時將默認使用filter表;管理選項表示iptables規則的操作方式,如插入,增加,刪除,查看;匹配條件用來指定要處理的數據包的特徵。不符合指定條件的數據包將不會處理;控制類型指的是數據包的處理方式,如允許,拒絕,丟棄

            ACCEPT:允許數據包通過

            DROP:直接丟棄數據包,不給出任何迴應信息

            REJECT:拒絕數據包通過,必要時會給數據發送端一個響應信息

            LOG:在/var/log/messages文件中記錄日誌信息,然後將數據包傳遞給下一條規則,防火牆規則的“匹配即停止”對於LOG操作來說是一個特例。

                在filter表(-t filter)的INPUT鏈中插入一條規則,拒絕(-j REJECT)發給本機的使用ICMP協議的數據包(-p icmp)

        添加,查看,刪除規則等基本操作

                -A    指定鏈末尾添加一條新規則

                -D    刪除指定鏈的某一天規則,可指定序號或內容

                -I    插入一條新規則,沒指定序號時,默認作爲第一條規則

                -R    修改,替換指定鏈中所有規則,未指定鏈名,則列出鏈名

                -L    列出指定鏈中的所有規則,若未指定鏈名,則列出表中所有鏈

                -F    清空指定鏈中的所有規則,若未指定鏈名,則清空表中的所有鏈

                -p    設置指定鏈的默認策略

                -n    使用數字形式顯示輸出結果,如顯示ip地址而不是主機名

                -v    查看規則列表時顯示詳細的信息

                -h    查看命令幫助信息

                --line-numbers    查看規則列表是,同時顯示規則在鏈中的順序號

            規則的匹配條件

                    編寫防火牆規則時,匹配條件的設置起着決定性的作用。匹配條件的設置包括三個大類:通用匹配,隱含匹配,顯式匹配。

                通用匹配也稱爲常規匹配,這種匹配方式可以獨立使用,不依賴於其他條件或擴展模塊。常見的通用匹配包括協議匹配,地址匹配,網絡藉口匹配

                        協議匹配:-p 協議名 的形式指定,用來檢查數據包所使用的網絡協議。如tcp,udp,icmp和all。可用的協議類型存放於linux系統的/etc/procotols文件中。

                        地址匹配:-s 源地址或 -d 目標地址形指定,用來檢查數據包的源地址或目標地址。ip地址,網段地址等都是可以接受的,不建議使用主機名,域名地址

                        網絡藉口匹配:-i 接口名和-o 接口名的形式,檢查數據包從防火牆的哪一個藉口進入和發出。

                隱含匹配要求可以指定的協議匹配作爲前提條件,相當於子條件。常見的隱含匹配包括端口匹配,tcp標記匹配,ICMP類型匹配

                        端口匹配:使用--sport 源端口或--dport 目標端口的形式,針對的協議爲tcp或udp,用來檢查數據包的源端口或目標端口,單個端口好或者以冒號分隔的端口範圍都可以,但 不連續的多個端口不能採用這種方式。

                        ICMP類型匹配:使用--ICMP-type  ICMP類型的形式,針對的協議爲ICMP,用來檢查ICMP數據包的類型,ICMP類型使用字符串或數字代碼表示。關於可用的ICMP協議類型,可以執行iptables -p icmp -h命令

                        顯式匹配:要求有額外的內核模塊提供支持,必須手動以-m 模塊名稱形式調用相應的模塊,然後方可設置匹配條件,添加了帶顯式匹配的規則以後,可以執行lsmod | grep xt_命令查看相關的內核擴展模塊(xt_multiport,xt_iprange,xt_mac,xt_state)常見的顯式匹配包括多端口匹配,ip範圍匹配,MAC地址匹配,狀態匹配

                         多端口匹配使用-m multiport --dports 端口列表,-m multiprot --sports端口列表的形式,用來檢查數據包的源端口,目標端口,多個端口之間以逗號進行分隔

                         ip範圍匹配

                            使用-m iprange --src-range ip範圍,-m iprange --dst-range ip範圍的形式,用來檢查數據包的源地址,目標地址,其中ip範圍採用起始地址-結束地址的形式表示。

                         MAC地址匹配

                            使用-m mac --mac-source MAC地址的形式,用來檢查數據包的源MAC地址,由於MAC本身的侷限性,此類匹配條件一般指適合用於內部網絡

                         狀態匹配

                            使用-m state --state 連接狀態的形式,基於iptables的狀態跟蹤機制用來檢查數據包的連接狀態,常見的連接狀態包括FEW(與任何連接無關的),ESTABLISHED(響應請求或者已建立連接的),RELATED(與已有連接有相關性)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章