1. 程式人生 > >iptables防火牆詳解(一)

iptables防火牆詳解(一)

Linux的防火牆體系主要工作在網路層,針對TCP/IP資料包實施過濾和限制,屬於典型的包過濾防火牆(或網路層防火牆)。在Linux中netfilter和iptables都是指Linux防火牆。區別在於:

netfilter:指的是Linux核心中實現包過濾防火牆的內部結構,不以程式或檔案的形式存在,屬於“核心態”的防火牆功能體系。

iptables:指的是用來管理Linux防火牆的命令程式,通常位於/sbin/iptables,屬於“使用者態”的防火牆管理體系。

在下述的內容中我們就以iptables來稱呼Linux防火牆了。

瞭解iptables的表和鏈的結構

iptables的作用在於為包過濾機制的實現提供規則,通過各種不同的規則,告訴netfilter對來自某些源,前往某些目的的或具有某些協議特徵的資料包應該如何處理。為了更加方便地組織和管理防火牆規則,iptables採用了“ 表”和“鏈”的分層結構。iptables的規則表和規則鏈的示意圖如下:

1、規則表

規則表中包含各種規則鏈,iptables管理著四個不同的規則表,其功能分別由獨立的核心模組實現。各表解釋如下:

filter表:主要用來對資料包進行過濾,根據具體的規則要求決定如何處理一個數據包。包含INPUT、FORWAED、OUTPUT等三個規則鏈。

nat表:主要用修改資料包IP地址、埠號等資訊,也稱網路地址轉換。包含PREROUTING、POSTROUTING、OUTPUT等三個規則鏈。

mangle表:主要用來修改資料包的TOS,TTL值,或者為資料包設定Mark標記,以實現流量整形,策略路由等高階應用。包含PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD等五個規則鏈。

raw表:主要用來決定是否對資料包進行狀態跟蹤。包含OUTPUT、PREROUTING兩個規則鏈。

在iptables規則表中,filter表和nat表用的比較多,而其他兩個表用的相對來說比較少。所以後面我們大多是以filter表和nat表中的規則鏈做策略。

2、規則鏈

規則鏈的作用是容納各種防火牆規則,規則兩分為五種,分別在不同的時機處理資料包。

INPUT鏈:處理入站資料包。

OUTOPUT鏈:處理出站資料包。

FORWARD鏈:處理轉發資料包。

POSTROUTING鏈:在進行路由選擇後處理資料包。

PREROUTING鏈:在進行路由選擇前處理資料包。

其中INPUT和OUTPUT鏈主要用在“主機型防火牆”中,而FORWARD、POSTROUTING和PREROUTING鏈主要用在“閘道器防火牆”中。

熟知資料包過濾的匹配流程

注意:熟知資料包過濾的匹配流程是學習iptables的重點,只有知道資料包經過防火牆的過程,我們才知道在那個表的那個鏈裡面設定規則可以對資料包進行如何操作。

1、規則之間的順序

當資料包抵達防火牆時,將依次應用raw,mangle,net和filter表中對應鏈內的規則(如果有的話)。

2、規則鏈之間的順序。

入站資料流向:來自外界的資料包到達防火牆後,首先被PREROUTING鏈處理,然後進行路由選擇,如果資料的目標地址時防火牆本機,那麼核心將其傳遞給INPUT鏈進行處理,通過處理後再交給上層應用程式。

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

出站資料流向:防火牆向外部地址傳送資料包,首相被OUTPUT鏈進行處理,然後進進行路由選擇,再交給POSTROUTING鏈進行處理。

3、規則鏈內部各條防火牆規則之間的順序。

當資料包經過規則鏈時,依次按照第一條規則,第二條規則......的順序進行匹配和處理,鏈內的過濾遵循“匹配即停止”的原則,一旦找到一條匹配的規則,則不在檢查本鏈中後續的規則。

編寫防火牆規則

基本語法、控制型別

使用iptables命令管理,編寫防火牆規則時,基本的命令的格式如下所示:

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

-t:用來指定表名,預設是filter表。

表名,鏈名:用來指定iptables命令所操作的表和鏈。

