防火牆的分類
包過濾型防火牆
工作在OSI參考模型的網絡層 它根據數據包頭源地址、目的地址、端口號和協議類型 等標誌確定是否允許數據包通過
代理型防火牆
主要工作在OSI的應用層 代理服務在確認客戶端連接請求有效後接管代理 代爲向服 務器發出連接請求
代理型防火牆可以允許或拒絕特定的應用程序或服務,還可以實施數據流監控、過濾、 記錄和報告功能
代理服務器通常有高速緩存功能
代理防火牆的最大缺點是速度較慢(客戶機請求的地址沒有存在於緩存中)
狀態檢測型防火牆
可以動態地根據實際應用需求 自動生成或刪除包過濾規則
不但能根據數據包的源地址、目標地址、協議類型、源端口、目標端口等對數據包進行 控制 而且能記錄通過防火牆的連接狀態 直接對包裏的數據進行處理
網關防火牆
DMZ網關防火牆
netfilter
位於Linux內核中的包過濾防火牆功能體系
稱爲Linux防火牆的”內核態”
iptables
位於/sbin/iptables 是用來管理防火牆的命令工具
爲防火牆體系提供過濾規則/策略 決定如何過濾或處理到達防火牆主機的數據包
成爲Linux防火牆的”用戶態”
-------習慣上 上述兩種稱呼都可以代表Linux防火牆
規則鏈
規則的作用在於對數據包進行過濾或處理 根據處理時機的不同 各種規則被組織在不 同的”鏈”中
規則鏈是防火牆規則/策略的集合
默認的5種規則鏈
INPUT 處理入站數據包 (外網入 內網出 箭頭指向防火牆 進入防火牆)
OUTPUT 處理出站數據包
FORWARD 處理轉發數據包
POSTROUTING 在進行路由選擇後處理數據包
PREROUTING 在進行路由選擇前處理數據包
規則表
具有某一類相似用途的防火牆規則 按照不同處理時機區分到不同的規則鏈以後 被歸 置到不同的”表”中
規則表是規則鏈的集合
默認的4個規則表
raw 表 確定是否對該數據包進行狀態跟蹤
mangle 表 爲數據包設置標記
nat 表 修改數據包中的源、目的IP地址或端口(網關型防火牆 至少兩個網卡)
filter表 確定是否放行該數據包(過濾)
iptables 的規則表、鏈結構
規則表間的優先順序
raw、mangle、nat、filter
規則鏈間的匹配順序
入站數據 PREROUTING、INPUT
出站數據 OUTPUT、POSTROUTING
轉發數據 PREROUTING、FORWARD、POSTROUTING
規則鏈內的匹配順序
按順序依次進行檢查 找到相匹配的規則即停止(LOG策略會有例外)
若在該鏈內找不到相匹配的規則 則按該鏈的默認策略處理
iptables命令的語法格式
ipatables [-t 表名] 管理選項 [鏈名] [條件匹配] [-j目標動作或跳轉]
不指定表名時 默認爲filter表
不指定鏈名時,默認表示該表內所有鏈
除非設置規則鏈的缺省策略(如果不是設置默認規則) 否則一定需要條件匹配
設置規則內容:
-A在鏈尾追加一條新的規則
-I 在指定位置(或鏈首)插入一條新的規則
-R 修改、替換指定位置或內容的規則
-P 設置指定鏈的默認策略
列表查看規則
-L 列表查看各規則信息
--line-numbers 查看規則信息時顯示規則的行號
-n以數字形式顯示IP地址、端口等信息
-v 顯示數據包個數、字節數等詳細信息
清除規則
-D 刪除指定位置或內容規則
-F 清空規則鏈內的所有規則
自定義規則鏈
-N 創建一條新的規則鏈
-X 刪除自定義的規則鏈
-h 查看iptables命令的使用幫助
刪除指定位置的規則
清空所有規則
指定表格清空規則
創建一條新的規則鏈
設置匹配數據包的條件
通用條件匹配
可直接使用 不依賴於其他的條件或擴展模塊
包括網絡協議、IP地址、網絡接口等匹配方式
隱含條件匹配
一般需要以特定的協議匹配作爲前提
包括端口、TCP標記、ICMP類型等匹配方式
顯式條件匹配
需要使用”-m擴展模塊”的形式明確指定匹配方式
包括多端口、MAC地址、IP地址範圍、數據包狀態等匹配方式
通用條件匹配
可直接使用,不依賴於其他的條件或擴展模塊
包括網絡協議、IP地址、網絡接口等匹配方式
協議匹配
使用"-p協議名"的形式
協議名可使用在"/etc/protocols"文件中定義的名稱
常用的協議包括tcp、udp、icmp等
地址匹配
使用"-s源地址"、"-d目標地址的形式"
地址可以使單個IP地址、網絡地址(帶掩碼長度)
接口匹配
使用"-i網絡接口名"、"-o網絡接口名"形式 分別對應接收、發送數據包的網絡接口
拒絕進入防火牆的所有ICMP包
允許防火牆轉發除ICMP以外的所有包
拒絕轉發來自192.168.1.11主機的數據
丟棄從外網接口(eth1)進入防火牆主機的源地址爲172.16.0.0/12的數據包
拒絕轉發從eth1口出去的目標地址爲61.35.4.3的數據包
隱含條件匹配
一般需要以特定的協議匹配作爲前提
包括端口、TCP標記、ICMP類型等匹配方式
端口匹配
使用"-sport源端口"、"-dport"目的端口的形式
採用"端口1:端口2"的形式可以指定一個範圍的端口
允許轉發使用22端口的ssh數據包
允許本機開放從TCP端口20-80出去的端口
禁止其他主機ping
允許ping其他主機
或者 iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -I INPUT -i eth1 -p tcp - -tcp-flags SYN,RST,ACK SYN -j REJECT
iptables -I INPUT -i eth1 -p tcp - -syn -j REJECT
ICMP類型匹配
使用”--icmp-type ICMP類型”的形式
ICMP類型可以使用類型字符串或者對應的數值 例如Echo-Request、Echo-Reply
TCP標記匹配
使用”--tcp-flags 檢查範圍 被設置的標記”的形式
如”--tcp-flags SYN,RST,ACK SYN”表示檢查SYN,RST,ACK這3個標記 只有SYN爲1時滿足條件
顯式條件匹配
需要使用“-m 擴展模塊”的形式明確指定匹配方式
包括多端口、MAC地址、IP地址範圍、數據包狀態等匹配方式
MAC地址匹配
使用“-m mac”結合“--mac-source MAC地址”的形式來表示數據包的源MAC地址
多端口匹配
使用“-m multiport”結合“--sports 源端口列表”或者“--dports 目標端口列表”的形式
多個端口之間使用逗號“,”分隔 連續的端口也可以使用冒號“:”分隔
IP地址範圍匹配
使用“-m iprange”結合“--src-range 源IP範圍”或者“--dst-range 目標IP範圍”的形式
以“-”符號連接起始IP地址、結束IP地址
數據包狀態匹配
使用“-m state”結合“--state 狀態類型”的形式
同時表示多種狀態時以逗號“,”分隔
常見的數據包狀態包括:NEW、ESTABLISHED、RELATED、INVALID
禁止轉發來自MAC地址爲00:0C:29:27:55:3F的主機的數據包
允許防火牆本機對外開放端口20 21 25 110以及被動模式FTP端口1250-1280
禁止轉發源地址爲192.168.1.20-192.168.1.99的TCP數據包
禁止轉發與正常TCP連接無關的非—syn請求數據包
拒絕訪問防火牆的新數據包 但允許響應連接或與已有連接相關的數據包
“ESTABLISHED”表示已經響應請求或者已經建立連接的數據包,”RELATED”表示與已建立的連接有相關性的,比如FTP數據連接等
常見的數據包處理方式
ACCEPT 放行數據包
DROP 丟棄數據包
REJECT 拒絕數據包
LOG 記錄日誌信息 並傳遞給下一條規則處理(防止SSH爆破)
用戶自定義鏈名 傳遞給自定義鏈內的規則進行處理
SNAT 修改數據包的源地址信息
DNAT 修改數據包的目標地址信息
導入、導出防火牆規則
導出規則 iptables-save
結合重定向輸出”>”符號保存規則信息
導入規則 iptables-restore
結合重定向輸入”<”符號恢復規則信息
編寫防火牆腳本文件
預先加載擴展模塊 設置環境參數
引入可控變量 增強腳本的可移植性、可重用性
通過shell語句靈活控制防火牆策略
防火牆的一般結構
設置網段、網卡、IP地址等變量
加載包過濾相關的內核模塊 FTP相關: ip_nat_ftp、ip_conntrack_ftp
用於添加的具體防火牆規則內容
清空原有規則,建立新的規則
確認開啓路由轉發功能
方法1 /sbin/sysctl -w net.ipv4.ip_forward=1
方法2 echo 1 > /proc/sys/net/ipv4/ip_forward
方法3 修改/etc/sysctl.conf,設置net.ipv4.ip_forward=1
設置iptables腳本中的自定義變量
定義變量名對應內外網卡對應的ip和接口名稱
INTERNET_IP=”212.13.24.23”
INTERNET_IF=”eth1”
LAN_IP=”192.168.200.1”
LAN_IF=”eth0”
加載模塊
加載支持ftp連接跟蹤的功能模塊:/sbin/modprobe ip_conntrack ftp
加載支持對ftp連接進行NAT轉換的功能模塊:/sbin/modprobe ip_nat_ftp
iptables腳本開頭初始化語句
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -t raw -F
/sbin/iptables -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
/sbin/iptables -t raw -X
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
綜合實驗
1 配置入站鏈默認拒絕,其它鏈都是允許
允許入站接口是本地迴環接口的任何數據
允許所有客戶機訪問Linux服務器的Samba共享
允許響應所有客戶機的DNS請求
只允許一臺客戶機ping通服務器
2 配置入站和出站鏈默認是拒絕,其它鏈都是允許
禁止某一個客戶機訪問Linux服務器的共享(只能使用--tcp-flag實現)
但允許服務器訪問那個客戶機上的共享(只能使用--tcp-flag實現)
禁止服務器ping那臺客戶機,但允許那臺客戶機ping通服務器(只能使用--icmp-type)
3 配置服務器出站鏈默認是拒絕,其它鏈都是允許
客戶機不能訪問服務器上任何資源
要求服務器能訪問任意客戶機上的所有資源,例如能ping通客戶機,也可以ssh和http 訪問客戶機(只能使用--state實現)