Linux包過濾防火牆概述
netfilter
位於Linux內核中的包過濾功能體系
稱爲Linux防火牆的“內核態”
iptables
位於/sbin/iptables,用來管理防火牆規則的工具
稱爲Linux防火牆的“用戶態”
—— 上述2種稱呼都可以表示Linux防火牆
包過濾的工作層次
主要是網絡層,針對IP數據包
體現在對包內的IP地址、端口等信息的處理上
iptables的表、鏈結構
規則鏈
規則的作用:對數據包進行過濾或處理
鏈的作用:容納各種防火牆規則
鏈的分類依據:處理數據包的不同時機
默認包括5種規則鏈
INPUT:處理入站數據包
OUTPUT:處理出站數據包
FORWARD:處理轉發數據包
POSTROUTING鏈:在進行路由選擇後處理數據包
PREROUTING鏈:在進行路由選擇前處理數據包
規則表
表的作用:容納各種規則鏈
表的劃分依據:防火牆規則的作用相似
默認包括4個規則表
raw表:確定是否對該數據包進行狀態跟蹤
mangle表:爲數據包設置標記
nat表:修改數據包中的源、目標IP地址或端口
filter表:確定是否放行該數據包(過濾)
默認的表、鏈結構示意圖
數據包過濾的匹配流程
規則表之間的順序
raw → mangle → nat → filter
規則鏈之間的順序
入站:PREROUTING → INPUT
出站:OUTPUT → POSTROUTING
轉發:PREROUTING → FORWARD → POSTROUTING
規則鏈內的匹配順序
按順序依次檢查,匹配即停止(LOG策略例外)
若找不到相匹配的規則,則按該鏈的默認策略處理
匹配流程示意圖
iptables的基本語法
語法構成
iptables [-t 表名] 選項 [鏈名] [條件] [-j 控制類型]
幾個注意事項
不指定表名時,默認指filter表
不指定鏈名時,默認指表內的所有鏈
除非設置鏈的默認策略,否則必須指定匹配條件
選項、鏈名、控制類型使用大寫字母,其餘均爲小寫
數據包的常見控制類型
ACCEPT:允許通過
DROP:直接丟棄,不給出任何迴應
REJECT:拒絕通過,必要時會給出提示
LOG:記錄日誌信息,然後傳給下一條規則繼續匹配
iptables的管理選項
添加新的規則
-A:在鏈的末尾追加一條規則
-I:在鏈的開頭(或指定序號)插入一條規則
查看規則列表
-L:列出所有的規則條目
-n:以數字形式顯示地址、端口等信息
-v:以更詳細的方式顯示規則信息
--line-numbers:查看規則時,顯示規則的序號
刪除、清空規則
-D:刪除鏈內指定序號(或內容)的一條規則
-F:清空所有的規則
設置默認策略
-P:爲指定的鏈設置默認規則
常用管理選項彙總
類別 | 選項 | 用途 |
添加新的規則 | -A | 在鏈的末尾追加一條規則 |
-I | 在鏈的開頭(或指定序號)插入一條規則 | |
查看規則列表 | -L | 列出所有的規則條目 |
-n | 以數字形式顯示地址、端口等信息 | |
-v | 以更詳細的方式顯示規則信息 | |
--line-numbers | 查看規則時,顯示規則的序號 | |
刪除、清空規則 | -D | 刪除鏈內指定序號(或內容)的一條規則 |
-F | 清空所有的規則 | |
設置默認策略 | -P | 爲指定的鏈設置默認規則 |
規則的匹配條件
通用匹配
可直接使用,不依賴於其他條件或擴展
包括網絡協議、IP地址、網絡接口等條件
隱含匹配
要求以特定的協議匹配作爲前提
包括端口、TCP標記、ICMP類型等條件
顯式匹配
要求以“-m 擴展模塊”的形式明確指出類型
包括多端口、MAC地址、IP範圍、數據包狀態等條件
常見的通用匹配條件
協議匹配:-p 協議名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站網卡、-o 出站網卡
常用的隱含匹配條件
端口匹配:--sport 源端口、--dport 目的端口
TCP標記匹配:--tcp-flags 檢查範圍 被設置的標記
ICMP類型匹配:--icmp-type ICMP類型
常用的顯式匹配條件
多端口匹配:-m multiport --sports 源端口列表
-m multiport --dports 目的端口列表
IP範圍匹配:-m iprange --src-range IP範圍
MAC地址匹配:-m mac --mac-source MAC地址
狀態匹配:-m state --state 連接狀態
常見匹配條件彙總
類別 | 條件類型 | 用法 |
通用匹配 | 協議匹配 | -p 協議名 |
地址匹配 | -s 源地址、-d 目的地址 | |
接口匹配 | -i 入站網卡、-o 出站網卡 | |
隱含匹配 | 端口匹配 | --sport 源端口、--dport 目的端口 |
TCP標記匹配 | --tcp-flags 檢查範圍 被設置的標記 | |
ICMP類型匹配 | --icmp-type ICMP類型 | |
顯式匹配 | 多端口匹配 | -m multiport --sports | --dports 端口列表 |
IP範圍匹配 | -m iprange --src-range IP範圍 | |
MAC地址匹配 | -m mac --mac-source MAC地址 | |
狀態匹配 | -m state --state 連接狀態 |
實驗案例:基於IP、端口的控制
需求描述
爲Web主機編寫入站規則,允許ping,開放80端口
爲網關編寫轉發規則,允許基本的上網訪問
實現思路
Web主機:在filter表的INPUT鏈添加入站規則
Linux網關:在filter表的FORWARD鏈添加轉發規則
全部服務器和測試機配置好正確的IP地址
網站服務器搭建好WEB站點.DNS服務器.
網關服務器開始路由轉發功能.
服務器的防火牆先全部清空.能正常訪問web站點
下面開始修改網站服務器防火牆
改默認策略爲DROP
無法ping通網站服務器
無法訪問web站點
允許接受響應本機ping測試請求的各種ICMP數據包,也就是隻能本機ping其它電腦,其它電腦不能ping通本機
網站服務器能ping通測試機
測試機不能ping通網站服務器
允許訪問本機的80端口
用域名無法訪問web站點
用IP地址能正常訪問web站點
允許發往本機已建立連接或已有連接相關的各種TCP數據包
以下配置網關服務器的防火牆
設置網關服務器的filter表中的FORWARD鏈的默認策略爲DROP
測試機無法訪問web站點了
允許外網可以訪問20,21,25,80,110,143端口
禁止webqq的IP地址到TCP協議的80,443端口訪問
FTP服務器沒問題
web站點也沒問題