管理選項:表示iptables規則的做方式,如:插入,增加,刪除,檢視等。

匹配條件:用來指定要處理的處理資料包的特徵,不符合指定條件的將不會處理。

控制型別:指的是資料包的處理方式,如:允許,拒絕,丟棄等。

iptables常見的管理選項如下表所示:

iptables常見的控制型別如下:

ACCEPT:允許資料包通過。

DROP:直接丟棄資料包,不給出任何迴應資訊。

REJECT:拒絕資料包通過,必要時會給資料包傳送端一個響應資訊。

LOG:在/var/log/messages檔案中記錄日誌資訊,然後將資料包傳遞給下一條規則。

iptables規則的匹配條件

1、通用匹配

通用匹配也稱常規匹配,這種匹配方式可以獨立使用,不依賴其他條件或擴充套件模組,常見的通用匹配包括協議匹配,地址匹配,網路介面匹配。

1)協議pipe

編寫iptables規則時使用“-p 協議名”的形式指定,用來檢查資料包所使用的網路協議,如:tcp、udp、icmp等。

列如:編寫iptables拒絕通過icmp的資料包。

[[email protected] /]#iptables -A INPUT -p icmp -j DROP

2)地址匹配

編寫iptables規則時使用“-s源地址”或“-d目標地址”的形式指定,用來檢查資料包的源地址或目標地址。

列如:編寫iptables拒絕轉發192.168.1.0/24到202.106.123.0/24的資料包。

[[email protected] /]#iptables -A FORWARD -s 192.168.1.0/24 -d 202.106.123.0/24 -j DROP

3)網路介面匹配

編寫iptables規則時使用“-i 介面名”和“-o 介面名”的形式,用於檢查資料包從防火牆的哪一個介面進入或發出,分別對應入站網絡卡(--in-interface),出站網絡卡(--out-interface)。

列如:拒絕從防火牆的eth1網絡卡介面ping防火牆主機。

[[email protected] /]#iptables -A INPUT -i eth1 -p icmp -j DROP

2、隱含匹配

這種匹配方式要求以指定的協議匹配作為前提條件,相當於子條件,因此無法獨立使用,其對應的功能由iptables在需要時自動隱含載入核心。常見的隱含匹配包括埠匹配,TCP標記匹配,ICMP型別匹配。

1)埠匹配

編寫iptable規則時使用“--sport 源埠”或“--dport”的形式,針對的協議為TCP或UDP,用來檢查資料包的源埠或目標埠。單個埠或者以“:”分隔的埠範圍都是可以接受的,但不支援多個不連續的埠號。

列如:編寫iptables規則允許FTP資料包通過,則需要允許20,21和用於被動模式的24500-24600的埠範圍。

[[email protected] /]#iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT

[[email protected] /]#iptables -A INPUT -p tcp --dport 24500:24600 -j ACCEPT

2)TCP標記匹配

編寫iptables規則時使用“--tcp-flags 檢查範圍 被設定的標記”的形式,針對的協議為TCP,用來檢查資料包的標記位。其中“檢查範圍”指出需要檢查資料包的那幾個標記位,“被設定的標記”則明確匹配對應值為1的標記,多個標記之間以逗號進行分隔。

列如:若要拒絕外網絡卡介面(eth1)直接訪問防火牆本機的TCP請求,但其他主機發給防火牆的TCP響應等資料包應允許,可執行如下操作。

[[email protected] /]#iptables -A INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK SYN -j DROP

3)ICMP型別匹配

編寫iptables規則時使用“--icmp-type ICMP型別”的形式,針對的協議為ICMP,用來檢查ICMP資料包的型別。ICMP型別使用字串或數字程式碼表示,如“Echo-quest”(程式碼為8),“Echo-Reply”(程式碼為0),“Destination-Unreachable”(程式碼為3),分別對應ICMP協議的請求,回顯,目標不可達。

列如:若要禁止從其他主機ping防火牆本機,但允許防火牆本機ping其他主機,可執行以下操作。

[[email protected] /]#iptables -A INPUT -p icmp --icmp-type 8 -j DROP

[[email protected] /]#iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT

