防火牆定義
防火牆分類
無狀態包過濾防火牆
基於單個IP報文進行操作,每個報文都是獨立分析
- 默認規則
- 一切未被允許的都是禁止的
- 一切未被禁止的都是允許的
- 規則特徵
- 協議類型,如TCP、UDP、ICMP、IGMP等
- 源和目的IP地址和端口
- TCP標記,如SYN、ACK、FIN、RST等
- 網絡層協議選項,如ICMP ECHO、ICMP REPLY等
- 報文的傳遞方向,如進入接口還是從接口發出
- 報文流過的接口名,如eth0
有狀態包過濾防火牆
自動歸類屬於同一個會話的所有報文,實現會話的跟蹤功能
- 建立報文的會話狀態表,利用狀態表跟蹤每個會話狀態對於內部主機對外部主機的連接請求,防火牆可以認爲這是一個會話的開始
- 訪問控制策略
- 報文流動方向和所屬服務
- 發起會話和接受會話的終端地址範圍
- 會話各階段的狀態
會話狀態表
代理防火牆分類
應用層代理
- 爲特定的應用服務提供代理服務,對應用層協議進行解析,也稱爲應用層網關
- 優點是實現用戶控制、可以對應用層數據進行細粒度的控制,缺點是效率較
低電路層代理
- 工作在傳輸層,相當於傳輸層的中繼,能夠在兩個TCP/UDP套接字之間複製數據
- 可以同時爲不同的應用層協議提供支持
- 無法提供應用層協議的解析和安全性檢查
IPTABLES防火牆
IPTABLE的表、鏈結構
規則鏈
- 規則的作用:對數據包進行過濾或處理
- 鏈的作用:容納各種防火牆規則
- 鏈的分類依據:處理數據包的不同時機
默認包括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 [-t 表名] 選項 [鏈名] [條件] [-j 控制類型]
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -j REJECT
幾個注意事項
- 不指定表名時,默認指filter表
- 不指定鏈名時,默認指表內的所有鏈
- 除非設置鏈的默認策略,否則必須指定匹配條件
- 選項、鏈名、控制類型使用大寫字母,其餘均爲小寫
數據包的常見控制類型
- ACCEPT:允許通過
- DROP:直接丟棄,不給出任何迴應
- REJECT:拒絕通過,必要時會給出提示
- LOG:記錄日誌信息,然後傳給下一條規則繼續匹配
添加新的規則
-A:在鏈的末尾追加一條規則
-I:在鏈的開頭(或指定序號)插入一條規則
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT
[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
查看規則列表
-L:列出所有的規則條目
-n:以數字形式顯示地址、端口等信息
-v:以更詳細的方式顯示規則信息
--line-numbers:查看規則時,顯示規則的序號
[root@localhost ~]# iptables -n -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable ACCEPT
tcp -- 0.0.0.0/0 0.0.0.0/0
刪除、清空規則
-D:刪除鏈內指定序號(或內容)的一條規則
-F:清空所有的規則
[root@localhost ~]# iptables -D INPUT 3
[root@localhost ~]# iptables -n -L INPUT Chain
INPUT (policy ACCEPT) target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0