iptables從入門到應用

iptables從入門到應用mysql

wKiom1lH6gjwDzT1AAA1YKJJ6uU865.png

 1、簡介linux

 1.一、是什麼?nginx

    iptables是隔離主機以及網絡的工具,經過本身設定的規則以及處理動做對數據報文進行檢測以及處理。 web

 1.二、發展史算法

    防火牆的發展史就是從牆到鏈再到表的過程,也便是從簡單到複雜的過程。爲何規則愈來愈多,由於互聯網愈來愈不安全了,全部防火牆的的規則也愈來愈複雜。防火的工具變化以下:
sql

    ipfirewall(牆)-->ipchains(鏈條)--iptables(表)安全

    2.0版內核中,包過濾機制是ipfw,管理工具是ipfwadm;bash

    2.2 版內核中,包過濾機制ipchain,管理工具是ipchains;網絡

    2.4版及之後的內核中,包過濾機制是netfilter,管理工具iptables。併發

 2、原理

  2.一、組成

    linux的防火牆由netfilter和iptables組成。用戶空間的iptables制定防火牆規則,內核空間的netfilter實現防火牆功能。

    netfilter(內核空間)位於Linux內核中的包過濾防火牆功能體系,稱爲Linux防火牆的「內核態」。

    iptables(用戶空間)位於/sbin/iptables,是用來管理防火牆的命令的工具,爲防火牆體系提供過濾規則/策略,決定如何過濾或處理到達防火牆主機的數據包,稱爲Linux防火牆的「用戶態」。

 2.二、實現方式

    Linux系統的防火牆功能是由內核實現的,包過濾防火牆工做在TCP/IP的網絡層。


wKioL1lH7qfQp-fvAAA2J5u4FOw073.png

    用戶空間的iptables制定相應的規則策略控制內核空間的netfilter處理相應的數據訪問控制。

     iptables有四表五鏈(其實有五表,是後來加進來的),四表分別是下圖的的raw,mangle,nat,filter表。五鏈分別是PREROUTING,INPUT,OUTPUT,FORWARD,POSTROUTING鏈。表有什麼用?鏈又有什麼用呢?其實表決定了數據報文處理的方式,而鏈則決定了數據報文的流經哪些位置。

    你能夠從圖中看出規則表的優先級:raw-->mangle-->nat-->filter。


wKioL1lH7uaimCIyAABOvTNqFYc093.png   

    四表的介紹如圖(ps:因爲如今有五表了,因此我把另外一個表也加了進來)。

    wKiom1l65nKgFui_AABFeGNtpAk587.png

    五鏈的介紹如圖。

    wKiom1l65tOQ8bdKAABnzYuun1Y634.png

    製做防火牆規則一般有兩種基本策略。一是黑名單策略;二是白名單策略。

    黑名單策略指沒有被拒絕的流量均可以經過,這種策略下管理員必須針對每一種新出現的***,制定新的規則,所以不推薦。

    白名單策略指沒有被容許的流量都要拒絕,這種策略比較保守,根據須要,逐漸開放,目前通常都採用白名單策略,推薦。

 2.三、數據包過濾匹配流程

     如圖,咱們能夠分析數據報文進入本機後應用了哪些表規則以及鏈規則,根據表規則和鏈規則咱們分析數據包的過濾匹配流程。

    好比咱們制定一個filter表的規則,filter表決定是否放行數據包經過,那若是經過,則必須經由INPUT鏈流入數據包,INPUT鏈是處理入站數據的,若是沒問題,繼續放行到用戶空間,再經由OUTPUT鏈將數據包流出。

    那若是是nat表的規則,nat表主要實現轉發功能,數據包先經由PREROUTING鏈進行路由選擇,選擇好路線後再經由FORWARD鏈轉發數據,而後再進行一個路由選擇,最後由POSTROUTING鏈流出數據。

    其餘表規則的數據包流程不作介紹,圖中介紹的十分詳盡。

wKiom1lH70jiFhIxAACKxJ40ZPQ037.png