[[email protected] /]#iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT

3、顯示匹配

這種匹配方式要求有額外的核心模組提供支援,必須手動以“-m 模組名稱”的形式呼叫相應的模組。然後方可設定匹配條件。常見的顯示匹配包括多埠匹配,IP範圍匹配,MAC地址匹配,狀態匹配。

1)多埠匹配

編寫iptables規則時使用“-m multiport --dport 埠列表”或“-m multiport --sport 埠列表”的形式,用來檢查資料包的源埠,目標埠,多埠之間以逗號進行分隔。

列如:若允許本機開放25,80,110,143等埠,以便提供電子郵件服務,可執行如下操作。

[[email protected] /]#iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT

2)IP地址範圍匹配

編寫iptables規則時使用“-m iprange --src-range IP範圍”,“-m -iprange --dst-range IP地址範圍”的形式,用來檢查資料包的源地址,目標地址,其中IP範圍採用“起始地址-結束地址”的形式表示。

列如:若要允許轉發源地址IP位於192.168.4.21與192.168.4.28之間的TCP資料包,可執行如下操作。

[[email protected] /]#iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT

3)MAC地址匹配

編寫iptables規則時使用“-m mac --mac-source MAC地址”的形式,用來檢查資料包的源MAC地址。由於MAC地址本身的侷限性,此類匹配條件一般只適用於內部網路。

列如:若要根據MAC地址封鎖主機,禁止其訪問本機的任何應用,可以執行如下操作。

[[email protected] /]#iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP

4)狀態匹配

編寫iptables規則時使用“-m state --state 連線狀態”的形式,基於iptables的狀態跟蹤機制用來檢查資料包的連線狀態。常見的連線狀態包括NEW(如任何連線無關的),ESTABLISHED(相應請求或者一建立連線的),RELATED(與已有連線有相關性的,如FTP資料連線)。

列如:編寫iptables規則,只開放本機的80埠服務,對於傳送給本機的TCP應答資料包給予放行,其他入站資料包均拒絕,可執行如下操作。

[[email protected] /]#iptables -A INPUT -p tcp -m multiport --dport 80 -j ACCEPT

[[email protected] /]#iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

相關推薦

iptables防火牆()

Linux的防火牆體系主要工作在網路層,針對TCP/IP資料包實施過濾和限制,屬於典型的包過濾防火牆(或網路層防火牆)。在Linux中netfilter和iptables都是指Linux防火牆。區別在於: netfilter:指的是Linux核心中實現包過濾防火牆的內部

iptables防火牆

iptables規則組成:四張表+五條鏈(Hook  point)+規則 規則1:對所有的地址開放本機tcp的22、80、10-21埠的訪問 iptables -v #檢視iptables版本 iptables -L #檢視之前的iptables規

iptables防火牆(二)SNAT和DNAT

通過上一篇文章的學習,我們認識了Linux防火牆的表、鏈機構,並學會了編寫簡單的防火牆規則。Linux防火牆在很多時候承擔著連線企業內、外網的重任,除了提供資料包過濾功能以外,有時還需要提供一些基本的閘道器應用。在配置SNAT和DNAT之前,需要開啟Linux系統中的地址轉發

(轉)Linux的iptables做代理伺服器和防火牆

https://blog.csdn.net/harryxlb/article/details/7339307 用Linux的iptables做代理伺服器和防火牆配置詳細介紹     代理/防火牆     1.iptables規則表 &n

linux網路防火牆-iptables配置

Chain RH-Firewall-1-INPUT (0 references) target       prot opt source                 destination          ACCEPT       all    --    0.0.0.0/0             

配置防火牆,開啟80埠、3306埠 & iptables 使用

1:配置防火牆,開啟80埠、3306埠 vi /etc/sysconfig/iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允許80埠通過防火牆) -A INPUT -m state –state NEW -m

CentOS 7中firewall防火牆和配置以及切換為iptables防火牆

原文連結:http://blog.csdn.net/xlgen157387/article/details/52672988 一、firewall介紹 CentOS 7中防火牆是一個非常的強大的功能,在CentOS 6.5中在iptables防火牆中進行了升級了。

