防火牆,用於實現 Linux 下訪問控制的功能;安全
三、4 層的防火牆,叫網絡層防火牆;網絡
7 層的防火牆,代理層防火牆;tcp
對於 TCP/IP 的七層模型,第三層爲網絡層,三層的防火牆會在這層對源地址和目標地址進行檢測,對於七層的防火牆,無論源端口或者目標端口,源地址或者目的地址是什麼,都將對全部的東西進行檢測;函數
七層防火牆更加安全,可是帶來的效率更低,全部通常都是二者結合;工具
一、iptables 的發展代理
iptables 的前身是 ipfirewall,這是一個做者從 freeBSD 上移植過來的,可以工做在內核中,對數據包進行檢測的一款簡易訪問控制工具;接口
iptables 能夠將規則組成一個列表,實現絕對詳細的訪問控制功能;ip
iptables 是工做在用戶空間中,定義規則的工具,自己並不算是防火牆,它們定義的規則,可讓在內核空間當中的 netfilter 來讀取,而且實現讓防火牆工做,而放入內核的地方必須要是特定位置,必需是 tcp/ip 的協議棧通過的地方,而這個 tcp/ip 協議棧必需通過的地方,能夠實現讀取規則的地方叫作 netfilter.(網絡過濾器)路由
iptables 做者一共在內核空間中選擇了 5 個位置:鉤子
一、內核空間中:從一個網絡接口進來,到另外一個網絡接口去的;
二、數據包從內核流入用戶空間的;
三、數據包從用戶空間流出的;
四、進入/離開本機的外網接口;
五、進入/離開本機的內網接口;
二、iptables 的工做機制
上述五個位置被稱爲五個鉤子函數,也叫五個規則鏈:
一、PREROUTING(路由前)
二、INPUT(數據包流入口)
三、FORWARD(轉發管卡)
四、OUTPUT(數據包出口)
五、POSTROUTING(路由後)
這是 NetFilter 規定的五個規則鏈,任何一個數據包,只要通過本機,必將通過這五個鏈中的其中一個鏈;
三、防火牆的策略
防火牆策略通常分爲兩種,一種叫「通」策略,一種叫「堵」策略,當定義策略的時候,要分別定義多條功能,其中:定義數據包中容許或者不容許的策略,filter 過濾的功能,而定義地址轉換的功能的則是 nat 選項,爲了讓這些功能交替工做,制定出「表」這個定義,來定義、區分各類不一樣的工做功能和處理方式;
用的比較多的功能:
一、filter 定義容許或者不容許的
二、nat 定義地址轉換的
三、mangle 功能:修改報文原數據
修改報文原數據就是來修改 TTL 的,可以實現將數據包的元數據拆開,在裏面作標記/修改內容,而防火牆標記,就是靠 mangle 來實現的;
對於 filter 來說通常只能作在 3 個鏈上:INPUT、FORWARD、OUTPUT
對於 nat 來說通常只能作在:PREROUTING、OUTPUT、POSTROUTING
mangle 則 5 個鏈均可以作;
iptables/netfilter 是工做在用戶空間的,可讓規則進行生效;
規則的次序很是關鍵,誰的規則越嚴格,應該放的越靠前,而檢查規則的時候,是按照從上往下的方式進行檢查的;
2、規則的寫法
iptables 命令
3、詳解 COMMAND
一、鏈管理命令(這些都即時生效)
-P:設置默認策略(設置默認門是關着的仍是開着的)
默認策略通常只有兩種
iptables -P INPUT (DROP|ACCEPT) 默認是開着的仍是關着的;
-F:FLASH,清空規則鏈(注意每一個鏈的管理權限)
iptables -t nat -F 清空 nat 表上的全部鏈
-N:NEW 支持用戶新建一個鏈
-E:用來 Rename chain 主要是用來給用戶自定義的鏈重命名
-E oldname newname
-Z:清空鏈,及鏈中默認規則計數器;
二、規則管理命令
-A:追加,在當前鏈的最後新增一個規則
-I num:插入,把當前規則插入爲第幾條
-R num:Replays 替換/修改第幾條規則
-D num:刪除,明確指定刪除第幾條規則
三、查看管理命令 「-L」
-n:以數字的方式顯示 ip,它會將 ip 直接顯示出來,若是不加 -n,則會將 ip 反向解析成主機名;
-v:顯示詳細信息
-vv:越多越詳細
-x:在計數器上顯示精確值,不作單位換算
—line-numbers:顯示規則的行號
-t nat:顯示全部的關卡的信息
4、詳解匹配標準
一、通用匹配:源地址目標地址的匹配
-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:返回
在自定義鏈執行完畢後使用返回,來返回原規則鏈。