天天看點

iptables基本知識

iptables基本知識

防火牆可分為

  網絡防火牆

 主機防火牆

大緻定義:工作在網絡或主機邊緣,對于進出的封包,根據事先定義好的規則做檢查,将那些能夠比對到的封包做出相應處理的元件。元件既可以是硬體也可以是軟體。

Iptables是應用程式

  Iptables:編寫規則的工具(檢查文法送往netfilter)

  Netfilter:網絡過濾器,核心中工作在TCP/IP網絡協定棧上的架構。工作在核心中的架構,真正起到防範功能作用的

PS:要防火的關鍵是規則,而不是這些元件,元件根據規則來進行工作

路由發生時刻:

  1、 封包進入本機,判斷目标位址

  2、 封包離開本機,判斷經由那個接口發出

Hooks function 鈎子函數,即5個鍊

  Prerouting:進入本機後,路由發生前

  Input:到達本機内部

  Output:由本機發出

  Forwar:由本機轉發

  postrouting:路由功能發生之後,離開本機之前

iptables基本知識

封包流向經由的位置

  1、 到本機内部:prerouting、input

  2、 由本機發出:output、postrouting

  3、 由本機轉發:prerouting、forward、postrouting

規則的功能(表)

  過濾 filter

  位址轉換 NAT

  mangle 修改封包中的某些資訊(除位址之外)

  raw 關閉NAT表上啟用的連接配接追蹤功能

每個表發生在不同的鍊上

  filter:input、output、forward

  NAT:prerouting、output、postrouting

  mangle:prerouting、input、forward、output、postrouting

  RAW:prerouting、output

Iptables:每個鈎子上可放置N條規則,對應每個鈎子上的多條規則稱之為鍊(chain)

 每個功能由多個鍊組成,稱之為表

鍊:鍊上的規則次序即為檢查次序,是以有一定規律

  同類規則,比對小的放上面

  不同規則,比對封包幾率較大的放上面

  應該設定預設規則

Iptables的四表五鍊添加規則時的考量點

  實作的功能,判斷在那個表上

  封包的流向及經由路由,判斷在哪個鍊上

功能優先級,從高到低

  raw --> mangle --> NAT --> filter

規則的組成部分:封包的比對條件,比對如何處理

  比對條件:基本比對、擴充比對

  如何處理:内建機制處理、自定義處理機制(自定義的鍊)

Iptables是規則管理工具,能夠自動檢查規則文法

規則和鍊有計數器:

  pkts:由規則或鍊比對到的資料封包個數

  bytes:由規則或鍊比對到的資料封包大小總和

通過iptables指令生成規則送往netfilter

規則通過核心接口送往核心,是以會立即生效,但不會永久生效

期望永久生效,需要儲存在配置檔案中,此檔案需開機自動加載或手動加載

文法格式:

  iptables [-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET

TARGET:

  -j jump跳轉目标,内置:

  ACCEPT 允許資料報通過

  DROP 直接丢棄

  REJECT 拒絕并發包通知對方

  -t TABLE:

預設是filter,四表:filter nat mangle raw

SUBCOMMAND:

鍊:

  -F flush,清空指定表上指定鍊的規則,省略鍊名時,則清空指定表上所有規則

  -N new,建立一個使用者自定義鍊,自定義鍊隻能作為預設鍊的引用

  -X drop,删除使用者自定義的鍊(内容為空),内置鍊不可删除

  -Z zero,清空計數器,每個鍊上的每條規則都有計數器,記錄比對到的封包數量、大小

  -P policy,設定預設規則,當所有規則都無法比對或比對到無法做出有效處理機制,則按預設規則處理

  -E rename,自定義鍊重命名,已經被引用的自定義鍊無法被重命名

規則:

  -A append,鍊尾追加規則

  -I insert,在指定位置插入一條規則

  -D delete,删除指定規則

  -R replace,替換指定規則

檢視:

  -L list,列對外連結上所有規則

  -n numeric,以數字格式顯示位址和端口号,即不反解

  -v verbose,詳細格式,顯示規則的詳細情況,包括計數器等

  -vv 更加詳細

  -vvv 比vv還要詳細

  --line-numbers 顯示規則編号

  -x exactly 顯示計數器的精确值

pkts bytes target prot opt in out source destination

  pkts 比對到的封包數量

  bytes 比對到的所有的資料報大小之和

  target 處理目标,(目标可以是自定義的鍊)

  port 協定{tcp udp icmp}

  opt 可選項

  in 資料報流入接口

  out 資料報流出接口

  source 源位址

  destination 目的位址

CRETERIA比對條件

檢查IP首部,檢查tcp、udp或ICMP首部

基于擴充機制,也可以基于額外的機制,如連接配接追蹤

注意:可以同時制定多個條件,意味着同時比對多個條件才行

 比對條件:

    通用比對

    擴充比對

      隐式擴充

      顯示擴充

通用比對:

  -s 檢查封包中的源IP位址; ! 取反

  -d 檢查封包中的目标IP位址

  -p 檢查封包中的協定,TCP UDP ICMP

  -i 資料封包流入接口,通常用在prerouting input forward鍊上

  -o 資料封包流出接口,通常用在forward output postrouting鍊上

擴充比對:使用iptables的子產品實作擴充檢查機制

 隐式擴充:如果在通用比對上使用-p 指定協定的話,那麼-m選項指明擴充則變得可有可無

  TCP

    --dport 目标端口

    --sport 源端口

    --tcp-flags LIST1 LIST2 ;LIST1是要檢查的标志位,LIST2是LIST1中出現過的,其标志位為1,其他的全都為0

如:--tcp-flags syn,ack,fin,rst syn 意思就是檢查syn,ack,fin,rst幾個标志位,其中syn要為1,ack,fin,rst全都為0。即第一次建立連接配接,有一個專門選項—syn

    --syn 三次握手低第一次,即建立連接配接

  UDP

    --dport

    --sport

  ICMP

    --icmp-type

      8 echo request 請求

      0 echo reply 響應

如:

iptables -A INPUT -s 192.168.202.0/24 -d 172.20.1.10 -p tcp --dport 80 -j ACCEPT

  顯示擴充 必須指明使用的擴充機制

    -m 子產品名稱,-m必須寫

      檢視有哪些子產品可用rpm -ql iptables ,消息.so結尾的都是擴充子產品

   multiport擴充:以離散端口比對多端口,最多可同時制定15個端口

  專用選項:

    --sports --source-ports PORT[,PORT…]

    --dports --destination-ports PORT[,PORT…]

    -ports PORT[,PORT…]

iptables -A INPUT -d 172.20.1.10 -p tcp -m multiport --dports 80,22,443 -j ACCEPT

  iprange擴充:指定連續的IP範圍,用于比對非整個網絡

    --src-range IP[-IP]

    --dst-range IP[-IP]

iptables -A INPUT -d 172.20.1.10 -p tcp –dport 23 -m multiport --src-range 192.168.1.50-192.168.1.100 -j REJECT

  string擴充:檢查封包中出現的字元串,與給定的字元串做比對

  字元串比對檢查算法:kmp bm

    --algo {kmp|bm} 指定算法

    --string “STRING” 搜尋指定字元串

   --hex-string “HEX_STRING” 編碼成16進制的字元

iptables -I OUTPUT -s 172.20.1.10 -p tcp --dport 80 -m string –string “sex” --algo kmp -j REJECT

  time擴充:基于時間區間做通路控制

    --datestart YYYY[-MM][-DD][hh[:mm[:ss]]]

    --datestop YYYY[-MM][-DD][hh[:mm[:ss]]]

    --timestart

    --timestop

    --weekdays DAY1,[DAY2,…]

iptables -I INPUT -d 172.20.1.10 -p tcp –dport 80 -m time --timestart 08:00 --timestop 18:00 --weekdays Mon,Tue,Wed,Thu,Fir -j REJECT

  connlimit擴充:基于連接配接數做限制,對每個IP能夠發起的并發連接配接數做限制(單個IP)

  專用選項:

    --connlimit-above [N]

如:(限制連接配接1.10 的22端口4個連接配接,如果到5個或超過5個連接配接則被拒絕)

iptables -I INPUT -d 172.20.1.10 -p tcp --dport 22 -m connlimit --connlimit-above 5 -j REJECT

  limit擴充:基于發包速率做限制

    --limit N[/second|/minute|/hour|/day] 每個時刻最多幾個包

    --limit-burst N 限制某一時刻突發量最多有幾個包(像一個令牌桶)

如:每分鐘允許10個ping包,突發5個包被允許,超出的按别的規則或預設政策

iptables -I INPUT -d 172.20.1.10 -p icmp --icmp-type 8 -m limit 10/minute –limit-burst 5 -j ACCEPT

實作的效果是:前四個包正常,從第五個開始,我們每6秒鐘收到一個正常的回應

  stat擴充:啟用連接配接追蹤模闆記錄連接配接,并根據連接配接比對連接配接狀态的擴充

  啟用連接配接追蹤功能之前,隻能稱之為簡單的包過濾防火牆,開啟了連接配接追蹤之後則成為帶狀态監測的包過濾防火牆

  connection template 連接配接追蹤模闆,用于記錄各連接配接及相關狀态,基于IP實作,與協定無關,通過倒計時的方式删除條目

  記錄連接配接的狀态:

    NEW:建立連接配接,連接配接追蹤模闆中無相對應的條目時,用戶端第一次送出請求

    ESTABLISHED:NEW狀态之後,距追蹤模闆中的條目删除之前所進行的通信都是established狀态

    RELATED:相關的連接配接。入FTP協定中指令連接配接與資料連接配接就是相關聯的連接配接

    INVALIED:無法識别的狀态

    --stat {NEW|ESTABLISHED|RELATED|INVALIED}

iptables -I INPUT -d 172.20.1.10 -p tcp -m multiport --dports 21,22,80,443 -m stat --stat NEW,ESTABLISHED -j ACCEPT

iptables -I OUTPUT -s 172.20.1.10 -m stat --stat RELATED,ESTABLISHED -j ACCEPT

啟用stat子產品連接配接追蹤,占用的是系統核心的記憶體,可以存放最大條目數:

  /proc/sys/net/nf_conntrack_max

調整連接配接追蹤模闆中存放的最大條目數

  echo “N” > /proc/sys/net/nf_conntrack_max或sysctl -w net.nf_conntrack_max=”N”

永久生效則需要寫入/etc/sysctl.conf

檢視目前追蹤的所有連接配接

  cat /proc/net/nf_conntrack

lsmod指令可以顯示已經加載到核心中的所有子產品資訊,如果不想啟用連接配接追蹤,則需要解除安裝子產品(modprobe)

不同協定或連接配接類型預設的追蹤時長

  /porc/sys/net/netfilter/*

放行被動模式下的FTP服務

  1、裝載核心子產品

    modprobe nf_conntrack_ftp (ftp的追蹤子產品)

  2、放行請求封包

    放行入站請求端口為21的請求封包

    放行所有狀态為ESTABLISHED和RELATED的入站封包

  3、放行出站封包

    放行所有狀态為ESTABLISHED的出站封包

一旦啟用連接配接追蹤功能nf_conntrack子產品則會自動裝載;不過nf_conntrack_ftp子產品需手動裝載

儲存iptables規則

1、service iptables save

  /etc/sysconfig/iptables(預設儲存位置)

2、iptables-save > /PATH/TO/SOMEFILE

載入規則

1、service iptables reload

2、iptables-relstore < /PATH/TO/SOMEFILE

上一篇: css基本知識

繼續閱讀