Canny邊緣檢測算法原理及其VC實現()

常用 差分 實現圖 還需要 鏈接 傳感器 出了 關系 位置 轉自:http://blog.csdn.net/likezhaobin/article/details/6892176 圖象的邊緣是指圖象局部區域亮度變化顯著的部分,該區域的灰度剖面一般可以看作是一個階躍,既從

Java線程()

線程 thread runnable 程序、進程、線程的概念 程序(program):是為完成特定任務、用某種語言編寫的一組指令的集合。即指一段靜態的代碼,靜態對象。 進程(process):是程序的一次執行過程,或是正在運行的一個程序。動態過程:有它自身的產生、存在和消亡的過程。 如

Java反射機制

java 反射 反射機制 工廠模式 1反射機制是什麽反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。在面向對象的世界裏,萬事萬物皆對象.在ja

WebSocket安卓客戶端實現()–連接建立與重連

ask 應該 header oid mha 主動推送 未收到 compile tde http://blog.csdn.net/zly921112/article/details/72973054 前言 這裏特別說明下因為WebSocket服務端是公司線上項目所以這裏ur

Redis () StackExchange.Redis Client

pack 線程 ttr 使用場景 sdk ins get http arc 這期我們來看StackExchange.Redis,這是redis 的.net客戶端之一。Redis是一個開源的內存數據存儲,可以用來做數據庫,緩存或者消息代理服務。目前有不少人在使用Service

[數據庫事務與鎖]: 徹底理解數據庫事務

存儲 數量 情況 一個數 就是 可能 發生 http 舉例 註明: 本文轉載自http://www.hollischuang.com/archives/898 事務 事務(Transaction),一般是指要做的或所做的事情。在計算機術語中是指訪問並可能更新數據庫中各種

Centos 6 apache httpd 2.2 主要配置( )

apache 2.2 httpd2.2 centos 6 實驗環境:VMware Workstation Pro 14(試用版) 系統平臺: CentOS release 6.9 (Final) 內核 2.6.32-696.el6.x86_64 Server versio

Tkprof工具(轉載)

depth ber 官方 Go ble 不可 _id sys 避免 在數據庫生成的oracle trace文件中,可讀性是比較差的,此時可使用tkprof工具來格式化trace文件,tkprof是一個命令行工具,作用就是把原始的跟蹤trace文件作為輸入,然後格式化一個可讀

linux網絡防火墻-iptables基礎(重要)

lte 目前 targe udp 安全 們的 tina 設計 常見 一:前言   防火墻,其實說白了講,就是用於實現Linux下訪問控制的功能的,它分為硬件的或者軟件的防火墻兩種。無論是在哪個網絡中,防火墻工作的地方一定是在網絡的邊緣。而我們的任務就是需要去定義到底

三:python 對象類型:數字(上)

結果 dom 運行 精度 升級 方法 函數 般的 代碼 一:python 的數字類型: a)整數和浮點數 b)復數 c)固定精度的十進制數 d)有理分數 e)集合 f)布爾類型 g)無窮的整數精度 h)各種數字內置函數和模塊 二:各種數字類型的詳解   1,數字常量:pyt

PHP7 學習筆記(十三)composer

導出 php開發 HR build osi oschina sni 區別 優秀 摘要   從拷貝第三方代碼到項目中(1994),到PEAR安裝依賴包(1999),再到Composer興起(2012),PHP社區經歷了將近20年的探索。PHP這門古老的語言,也在不斷的發展更新

自定義轉場()

assign pda 好的 led hint ext hid case delegate 前言 本文是我學習了onevcat的這篇轉場入門做的一點筆記。 今天我們來實現一個簡單的自定義轉場,我們先來看看這篇文章將要實現的一個效果圖吧: 過程詳解 熱身準備 我們先創建一

iptables用法

iptables DNAT SNAT netfilter iptables 詳解(基於馬哥講的iptables)看到網上很多人寫的iptables詳解有很多錯誤,還有很多不完整的地方。於是決定自己寫一份。供大家參考。一, 準備工作 本文章用到vmware workstation中2臺虛擬機。和