3、iptables命令

wKiom1lH8R2zoWlrAAAyHhrQ3CE712.png

 3.一、制定iptables表規則思路

    (1)選擇一張表(此表決定了數據報文處理的方式)

    (2)選擇一條鏈(此鏈決定了數據報文的流經哪些位置)

    (3)選擇合適的條件(此條件決定了對數據報文作何種條件匹配)

    (4)選擇處理數據報文的動做,制定相應的防火牆規則。

 3.二、基本語法結構

   結構:

    iptables [ -t 表名 ] 管理選項 [ 鏈名 ] [ 條件匹配 ] [ -j 目標動做或跳轉 ]

   幾個注意事項:

    不指定表名時,默認表示filter表,不指定鏈名時,默認表示該表內全部鏈,除非設置規則鏈的缺省策略,不然須要指定匹配條件。

wKioL1l8Yd2QEFI7AAA4OBtHvM8697.png

 3.三、詳細語法

iptables [-t table] {-A|-C|-D} chain rule-specification
  iptables [-t table] -I chain [rulenum] rule-specification
  iptables [-t table] -R chain rulenum rule-specification
  iptables [-t table] -D chain rulenum
  iptables [-t table] -S [chain [rulenum]]
  iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
  iptables [-t table] -N chain
  iptables [-t table] -X [chain]
  iptables [-t table] -P chain target
  iptables [-t table] -E old-chain-name new-chain-name
    rule-specification = [matches...] [target]
   match = -m matchname [per-match-options]
   target = -j targetname [per-target-options]

 3.四、語法結構解析

  語法結構解析以下。

  注意:本導圖是按照iptables語法結構的使用的前後順序製做的,若是按照此種方式可以很快地幫助咱們記憶以及掌握iptables規則的制定。

 wKioL1lH8S6znmfeAAAd7Eu3avA994.png

  3.4.一、表

    其實表的介紹,在上面已經介紹了。這裏咱們能夠再來回顧如下五張表的功能。

wKiom1l65nKgFui_AABFeGNtpAk587.png

  3.4.二、管理選項

    管理選項分爲三大類,分別爲:規則的顯示,規則鏈管理以及規則管理。咱們能夠經過man幫助查看iptables的用法,大多選項用法都見名知意。

    wKioL1l678rAFq6fAAAXSal1rvo583.png

     鏈管理

    -N, --new-chain chain:新建一個自定義的規則鏈;
    -X, --delete-chain [chain]:刪除用戶自定義的引用計數爲0的空鏈;
    -F, --flush [chain]:清空指定的規則鏈上的規則;
    -E, --rename-chain old-chain new-chain:重命名鏈;
    -Z, --zero [chain [rulenum]]:置零計數器;
      注意:每一個規則都有兩個計數器
      packets:被本規則所匹配到的全部報文的個數;
      bytes:被本規則所匹配到的全部報文的大小之和;
    -P, --policy chain target 制定鏈表的策略(ACCEPT|DROP|REJECT)

    規則管理


    -A, --append chain rule-specification:追加新規則於指定鏈的尾部; 
    -I, --insert chain [rulenum] rule-specification:插入新規則於指定鏈的指定位置,默認爲首部;
    -R, --replace chain rulenum rule-specification:替換指定的規則爲新的規則;
    -D, --delete chain rulenum:根據規則編號刪除規則;
    -D, --delete chain rule-specification:根據規則自己刪除規則;

    規則顯示      

     -L, --list [chain]:列出規則;
     -v, --verbose:詳細信息; 
     -vv 更詳細的信息
     -n, --numeric:數字格式顯示主機地址和端口號;
     -x, --exact:顯示計數器的精確值,而非圓整後的數據;
     --line-numbers:列出規則時,顯示其在鏈上的相應的編號;
     -S, --list-rules [chain]:顯示指定鏈的全部規則;

 3.4.三、鏈

    五鏈的功能如圖所示。   

