定義: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:返回 在自定義鏈執行完畢後使用返回,來返回原規則鏈。