linux網絡_防火牆-iptables基礎

定義:web

防火牆:是用於實現Linux下訪問控制的功能。shell

分類:硬件或者軟件防火牆。安全

三、4層的防火牆,叫網絡層的防火牆;7層的防火牆,即代理層的網關。網絡

TCP/IP的七層模型,第三層是網絡層,三層的防火牆會在這層對源地址和目標地址進行檢測。tcp

對於七層的防火牆,無論你源端口或者目標端口,源地址或者目標地址是什麼,都將對你全部的東西進行檢查。函數

因此,對於設計原理來說,七層防火牆更加安全,可是這卻帶來了效率更低。工具

不管是在哪一個網絡中,防火牆工做的地方必定是在網絡的邊緣。而咱們的任務就是須要去定義到底防火牆如何工做,即防火牆的策略,規則,以達到讓它對出入網絡的IP、數據進行檢測。設計

原理:代理

工做在用戶空間中,定義規則的工具,自己並不算是防火牆。它們定義的規則,可讓在內核空間當中的netfilter來讀取。而放入內核的地方必需要是特定的位置,必須是tcp/ip的協議棧通過的地方。而這個tcp/ip協議棧必須通過的地方,能夠實現讀取規則的地方就叫作 netfilter.(網絡過濾器)接口

在內核空間中選擇了5個位置:

    1.內核空間中:從一個網絡接口進來,到另外一個網絡接口去的

    2.數據包從內核流入用戶空間的

    3.數據包從用戶空間流出的

    4.進入/離開本機的外網接口

    5.進入/離開本機的內網接口

這五個位置也被稱爲五個鉤子函數(hook functions),也叫五個規則鏈。
1.PREROUTING (路由前)
2.INPUT (數據包流入口)
3.FORWARD (轉發網卡)
4.OUTPUT(數據包出口)
5.POSTROUTING(路由後)
       NetFilter規定的五個規則鏈,任何一個數據包,只要通過本機,必將通過這五個鏈中的其中一個鏈。  
 

用的比較多個功能有3個:

1.filter 定義容許或者不容許的

2.nat 定義地址轉換的 

3.mangle功能:修改報文原數據

filter來說通常只能作在3個鏈上:INPUT ,FORWARD ,OUTPUT
nat來說通常也只能作在3個鏈上:PREROUTING ,OUTPUT ,POSTROUTING
mangle則是5個鏈均可以作:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

規則的寫法:

 iptables定義規則的方式比較複雜:
 格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION
 -t table :3個filter nat mangle
 COMMAND:定義如何對規則進行管理
 chain:指定你接下來的規則究竟是在哪一個鏈上操做的,當定義策略的時候,是能夠省略的。 5個鏈
 CRETIRIA:指定匹配標準
 -j ACTION :指定如何進行處理

 好比:不容許172.16.0.0/24的進行訪問。
 iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP
 固然你若是想拒絕的更完全:
 iptables -t filter -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j REJECT

 iptables -L -n -v#查看定義規則的詳細信息
 

詳解COMMAND:

1.鏈管理命令(這都是當即生效的)
-P :設置默認策略的(設定默認門是關着的仍是開着的)
默認策略通常只有兩種
iptables -P INPUT (DROP|ACCEPT)  默認是關的/默認是開的
好比:
iptables -P INPUT DROP 這就把默認規則給拒絕了。而且沒有定義哪一個動做,因此關於外界鏈接的全部規則包括Xshell鏈接之類的,遠程鏈接都被拒絕了。
        -F: FLASH,清空規則鏈的(注意每一個鏈的管理權限)
    iptables -t nat -F PREROUTING
    iptables -t nat -F 清空nat表的全部鏈
        -N:NEW 支持用戶新建一個鏈
            iptables -N inbound_tcp_web 表示附在tcp表上用於檢查web的。
        -X: 用於刪除用戶自定義的空鏈
            使用方法跟-N相同,可是在刪除以前必需要將裏面的鏈給清空昂了
        -E:用來Rename chain主要是用來給用戶自定義的鏈重命名
            -E oldname newname
         -Z:清空鏈,及鏈中默認規則的計數器的(有兩個計數器,被匹配到多少個數據包,多少個字節)
            iptables -Z :清空
 
2.規則管理命令
         -A:追加,在當前鏈的最後新增一個規則
         -I num : 插入,把當前規則插入爲第幾條。
            -I 3 :插入爲第三條
         -R num:Replays替換/修改第幾條規則
            格式:iptables -R 3 …………
         -D num:刪除,明確指定刪除第幾條規則
        
3.查看管理命令 「-L」
 附加子命令
 -n:以數字的方式顯示ip,它會將ip直接顯示出來,若是不加-n,則會將ip反向解析成主機名。
 -v:顯示詳細信息
 -vv
 -vvv :越多越詳細
 -x:在計數器上顯示精確值,不作單位換算
 --line-numbers : 顯示規則的行號
 -t nat:顯示全部的關卡的信息
 
五:詳解匹配標準

1.通用匹配:源地址目標地址的匹配
 -s:指定做爲源地址匹配,這裏不能指定主機名稱,必須是IP
IP | IP/MASK | 0.0.0.0/0.0.0.0
並且地址能夠取反,加一個「!」表示除了哪一個IP以外
 -d:表示匹配目標地址
 -p:用於匹配協議的(這裏的協議一般有3種,TCP/UDP/ICMP)
 -i eth0:從這塊網卡流入的數據
流入通常用在INPUT和PREROUTING上
 -o eth0:從這塊網卡流出的數據
流出通常在OUTPUT和POSTROUTING上
        
2.擴展匹配
2.1隱含擴展:對協議的擴展
    -p tcp :TCP協議的擴展。通常有三種擴展
--dport XX-XX:指定目標端口,不能指定多個非連續端口,只能指定單個端口,好比
--dport 21  或者 --dport 21-23 (此時表示21,22,23)
--sport:指定源端口
--tcp-fiags:TCP的標誌位(SYN,ACK,FIN,PSH,RST,URG)
    對於它,通常要跟兩個參數:
1.檢查的標誌位
2.必須爲1的標誌位
--tcpflags syn,ack,fin,rst syn   =    --syn
表示檢查這4個位,這4個位中syn必須爲1,其餘的必須爲0。因此這個意思就是用於檢測三次握手的第一次包的。對於這種專門匹配第一包的SYN爲1的包,還有一種簡寫方式,叫作--syn
    -p udp:UDP協議的擴展
        --dport
        --sport
    -p icmp:icmp數據報文的擴展
        --icmp-type:
echo-request(請求回顯),通常用8 來表示
因此 --icmp-type 8 匹配請求回顯數據包
echo-reply (響應的數據包)通常用0來表示
                  
2.2顯式擴展(-m)
     擴展各類模塊
      -m multiport:表示啓用多端口擴展
      以後咱們就能夠啓用好比 --dports 21,23,80
                  
        
六:詳解-j ACTION

 經常使用的ACTION:  DROP:悄悄丟棄 通常咱們多用DROP來隱藏咱們的身份,以及隱藏咱們的鏈表  REJECT:明示拒絕  ACCEPT:接受 custom_chain:轉向一個自定義的鏈  DNAT  SNAT  MASQUERADE:源地址假裝  REDIRECT:重定向:主要用於實現端口重定向  MARK:打防火牆標記的  RETURN:返回 在自定義鏈執行完畢後使用返回,來返回原規則鏈。  

相關文章
相關標籤/搜索