wKiom1l65tOQ8bdKAABnzYuun1Y634.png

 3.4.四、條件匹配

    條件匹配分爲基本匹配和擴展匹配,擴展匹配又分爲顯示匹配和隱式匹配。

    基本匹配的特色是:無需加載擴展模塊,匹配規則生效;擴展匹配的特色是:須要加載擴展模塊,匹配規則方可生效。

    隱式匹配的特色:使用-p選項指明協議時,無需再同時使用-m選項指明擴展模塊以及不須要手動加載擴展模塊;  

    顯示匹配的特色:必須使用-m選項指明要調用的擴展模塊的擴展機制以及須要手動加載擴展模塊。

    基本匹配的使用選項及功能

-p 指定規則協議,tcp udp icmp all
-s 指定數據包的源地址,ip hostname
-d 指定目的地址
-i 輸入接口
-o 輸出接口                                              
! 取反

    隱式匹配的使用選項及功能    

-p tcp
  --sport 匹配報文源端口;能夠給出多個端口,但只能是連續的端口範圍 
  --dport 匹配報文目標端口;能夠給出多個端口,但只能是連續的端口範圍
  --tcp-flags mask comp 匹配報文中的tcp協議的標誌位
-p udp
  --sport 匹配報文源端口;能夠給出多個端口,但只能是連續的端口範圍
  --dport 匹配報文目標端口;能夠給出多個端口,但只能是連續的端口範圍
--icmp-type
  0/0: echo reply 容許其餘主機ping
  8/0:echo request 容許ping其餘主機

    顯式匹配的使用選項及功能

    顯式匹配的選項特別多,因此使用思惟導圖的方式梳理一下。咱們可使用命令:man iptables-extensions查看具體用法。

wKioL1l683GTswz4AAAsOymPziY855.png

    1.multiport(多端口)

     開放多個端口。

wKioL1l69AmAOZ92AAAhoutC95Y516.png

  1. 例子:
            iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT
            iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT

    2.iprange(ip範圍)

     以連續地址塊的方式來指明多IP地址匹配條件。

  1. 例子:
        iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT
        iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT

    3.time(時間範圍)

     指定時間範圍。

  1.  例子:
            iptables -A INPUT -d 172.16.100.7 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j ACCEPT
            iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 901 -j ACCEPT

    4.string(字符串)

     對報文中的應用層數據作字符串模式匹配檢測(經過算法實現)。

  1.     --algo {bm|kmp}:字符匹配查找時使用算法
        --string "STRING": 要查找的字符串
        --hex-string 「HEX-STRING」: 要查找的字符,先編碼成16進制格式

    5.connlimit(鏈接限制)

     根據每一個客戶端IP做併發鏈接數量限制。

    --connlimit-upto n  鏈接數小於等於n時匹配
    --connlimit-above n 鏈接數大於n時匹配

    6.limit(速率限制)

     報文速率控制。  

    7.state(狀態)

     追蹤本機上的請求和響應之間的數據報文的狀態。狀態有五種:INVALID, ESTABLISHED, NEW, RELATED, UNTRACKED.

wKiom1l69pPSccqrAABEsH6cAKw223.png

  1.  法則:

  2.         一、對於進入的狀態爲ESTABLISHED都應該放行;

  3.         二、對於出去的狀態爲ESTABLISHED都應該放行;

  4.         三、嚴格檢查進入的狀態爲NEW的鏈接;

  5.         四、全部狀態爲INVALIED都應該拒絕;  


 3.4.五、處理動做

    處理動做有內置的處理動做和自定義的處理動做。自定義的處理動做用的比較少,所以只介紹內置的處理動做。

ACCEPT:容許數據包經過

DROP:直接丟棄數據包,不給出任何迴應信息

REJECT:拒絕數據包經過,必要時會給數據發送端一個響應信息

LOG:在日誌文件中記錄日誌信息,而後將數據包傳遞給下一條規則

QUEUE: 防火牆將數據包移交到用戶空間

RETURN:防火牆中止執行當前鏈中的後續Rules,並返回到調用鏈 

