第二章
Netfilter/iptables
2.1
何爲內核
內核指的是操作系統的內核,其實內核對於操作系統來說,是極爲重要的部分,其主要用來執行系統資源的分配及調度。
2.2
何爲Netfilter
Netfilter 組件稱爲內核空間(kernel space)是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集
2.4
Netfilter 工作的位置
Netfilter是運行在linux中一個功能,因爲linux是一個極度“模塊”化的內核,所以Linux絕大多數功能都以模塊形式擴充出來,而這種模塊化的設計最大的優點在於“彈性”,我們可以通過Linux的模塊管理工具,隨心所欲地將模塊載入內存,或者將某一個目前不需要使用的模塊從內存中移除,Netfilter也是以模塊的形式存在於Linux中。
2.5
Netfilter的命令結構
表 | 鏈 |
Fillter | INPUT |
FORWARD | |
OUTPUT | |
Nat | PREROUTING |
POSTROUTING | |
OUTPUT | |
mangle | PREROUTING |
INPUT | |
FORWARD | |
OUTPUT | |
POSTROUTING | |
raw | PREROUTING |
OUTPUT |
Filter:filter是Netfilter中最重要的機制,其任務是執行數據包的過濾操作,也就是起到防火牆的作用。
Nat:nat(Network Address Translation) 也是防火牆上一個不可或缺的重要機制,比較通俗的方式來說,其功能就是IP分享器,只不過其所能執行的功能,比一般市場上的IP分享器功能強大行多。
Mangle :mangle 是一個很特殊的機制,我們可以通過mangle機制來修改經過防火牆內數據包的內容。
Raw :負責加快數據包穿過防火牆機制的速度,由些提高防火牆的性能。
2.6
Netfilter的filter機制
INPUT類型:是指“網絡上其他主機發送給本機進程的數據包”,例如,網絡上其他使用者訪問本機的httpd服務時,就會生成這種類型的數據包。
OUTPUT類型:如果是“本機進程”所生成的數據包,即爲OUTPUT類型的數據包。
例如,使用者在本機啓動firefox去訪問網絡上的其他主機時,就會生成這種類型的數據包。
FORWARD類型:如果數據包對本機而言只是“路過”而已,那麼這就是屬於FORWARD類型的數據包。例如:本機扮演的是路由器角色,就會生成FORWARD類型的數據包。
圖:
2.7
規則的匹配方式
採用優先匹配的方式,也就是按照“先後順序”一條一條被加入到INPUT鏈中。
如果最一條規則始終都沒有匹配成功,那麼數據包能不能進入到“本機進程”中,取決於
每個鏈的最底端的默認策略(default policy).
2.8 netfilter與iptables的關係
Netfilter所需要的規則是存放在內存中,而防火牆管理人員需要一個規則編輯工具,通過這個工具來對內存中的規則執行添加,刪除及修改等操作。
2.9
Iptables工具的使用方法
2.9.1 iptables命令參數
Iptables -t | filter | -L (list) 列出表的內容 |
-F (flush) 清除表的內容 | ||
-A (add) 加入新規則 | ||
-P (policy) 設置默認策略 | ||
-I (insert) 插入新規則 | ||
-R (replace) 取代規則 | ||
-D (delete) 刪除規則 | ||
nat | ||
mangle | ||
Raw |
示例2.1:列出filter表的所有內容
語法: iptables -t filter -L
示例 2.2 列出filter表中的INPUT鏈的內容
語法 iptables -t filter -L INPUT
示例 2.3 清除filter表中的所有內容
語法 :iptables -t filter -F
示例 2.4 將規則添加到filter表的INPUT鏈中
語法:iptables -t -A INPUT -p icmp -j ACCEPT
示例 2.5 將FORWARD鏈的默認策略設置爲DROP
語法:iptables -t filter -P FORWARD DROP
示例 2.6 在INPUT鏈中插入新的規則
語法 :iptables - t filter -I INPUT 2 -p tcp -j ACCEPT
示例 2.7 取代INPUT鏈內已經存在的規則
語法:iptables -t filter -R INPUT 2 -p tcp -j ACCEPT
示例 2.8 刪除INPUT鏈中已經存在的規則
語法: iptables -t filter -D INPUT 2
此處省略nat,mangle,raw表的操作
2.9.2 iptables規則語法 (基礎語法)
示例2.9 將192.168.0.200 進入本機的icmp協議包都丟棄
語法:iptables -A INPUT -p icmp -s 192.168.0.200 -j DROP
解析:
-A INPUT
保護的對象 | 因爲本示例所使用的是INPUT鏈,故其保護的對象是本機 |
-p icmp
原文 | -p, protocol |
目的 | 匹配某種特定協議的數據包,本示例是匹配icmp協議包 |
語法 | -p icmp ,-p udp -p tcp -p all 等 |
-s 192.168.0.200
原文 | -s source |
對應的參數 | -d destination |
目的 | 匹配數據包中“來源”或“目的”端的IP |
語法 | IP位置的標識方法可以是單一IP或者標準的CIDR網段 |
-j
原文 | Jump |
目的 | 將符合以上兩個條件的數據包以特定方式來處理 |
常見的處理方式
ACCEPT | 允許通過 |
DROP | 將數據包丟棄掉,此種處理方式將導致來源端誤以爲數據包丟失而不斷重新發送數據包,這個動作將持續連接超時爲止。 |
REJECT | 將數據包丟棄掉,並回送一個Destination Ureachable的icmp 數據包給發送端,發送端的應用程序在收到這個錯誤信息數據包後,會終止連接。 |
示例2.10
不允許192.168.0.200 主機通過本機的DNS服務來執行名稱解析
語法; iptables -A INPUT -p udp -s 192.168.0.200 --dport 53 -j REJECT
其他語法跟上面一樣,只有--dport不同
--dport
原文 | --port ,Destination port |
對應的參數 | --sport source port |
目的 | 匹配TCP ,UDP 包頭中的“來源端端口”或“目的端端口”,如此即可判斷連接要訪問的服務,例如:-p udp -dport 53 代表客戶端要訪問udp的53端口,而udp的53端口就是DNS服務。 |
語法 | 只要規則語法中使用到“端口參數”,一定要加上-p tcp 或 -p udp 參數 |
示例 2.11
允許192.168.0.200主機連接到本機的TELNET服務
語法:iptables -A INPUT -p tcp -s 192.168.0.200 --dport 23 -j ACCEPT
示例 2.12 允許192.168.1.0/24網段的主機向本機192.168.0.1 提出任何服務請求
Iptables -A INPUT -p all -s 192.168.1.0/24 -d 192.168.0.1 -j ACCEPT
示例 2.13
只允許客戶端主機從eth1這個接口訪問本機的SSH服務
語法:
Iptables -A INPUT -p tcp -i eth --dport 22 -j ACCEPT
-i eth1
來源 | -i, in-interface |
對應的參數 | -o,,out-interface |
目的 | 匹配數據包的進出接口 |
語法 | -i eth1, -o eth2 |
示例2.14不允許本機的應用程序從eth0接口發送數據包去訪問edu.uuu.con.tw以外的網站
語法:
Iptables -A OUTPUT -o eth0 -p tcp -d ! Edu.uuu.com.tw --dport 80 -j REJECT
限制的對象 | 因爲本示例所使用的是output鏈,故其目的是限制本機對外訪問 |
-d !edu.uuu.com.tw
目的 | 如果本機的應用程序要從eth0接口發送tcp協議的數據包到edu,uuu.com.tw以外其他主機的端口80,是不允許的 |
示例:2.15
不允許本企業內部的主機訪問企業以外的任何網站
Iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -j DROP
補充說明:
本示例使用網關式防火牆,因此所使用的鏈是FORWARD,eth0接口連接到Internet,而eth1 連接到企業內部..
總結與整理:
接口的匹配參數
參數名稱 | -i -o |
參數值 | 參數值會因爲防火牆主機所使用的網絡實體接口而異,以下爲常見的網絡接口名稱: Eth0:以太網的接口名稱 Ppp0:ppp接口的名稱 Lo:local loopback 接口 Fddi0:光纖網絡接口 |
使用示例 | -i eth0 :匹配從eth0接口送入的數據包 -o eth0:匹配從eth0接口離開的數據包 |
意義 | 匹配數據包進出的接口 |
補充 | 可搭配”!”來代表反向,例如:”-i ! Eth0”,即代表匹配不是從eth0接口進入的數據包. |
上層協議(upper layer protocol)的匹配參數
參數名稱 | -P |
參數值 | 這些參數會因匹配的上層協議而異 Tcp ,udp ,icmp ,all |
參數名稱 | -P |
使用示例 | -p tcp -p6:匹配tcp協議. -p icmp -p 1:匹配icmp協議 |
意義 | 匹配上層通信協議 |
補充 | 可能搭配”!”來代表反向,例如”-p ! icmp” 表示匹配的不是icmp的數據包 |
匹配來源/目的的IP地址
參數名稱 | -s -d |
參數值 | 來源及目的IP地址匹配,其可以識別的IP地址格式如下: 192.168.0.1 :匹配單一IP 172.10.0.0/16 匹配一個B類網段 192.168.0.0/28 匹配一個任何標準的CIDR的網段 www.playbody.com 也可以是FQDN ,但最後存放到鏈中的值還是IP |
使用示例 | -s 192.168.0.1 匹配從192.168.0.1 主機發送來的數據包 |
意義 | 匹配數據包的來源或目的IP地址 |
補充 | 也可搭配”!” |
匹配來源/目的的端口
參數名稱 | --sport ,--dport |
參數值 | 匹配端口的用意在於匹配連接所需訪問的服務 |
使用示例 | --dport 80 匹配要訪問WEB服務的數據包3 --sport 110 匹配由pop3服務應答的客戶端的數據包 |
意義 | 匹配數據包的來源或目的端口 |
補充 | 可搭配”!” |
處理方式
參數名稱 | -j |
參數值 | 較常見的處理方式有三種 ACCEPT :允許 DROP:將數據包丟棄 REJECT:將數據包丟棄,並回送給發送端一個ICMP數據包 |
使用示例 | -j ACCEPT :允許 -j DROP 將數據包丟棄 |
意義 | 採用特定方式來處理符合條件地數據包 |
本筆記爲一書 《Linux網絡安全技術與實現(第2版)》第二章前部分,目的爲了方便自己以後查看,同時也分享出來,希望對大家有幫助。筆記不免有所遺漏,歡迎大家指正。