iptables防火墻 (一)
netfilter
位於Linux內核中的包過濾功能體系
稱為Linux防火墻的“內核態”
iptables
位於/sbin/iptables,用來管理防火墻規則的工具
稱為Linux防火墻的“用戶態”
-
—— 上述2種稱呼都可以表示Linux防火墻
包過濾的工作層次
主要是網絡層,針對IP數據包
體現在對包內的IP地址、端口等信息的處理上
- 規則鏈
規則的作用:對數據包進行過濾或處理
鏈的作用:容納各種防火墻規則
鏈的分類依據:處理數據包的不同時機
默認包括5種規則鏈
1)INPUT:處理入站數據包
2)OUTPUT:處理出站數據包
3)FORWARD:處理轉發數據包
5)PREROUTING鏈:在進行路由選擇前處理數據包
-
2.規則表
表的作用:容納各種規則鏈
表的劃分依據:防火墻規則的作用相似
默認包括4個規則表
1)raw表:確定是否對該數據包進行狀態跟蹤
2)mangle表:為數據包設置標記
3)nat表:修改數據包中的源、目標IP地址或端口
4)filter表:確定是否放行該數據包(過濾)
默認的表、鏈結構示意圖
3.規則表之間的順序
raw?mangle?nat?filter
規則鏈之間的順序
1)入站:PREROUTING?INPUT
2)出站:OUTPUT?POSTROUTING
3)轉發:PREROUTING?FORWARD?POSTROUTING
按順序依次檢查,匹配即停止(LOG策略例外)
若找不到相匹配的規則,則按該鏈的默認策略處理
匹配流程示意圖
語法構成
iptables [-t 表名] 選項 [鏈名] [條件] [-j 控制類型]
-
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -j REJECT
-
幾個註意事項
不指定表名時,默認指filter表
不指定鏈名時,默認指表內的所有鏈
除非設置鏈的默認策略,否則必須指定匹配條件
選項、鏈名、控制類型使用大寫字母,其余均為小寫
數據包的常見控制類型
ACCEPT:允許通過
DROP:直接丟棄,不給出任何回應
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 -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- anywhere anywhere
2 ACCEPT icmp -- anywhere anywhere
3 REJECT icmp -- anywhere anywhere reject-with icmp-port-unreachable
4 ACCEPT tcp -- anywhere anywhere
**[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
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t nat -F
[root@localhost ~]# iptables -t mangle -F
[root@localhost ~]# iptables -t raw -F
設置默認策略
-P:為指定的鏈設置默認規則
[root@localhost ~]# iptables -t filter -P FORWARD DROP
[root@localhost ~]# iptables -P OUTPUT ACCEPT
常用管理選項匯總
通用匹配
可直接使用,不依賴於其他條件或擴展
包括網絡協議、IP地址、網絡接口等條件
隱含匹配
要求以特定的協議匹配作為前提
包括端口、TCP標記、ICMP類型等條件
顯式匹配
要求以“-m 擴展模塊”的形式明確指出類型
包括多端口、MAC地址、IP範圍、數據包狀態等條件
常見的通用匹配條件
協議匹配:-p 協議名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站網卡、-o 出站網卡
[root@localhost ~]# iptables -I INPUT -p icmp -j DROP
[root@localhost ~]# iptables -A FORWARD ! -p icmp -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT
[root@localhost ~]# iptables -I INPUT -s 10.20.30.0/24 -j DROP
-
[root@localhost ~]# iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
[root@localhost ~]# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
[root@localhost ~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
常用的隱含匹配條件
端口匹配:--sport 源端口、--dport 目的端口
TCP標記匹配:--tcp-flags 檢查範圍 被設置的標記
ICMP類型匹配:--icmp-type ICMP類型
[root@localhost ~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp -j DROP
常用的顯式匹配條件
多端口匹配:-m multiport --sports 源端口列表
-m multiport --dports 目的端口列表
IP範圍匹配:-m iprange --src-range IP範圍
MAC地址匹配:-m mac --mac-source MAC地址
狀態匹配:-m state --state 連接狀態
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
常見匹配條件匯總
iptables防火墻 (一)