REDIRECT:端口重定向  

MARK:作防火牆標記

DNAT:目標地址轉換

SNAT:源地址轉換   
                                                
MASQUERADE:地址假裝

 3.五、保存和載入規則

    CentOS6和CentOS7保存和載入的規則稍有差別。

  3.5.一、CentOS 7

    保存:iptables-save > /PATH/TO/SOME_RULE_FILE   
   重載:iptabls-restore < /PATH/FROM/SOME_RULE_FILE    
    -n, --noflush:不清除原有規則    
    -t, --test:僅分析生成規則集,但不提交

  3.5.二、CentOS 6

 

    保存規則:service iptables save   #保存規則於/etc/sysconfig/iptables文件,覆蓋保存;   
   重載規則:service iptables restart #默認重載/etc/sysconfig/iptables文件中的規則   
   配置文件:/etc/sysconfig/iptables-config

4、iptables的實踐應用

    iptables十分重要與網絡的安全息息相關,咱們理所應當掌握。不過咱們大可沒必要死記硬背,必定結合實際項目,多多練習,效果纔會更好。

 4.一、iptables經常使用規則

    1.放行sshd服務

 iptables -t filter -A INPUT -s 192.168.0.0/24 -d 192.168.0.1 -p tcp --dport 22 -j ACCEPT
 iptables -t filter -A OUTPUT -s 192.168.0.1  -p tcp --sport 22 -j ACCEPT
  1.   2.放行httpd/nginx服務

 iptables -I OUTPUT -s 192.168.0.1 -p tcp --sport 80 -j ACCEPT
 iptables -I INPUT -d 192.168.0.1 -p tcp --dport 80 -j ACCEPT
  1.  3.放行本機端的流入流出

  iptables -A  INPUT  -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
  iptables -A  OUTPUT  -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT
  #不放行本機的流入與流出,訪問本機的httpd服務,網頁會出現Error establishing a database connection。
  1.  4.限制ping 192.168.0.1主機的數據包數,平均2/s個,最多不能超過3個

iptables -A INPUT -i ens33 -d 192.168.0.1 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT

 4.二、如何配置iptables

a) 1. 刪除現有規則
iptables -F
b) 2. 配置默認鏈策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
c) 3. 容許遠程主機進行SSH鏈接
iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT
d) 4. 容許本地主機進行SSH鏈接
iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT
e) 5. 容許HTTP請求
iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT

 4.三、iptables初始化腳本

#!/bin/bash
 
echo &quot;Setting firewall . . . . start&quot;
 
#--------RULESET INIT----------#
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
#------------------------------#
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#------------------------------#
#zabbix
iptables -A INPUT -p tcp --destination-port 10050 -j ACCEPT
iptables -A INPUT -p udp --destination-port 10051 -j ACCEPT
iptables -A OUTPUT -p tcp --destination-port 10050 -j ACCEPT
iptables -A OUTPUT -p udp --destination-port 10051 -j ACCEPT
#for web
iptables -A INPUT -p tcp --destination-port 21 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
iptables -A OUTPUT -p tcp --destination-port 80 -j ACCEPT
iptables -A OUTPUT -p tcp --destination-port 21 -j ACCEPT
#for mysql
iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT
iptables -A OUTPUT -p tcp --destination-port 3306 -j ACCEPT
#for mail
iptables -A INPUT -p tcp --destination-port 25 -j ACCEPT
iptables -A OUTPUT -p tcp --destination-port 25 -j ACCEPT
iptables -A OUTPUT -p tcp --destination-port 110 -j ACCEPT
#for ssh
iptables -A INPUT -p tcp -s any/0 --destination-port 22 -j ACCEPT
iptables -N icmp_allowed
iptables -A icmp_allowed -p ICMP --icmp-type 11 -j ACCEPT
iptables -A icmp_allowed -p ICMP --icmp-type 8 -j ACCEPT
iptables -A icmp_allowed -p ICMP -j DROP
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
/etc/init.d/iptables save
相關文章
相關標籤/搜索