一、Iptables說明
1.0 概述
netfilter/iptables :
IP信息包過濾系統(tǒng),實際上是由兩個組件netfilter和iptables組成
netfilter/iptables 關(guān)系:
netfilter組件也稱內(nèi)核空間,是內(nèi)核的一部分,由一些包過濾表組成的規(guī)則集來對信息包進(jìn)行過濾處理.
iptables組件稱為用戶空間, 它是一種可以通過插入、修改、刪除包過濾表中的規(guī)則的一種工具。配置完成后立即生效,內(nèi)置了filter、nat、mangle三張表。
iptables 三張表
filter: 負(fù)責(zé)過濾數(shù)據(jù)包,影響的規(guī)則鏈:input, output,forword
nat: 負(fù)責(zé)網(wǎng)絡(luò)地址的轉(zhuǎn)換,影響的規(guī)則鏈:prerouting, postrouting, output
mangle: 負(fù)責(zé)修改數(shù)據(jù)包內(nèi)容,可以用來做流量整形、數(shù)據(jù)包標(biāo)識等。影響的規(guī)則鏈:input, output,forword, prerouting, postrouting
raw 用于處理異常,包括的規(guī)則鏈: prerouting, output, 一般用不到。
iptables 五個鏈
input: 處理數(shù)據(jù)包目標(biāo)地址是本機的規(guī)則
output: 處理本機發(fā)送的數(shù)據(jù)包,即包源地址是本機的規(guī)則
forward: 匹配流經(jīng)過本機的數(shù)據(jù)包
prerouting: 用來修改目標(biāo)地址,用來做DNAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)例:端口映射
postrouting: 用來修改源地址,用來做SNAT(源地址轉(zhuǎn)換)例:內(nèi)網(wǎng)通過路由器NAT實現(xiàn)內(nèi)網(wǎng)多個PC公用一個公網(wǎng)IP地址進(jìn)行上網(wǎng)。
1.1 數(shù)據(jù)過濾流程
二、Iptables語法
語法結(jié)構(gòu):
iptables [-t 表名] 管理選項 [鏈名] [匹配條件] [-j 動作]
[-t 表名]:默認(rèn)為filter表
[鏈名]: 默認(rèn)所有鏈
[匹配條件]: 如需要所有ip生效可不填寫或填入:0:0:0:0/0
Iptables-cmd.png
管理選項
-A 在指定鏈的末尾添加(append)一條新的規(guī)則
-I 在指定鏈中插入(insert)一條新的規(guī)則,默認(rèn)在第一行添加
-D 刪除(delete)指定鏈中的某一條規(guī)則,可以按規(guī)則序號和內(nèi)容刪除
需要確保鏈中的存在這條規(guī)則,否則報錯
-R 替換(replace)指定鏈中的某一條規(guī)則,可以按規(guī)則序號和內(nèi)容替換
-E 重命名用戶定義的鏈,不改變鏈本身
-F 清空(flush),不影響-P默認(rèn)規(guī)則
-N 新建(new-chain)一條用戶自己定義的規(guī)則鏈
-X 刪除指定表中用戶自定義的規(guī)則鏈(delete-chain)
-P 設(shè)置指定鏈的默認(rèn)策略(policy)
iptables -P INPUT DROP ==>修改默認(rèn)規(guī)則為DROP
-Z 將所有表的所有鏈的字節(jié)和數(shù)據(jù)包計數(shù)器清零
-[vn]L 列出(list)指定鏈中所有的規(guī)則進(jìn)行查看,輸出樣式可追加:
-n 使用數(shù)字形式(numeric)顯示輸出結(jié)果
-v 查看規(guī)則表詳細(xì)信息(verbose)的信息
例:iptables -nvL
匹配條件
1.按網(wǎng)絡(luò)接口匹配
- -i eth0
匹配是否從網(wǎng)絡(luò)接口eth0進(jìn)來 - -o eth0
匹配是否往網(wǎng)絡(luò)接口eth0流出 - -s <ip>
匹配是來自<ip>的數(shù)據(jù) ip: 來源地址 - -d <ip>
匹配目的地址
2.按網(wǎng)絡(luò)協(xié)議匹配
- -p [tcp|udp|icmp]
匹配網(wǎng)絡(luò)協(xié)議
3.按源端口匹配
- --sport <源端口號> 注: 可以是端口,也可是范圍
例: --sport 1000 匹配源端口是1000的數(shù)據(jù)包
--sport 1000:3000 匹配源端口是1000~3000的數(shù)據(jù)包(含1000,3000) - --dport <目的端口號>
動作
- ACCEPT 允許數(shù)據(jù)包通過
- DROP 直接丟棄數(shù)據(jù)包,不給任何回應(yīng)信息
- REJECT 拒絕數(shù)據(jù)包通過,必要時會給數(shù)據(jù)發(fā)送端一個響應(yīng)的信息。
- MASQUERADE 偽裝一個公網(wǎng)IP
- SNAT 源地址轉(zhuǎn)換
- 例: iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT 1.1.1.1 => 將內(nèi)網(wǎng)ip轉(zhuǎn)換成公網(wǎng)ip(路由器原理)
- LOG在/var/log/messages文件中記錄日志信息,然后將數(shù)據(jù)包傳遞給下一條規(guī)則
附加模塊 -m
- 按包狀態(tài)匹配 : -m mac --mac-source <mac地址>
- 按來源mac地址匹配
- 按包速率: -m limit --limit <速率>
- 多端口匹配: -p tcp -m multiport --dport <ip1>,<ip2>,<ip3> 必須與-p一起使用