五分鐘徹底學會iptables防火牆--技術流ken
iptables簡介
IPTABLES 是與最新的 3.5 版本 Linux核心整合的 IP 資訊包過濾系統。如果 Linux 系統連線到因特網或 LAN、伺服器或連線 LAN 和因特網的代理伺服器, 則該系統有利於在 Linux 系統上更好地控制 IP 資訊包過濾和防火牆配置。
iptables 元件是一種工具,也稱為使用者空間(userspace),它使插入、修改和除去資訊包過濾表中的規則變得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否則需要下載該工具並安裝使用它。
--摘自360百科
之前已經寫過一篇關於iptables的部落格《iptables實戰案例詳解-技術流ken》,例子雖然非常好,但是總結的還不是很到位。
本篇部落格將詳細講解iptables的使用規則。希望每個人認真讀完本篇部落格都可以讓iptables成為工作中的強盾。
四表五鏈
學習iptables提及最多的無非就是四表五鏈,也許之前你對此早有耳聞,但是沒有真正的研究過。下面這些總結將讓你簡單的記住什麼是四表五鏈。
四表
- filter表 過濾資料包(預設表,最常用)
- Nat表 用於網路地址轉換(IP、埠)
- Mangle表 修改資料包的服務型別、TTL、並且可以配置路由實現QOS
- Raw表 決定資料包是否被狀態跟蹤機制處理
五鏈
- INPUT鏈 進來的資料包應用此規則鏈
- OUTPUT鏈 外出的資料包應用此規則鏈
- FORWARD鏈 轉發資料包時應用此規則鏈
- PREROUTING鏈 對資料包作路由選擇前應用此鏈(所有的資料包進來的時侯都先由這個鏈處理)
- POSTROUTING鏈 對資料包作路由選擇後應用此鏈(所有的資料包出來的時侯都先由這個鏈處理)
每個表中含有如下鏈
iptables使用詳解
iptables的使用格式如上圖所示
table
-t後面跟上你要操作的表
如果不使用-t預設操作的是filter表
-t:指定表名(預設是對filter表進行操作) 有如下四種: -t filter -t nat -t mangle -t raw
command
即需要執行的命令常用命令操作有-A,-I, -D,-F,-L
-A:追加新規則 -D:刪除指定的規則 -I:首部或者指定的位置插入新規則 -F:清空規則 -Z:清空計數器 -P:修改預設規則 -N:自定義一條鏈 -X:刪除自定義的鏈 -E:修改自定義鏈的名字 -L;列舉出iptables中所配置的規則 -n:如果不用n選項,那麼系統會將協議反解為協議名稱,這個過程很慢,該選擇的作用是就用來實現禁止反解為名稱 --line:在行首顯示規則編號 -v:顯示詳細資訊(通常用來看計數器) 注意: 規則中的表名、鏈名要區分大小寫
chain
即鏈,需要指出對哪個表中的哪個鏈進行操作
表名為小寫,鏈名為大寫,嚴格區分大小寫
有如下五種:
INPUT
OUTPUT
FORWARD
PREROUTING
POTROUTING
parameter
即引數,分為通用匹配和擴充套件匹配
擴充套件匹配又分為隱式匹配和顯示匹配
通用匹配
擴充套件匹配
隱式擴充套件
顯式擴充套件
target
即目標動作
ACCEPT: 請求被執行,資料包可以通過
DROP: 認定是一個非法請求,將數包悄悄的丟棄
REJECT: 認定是一個非法請求,禁止資料包同行的(帶有通知機制)
LOG: 將這次客戶端的請求記錄到日誌中
MARK: 標記一個連線
SNAT: 把資料包中的源地址部分替換為指定的IP
DNAT: 修改資料包中的目的IP
iptables簡單常用的操作
1. 設定預設規則
[[email protected] ~]# iptables -P INPUT DROP #設定INPUT鏈預設規則設定為DROP [[email protected] ~]# iptables -P INPUT ACCEPT #設定INPUT鏈預設規則設定為ACCEPT [[email protected] ~]# iptables -P OUTPUT DROP #設定OUTPUT鏈預設規則設定為DROP,如果OUTPUT鏈開啟DROP,相應組合後可防範反彈式木馬 [[email protected] ~]# iptables -P OUTPUT ACCEPT #設定OUTPUT鏈預設規則設定為ACCEPT
2.清空規則
[[email protected] ~]# iptables -t filter -F #清空filter表規則 [[email protected] ~]# iptables -t nat -F #清空nat表規則 [[email protected] ~]# iptables -t mangle -F #清空mangle表規則 [[email protected] ~]# iptables -t raw -F #清空raw表規則
3. 檢視規則鏈
[[email protected] ~]# iptables -L -n --line -v
iptables通用匹配
-s:指定源ip -d:指定目標ip -i:指定進入資料包所經過網絡卡名稱 -o:指定發出資料包所經過網絡卡名稱
1. 指定僅能10.220.5.138可以ping(訪問)本機
[email protected] ~]# iptables -A INPUT -s 10.220.5.138 -j ACCEPT
2.允許所有進入10.220.5.138的流量
[[email protected] ~]# iptables -A INPUT -d 10.220.5.138 -j ACCEPT
3.允許從eth0進入的流量
[[email protected] ~]# iptables -A INPUT -i eth0 -j ACCEPT
iptables擴充套件匹配之隱式匹配
隱式匹配使用-p後面加上協議名稱
-p tcp/udp/icmp
1.對於icmp協議的隱式匹配
格式:
-p icmp --icmp-type
ping資料包協議是icmp協議
type
0:應答包
8:請求包
1.可以從10.220.5.1 ping 其他主機,禁止其他主機ping 10.220.5.1
[[email protected] ~]# iptables -I INPUT -p icmp --icmp-type 0 -d 10.220.5.1 -j ACCEPT [[email protected] ~]# iptables -I INPUT -p icmp --icmp-type 8 -s 10.220.5.1 -j ACCEPT
2.對於tcp協議的隱式擴充套件
-p tcp 選項
選項:
--sport:源埠
--dport:目標埠
--tcp-flags list1 list2:根據tcp包中的標誌位進行匹配
--syn:syn為1,ack,fin都為0,即三次握手的第一次
1.讓所有主機可以訪問10.220.5.1上的網站,但是禁止10.220.5.191訪問網站
[[email protected] ~]# iptables -A INPUT -p tcp --dport 80 -d 10.220.5.1 -j ACCEPT [[email protected] ~]# iptables -I INPUT -p tcp --dport 80 -s 10.220.5.191 -j DROP
2.只允許從10.220.5.182傳送連線httpd請求
[[email protected] ~]# iptables -I INPUT -p tcp -s 10.220.5.182 --tcp-flags syn,ack,fin syn -j ACCEPT
3. 對於udp協議的隱式擴充套件
-p udp --sport|--dport
用的不多。略
iptables擴充套件匹配之顯示匹配
注意:用顯式擴充套件的時候,必須指定擴充套件功能所依賴模組的名稱
指定: -m 副檔名稱 --options-xxx
顯示擴充套件1:state
作用:根據nv_conntrack的記錄來對連線進行規則匹配,是根據連線記錄中的狀態資訊做匹配
狀態:
NEW:表示新的連線請求(syn=1 ack=0 fin=0)
三次握手的第一次
ping請求的第一包
udp通訊的第一個包
ESTABLISHED:連線建立完成狀態下所傳遞的資料包(syn=0 ack=1 fin=0)
INVALID:非法連線
RELATED:相關聯的連線
1.讓所有人都可以訪問web站點
[[email protected] ~]# iptables -A INPUT -m state --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT [[email protected] ~]# iptables -A OUTPUT -m state --state ESTABLISHED -p tcp --sport 80 -j ACCEPT
顯示擴充套件2:multiport
作用:對連續或者離散的埠做匹配
選型:
--sports port[,port|,port:port]...
--dports port[,port|,port:port]...
--ports port[,port|,port:port]...
例子:
--sport 80,22,3306 逗號表示離散
--sport 80:1024 冒號表示連續
--sport 80,22,23:1024 離散和連續的可以寫在一起
1.允許讓10.220.5.182訪問本機的80 22 443 3389 3306埠
[[email protected] ~]# iptables -I INPUT -p tcp -s 10.220.5.182 -m multiport --dports 80,22,443,3389,3306 -j ACCEPT
顯示擴充套件3:iprange
作用:用於對ip地址的範圍做匹配
選項
--src-range
--dst-range
1. 10.220.5.1~10.220.5.100無法訪問web
[[email protected] ~]# iptables -I INPUT -p tcp --dport 80 -m iprange --src-range 10.220.5.1-10.220.5.100 -j DROP
顯示擴充套件4:limit
作用:限速
--limit rate[/second|/minute|/hour|/day]:指示每分鐘/限制最大連線數為
--limit-burst number:指示當總連線數超過xx時,啟動 litmit/minute 限制
1.實現每分鐘可以傳送10個ping包,峰值是7
[[email protected] ~]# iptables -I INPUT -p icmp -m limit --limit 10/minute --limit-burst 7 -j ACCEPT
2.防暴力破解。限制登入22埠的請求的頻率(限制1小時只能嘗試登入ssh5次)
[[email protected] ~]# iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 5/hour --limit-burst 5 -j ACCEPT
顯示擴充套件5:connlimit
作用:限制一個客戶端可以同時與當前主機建立幾個連結
[!] --connlimit-above n
1. 限制每個IP可以同時登入5個ssh
[[email protected] ~]# iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 5 -j DROP [[email protected] ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT