iptable 防火牆的原理及其應用詳解

1、iptables百科名片linux

     iptables 是與最新的 3.5 版本 Linux 內核集成的 IP 信息包過濾系統。若是 Linux 系統鏈接到因特網或 LAN、服務器或鏈接 LAN 和因特網的代理服務器, 則該系統有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火牆配置。web

防火牆在作信息包過濾決定時,有一套遵循和組成的規則,這些規則存儲在專用的信 息包過濾表中,而這些表集成在 Linux 內核中。在信息包過濾表中,規則被分組放在咱們所謂的鏈(chain)中。而netfilter/iptables IP 信息包過濾系統是一款功能強大的工具,可用於添加、編輯和移除規則。數據庫

2、防火牆  瀏覽器

防火牆指的是一個由軟件和硬件設備組合而成、在內部網和外部網之間、專用網與公共網之間的界面上構造的保護屏障.。工做於網絡或主機邊緣,對進出本網絡或本主機的網絡報文按照事先設定好的匹配規則進行檢查,對可以被規則所匹配的報文按照規則定義的處理機制進行處理的組件。安全

     防火牆是一種計算機硬件和軟件的結合,使Internet與Intranet之間創建起一個安全網關(Security Gateway),從而保護內部網免受非法用戶的侵入,防火牆主要由服務訪問規則、驗證工具、包過濾和應用網關4個部分組成,防火牆就是一個位於計算機和它所鏈接的網絡之間的軟件或硬件。該計算機流入流出的全部網絡通訊和數據包均要通過此防火牆。bash

     在網絡中,所謂「防火牆」,是指一種將內部網和公衆訪問網(如Internet)分開的方法,它其實是一種隔離技術。服務器

3、防火牆類型網絡

  一、網絡層防火牆:網絡層防火牆可視爲一種 IP 封包過濾器,運做在底層的TCP/IP協議堆棧上。ssh

  二、應用層防火牆:應用層防火牆是在 TCP/IP 堆棧的「應用層」上運做,使用瀏覽器時所產生的數據流或是使用 FTP 時的數據流都是屬於這一層。tcp

  三、數據庫防火牆:數據庫防火牆是一款基於數據庫協議分析與控制技術的數據庫安全防禦系統。基於主動防護機制,實現數據庫的訪問行爲控制、危險操做阻斷、可疑行爲審計。

  四、***檢測系統:NIDS,HIDS

     NIDS設備:snort  HIDS設備:OSSEC

  五、***防護系統:IPS

4、iptables 防火牆的版本

  一、linux/內核版本2.0: ipfirewall  簡陋

  二、linux/內核版本2.2: ipchains  單鏈

  三、linux/內核版本2.4: iptables   多鏈如表

5、iptables 規則的功能及其屬性

防火牆自己不能」防火「,而是靠內核規定的規則來」防火「的

一、 iptables  四個內置的表

  1)、filter : 過濾

  2)、nat : 地址轉換

  3)、mangle :  修改報文屬性

  4)、raw: 原始未加工報文

二、iptables 五個檢查點 即五條內置鏈

四個表放於五個點間,內置鏈放不一樣的規則,且內置鏈不可刪除

  規則必須在5條內置鏈上才能實現。

  1)、PREROUTING : 路由前  

  2)、INPUT: 輸入

  3)、FORWARD :  轉發

  4)、OUTPUT :   輸出

  5)、POSTROUTING :  路由後

三、規則的屬性

  1)、網絡層的協議屬性

     ip報文

  2)、傳輸層的協議屬性

     tcp報文  、 udp報文

     icmp報文 (icmp協議是工做在網絡層與傳輸層之間的協議)

6、iptables 的相關命令選項

 一、小寫字母選項:用來匹配標準及定義標準屬性

-t:{filter|nat|mangle|raw}指定表的類型;

  -n:數字格式顯示IP和PORT;

  --line-number:顯示鏈中規則的行號;

  -x:顯示精確值,不作單位換算;

  -v:顯示詳細信息

# iptables -L  -t filter -n --line-number -v(-vvv)
# iptable -L -n -v

2、大寫字母選項:實現特定功能的子命令

  1)、管理鏈的子命令

  -L:列出相關鏈及其規則的列表

-F:清空鏈

# iptables -t filter -F
# iptables -F

-P:爲指定鍵設定默認策略

# iptables -t filter -P INPUT ACCEPT
# iptables -t filter -P FORWARD
# iptables -t filter -P OUTPUT ACCEPT

-N:新建一條自定義鏈,只能附加在5條內置鏈上

# iptables -N  FILTER_WEB

-X:刪除自定義的空鏈

自定義鏈要先清空才能刪

  -Z:計算器清空

  -E:重命名自定義

  2)、管理規則

  -A:append 附加

  -I[n]:插入爲第n條

  -D[n]:刪除第n條

  -R[n]:替換第n條

# iptables -A INPUT ...
# iptables -I INPUT 1 ...
# iptables -D INPUT 2 ...
# iptables -R INPUT 1 ...


7、編寫規則語法

  1、語法格式

iptables [-t  表]  大寫選項子命令  [規則號]  鏈名  匹配標準  -j  目標

   二、目標 即 -j(管理機制)所處理的目標

          DROP: 丟棄

          REJECT:  拒絕

          ACCEPT:  接受

          RETURN:  返回

          REDIECT:  端口重定向

          DNAT:  目標轉換

          SNAT:  源地址轉換

          LOG:  記錄日誌

          MARK:  打標,標記通過的防火牆

自定義鏈 ,要返回的

   三、匹配標準

      1)、通用匹配

-s | --src | --source:  [!] IP/NETMASK  源地址

         -d | --dst | --destination:  [!] IP/NETMASK  目標地址

         -j :跳轉目標,處理機制

# iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.20.1 -j ACCEPT

          -i  incoming_interface :  指定數據報文流入接口

         -o outing_interface :  指定數據報文的流出

     2)、擴展匹配

         ① 隱含擴展

         ② 顯式擴展

  四、規則保存

     1)、service iptables save

     2)、iptables-save > /path/to/iptables.rules  

                 保存至/etc/sysconfig/iptables

  五、生效規則文件中的規則

             iptables-restore < /path/to/ipables.rules

8、擴展匹配詳解

  擴展匹配:要使用「-m  擴展名稱」 來引用,而每個擴展模塊通常都會有本身特有的專用選項,這些選項中有些是必備的。

    一、隱含擴展

       1)、- p tcp

             - p  tcp --sport

             - p  tcp --dport

             - p  --tcp-flags  跟兩個參數 (要檢查的標記   必須爲1的標記)

             --syn = --tcp-flags SYN,ACK,RST,FIN SYN

eg: 放行對web服務器的訪問

# iptables -A INPUT -d 172.16.20.1 -p tcp --dport 80 -j ACCEPT
  //別人的請求能進來
# iptables -A OUTPUT -d 172.16.20.1 -p tcp --sport 80 -j ACCEPT
  //本身的響應能出去

      2)、- p udp

             - p  udp  --sport

             - p  udp  --dport

eg:放行對DNS的訪問

# iptables -A INPUT -d 172.16.20.1 -p udp --dport 53 -j ACCEPT
  //別人的請求能進來
# iptables -A OUTPUT -s 172.16.20.1 -p udp --sport 53 -j ACCEPT
  //本身的響應能出去
# iptables -A OUTPUT -s 172.16.20.1 -p udp --dport 53 -j ACCEPT
  //本身的請求能出去
# iptables -A INPUT -d 172.16.20.1 -p udp --sport 53 -j ACCEPT
  //別人的響應能進來

       3)、- p icmp

             --icmp-type

            請求:--icmp-type 8

            響應:--icmp-type 0

    二、顯式擴展

      ① -m state  --state  指定狀態  

--state NEW, ESTABLISHED, RELATED, INVALID

                  NEW :新建的規則匹配

                  ESTABLISHED  : 確認的規則匹配

