1. 程式人生 > >五分鐘徹底學會iptables防火牆--技術流ken

五分鐘徹底學會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

 

顯示擴充套件1state

作用:根據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

 

顯示擴充套件2multiport

作用:對連續或者離散的埠做匹配

選型:

        --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

 

顯示擴充套件3iprange

作用:用於對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

 

顯示擴充套件4limit

作用:限速

        --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 

 

顯示擴充套件5connlimit

作用:限制一個客戶端可以同時與當前主機建立幾個連結

       [!] --connlimit-above n

 

1. 限制每個IP可以同時登入5ssh

 

[[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