五分鐘徹底學會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. 設置默認規則
[root@ken ~]# iptables -P INPUT DROP #設置INPUT鏈默認規則設置為DROP [root@ken ~]# iptables -P INPUT ACCEPT #設置INPUT鏈默認規則設置為ACCEPT [root@ken ~]# iptables -P OUTPUT DROP #設置OUTPUT鏈默認規則設置為DROP,如果OUTPUT鏈開啟DROP,相應組合後可防範反彈式木馬 [root@ken ~]# iptables -P OUTPUT ACCEPT #設置OUTPUT鏈默認規則設置為ACCEPT
2.清空規則
[root@ken ~]# iptables -t filter -F #清空filter表規則 [root@ken ~]# iptables -t nat -F #清空nat表規則 [root@ken ~]# iptables -t mangle -F #清空mangle表規則 [root@ken ~]# iptables -t raw -F #清空raw表規則
3. 查看規則鏈
[root@ken ~]# iptables -L -n --line -v
iptables通用匹配
-s:指定源ip -d:指定目標ip -i:指定進入數據包所經過網卡名稱 -o:指定發出數據包所經過網卡名稱
1. 指定僅能10.220.5.138可以ping(訪問)本機
root@ken ~]# iptables -A INPUT -s 10.220.5.138 -j ACCEPT
2.允許所有進入10.220.5.138的流量
[root@ken ~]# iptables -A INPUT -d 10.220.5.138 -j ACCEPT
3.允許從eth0進入的流量
[root@ken ~]# 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
[root@ken ~]# iptables -I INPUT -p icmp --icmp-type 0 -d 10.220.5.1 -j ACCEPT [root@ken ~]# 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訪問網站
[root@ken ~]# iptables -A INPUT -p tcp --dport 80 -d 10.220.5.1 -j ACCEPT [root@ken ~]# iptables -I INPUT -p tcp --dport 80 -s 10.220.5.191 -j DROP
2.只允許從10.220.5.182發送連接httpd請求
[root@ken ~]# 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站點
[root@ken ~]# iptables -A INPUT -m state --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT [root@ken ~]# 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端口
[root@ken ~]# 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
[root@ken ~]# 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
[root@ken ~]# iptables -I INPUT -p icmp -m limit --limit 10/minute --limit-burst 7 -j ACCEPT
2.防暴力破解。限制登錄22端口的請求的頻率(限制1小時只能嘗試登錄ssh5次)
[root@ken ~]# 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
[root@ken ~]# iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 5 -j DROP [root@ken ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
五分鐘徹底學會iptables防火墻--技術流ken