# iptables -I INPUT 1 -s 172.16.0.0/16 -d 172.16.20.1 -p tcp --dport 22
-m state --state NEW,ESTABLISHED -j ACCEPT

                 

                  RELATED  :  相關的規則匹配

                  INVALID  :  無效的規則匹配

      ② -m multiport      多端口匹配,能夠指定15個之內的離散端口

            --source-ports

            --destination-ports

            --ports

      ③-m iprange   指定匹配的IP地址範圍

            --src-range from[-to]

            --dst-range

      ④ -m limit   指定速率限定

            --limit

            --limit-burst

      ⑤ -m string   指定字符串匹配

            --string "STRING"

            --algo {bm|kmp}

      ⑥ -m time   指定時間範圍

            --datestart    --datestop

            --timestart    --timestop

            --weekdays

            --monthdays

      ⑦  -m connlimit   鏈接數的控制

            -- connlimit-above [num]

      ⑧ 利用iptables的recent模塊來抵禦DOS***: 22端口,創建一個列表,

                   保存有全部訪問過指定的服務的客戶端IP

          -m recent  

            -- set --name SSH

9、地址轉發

nat :network address translation

 一、能夠做爲源地址的私有IP地址

   c類:192.168.0.0/24, 192.168.254.0/24

   b類:172.16.0.0/16,  172.31.0.0/16

   a類 : 10.0.0.0/8

二、SNAT:源地址轉發

   代理內部客戶端訪問外部網絡,在iptables的POSTROUTING上

      -j SNAT --to-soure  IP

      -j  MASQUERADE

三、DANT :目標地址轉發

   將內部服務器發佈至外部網絡,在iptables的PREROUTING上

     -j DNAT --to-destination  IP:port

10、iptables 實例解析

    INPUT和OUTPUT默認策略爲DROP;  

一、限制本地主機的web服務器在週一不容許訪問;新請求的速率不能超過100個每秒;web服務器包含了admin字符串的頁面不容許訪問;web服務器僅容許響應報文離開本機;

# iptables -I INPUT 1 -m state --state ESTABLISHED -j ACCEPT
# iptables -A INPUT -d 172.16.20.1 -p tcp --dport 80 -m time --weekdays Tue,Wed,Thu,Fri,Sat,Sun -m limit --limit 100/sec -m string --algo kmp ! --string "admim" -m state --state NEW -j ACCEPT
# iptables -I OUTPUT 1 -m state --state ESTABLISHED -j ACCEPT

二、在工做時間,即週一到週五的8:30-18:00,開放本機的ftp服務給172.16.0.0網絡中的主機訪問;數據下載請求的次數每分鐘不得超過5個;

# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.20.1 -p tcp --dport 21 -m time --weekdays Mon,Tue,Wed,Thu,Fri --timestart 08:30:00 --timestop 18:00:00 -j ACCEPT
# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.20.1 -p tcp -m state --state RELATED -m limit --limit 5/min -j ACCEPT

三、開放本機的ssh服務給172.16.x.1-172.16.x.100中的主機,x爲你的座位號,新請求創建的速率一分鐘不得超過2個;僅容許響應報文經過其服務端口離開本機;

# iptables -A INPUT -m iprange --src-range 172.16.20.1-172.16.20.100 -m limit --limit 2/min -p tcp --dport 22 -d 172.16.100.1 -i eth0 -m state --state NEW -j ACCEPT

四、拒絕TCP標誌位所有爲1及所有爲0的報文訪問本機;

# iptables -N clean_in
# iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
# iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
# iptables -A clean_in -d 172.16.20.1 -j RETURN
# iptables -I INPUT 1 -d 172.16.20.1 -j clean_in

五、容許本機ping別的主機;但不開放別的主機ping本機;

# iptables -A OUTPUT -s 172.16.20.1 -p icmp --icmp-type 8 -j ACCEPT
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT
相關文章
相關標籤/搜索