目前市面上比較常見的有3、4層的防火牆,叫網絡層的防火牆,還有7層的防火牆,其實是代理層的網關
對於TCP / IP協議的七層模型來講,第三層是網絡層,三層的防火牆會在這層對源地址和目標地址進行檢測。但是對於七層的防火牆,不管你源端口或者目標端口,源地址或者目標地址是什麼,都將對你所有的東西進行檢查。所以,對於設計原理來講,七層防火牆更加安全,但是這卻帶來了效率更低。所以市面上通常的防火牆方案,都是兩者結合的。而又由於我們都需要從防火牆所控制的這個口來訪問,所以防火牆的工作效率就成了用戶能夠訪問數據多少的一個最重要的控制,配置的不好甚至有可能成為流量的瓶頸。
控制流量的5個位置
- 內核空間中:從一個網絡接口進來,到另一個網絡接口去的
- 數據包從內核流入用戶空間的
- 數據包從用戶空間流出的
- 進入/離開本機的外網接口
- 進入/離開本機的內網接口
其實前三個位置已經基本上能將路徑徹底封鎖了,但是為什麼已經在進出的口設置了關卡之後還要在內部卡呢?由於數據包尚未進行路由決策,還不知道數據要走向哪裡,所以在進出口是沒辦法實現數據過濾的。所以要在內核空間裡設置轉發的關卡,進入用戶空間的關卡,從用戶空間出去的關卡。那麼,既然他們沒什麼用,那我們為什麼還要放置他們呢?因為我們在做NAT和DNAT的時候,目標地址轉換必須在路由之前轉換。所以我們必須在外網而後內網的接口處進行設置關卡。
這五個位置也被稱為五個鉤子函數(鉤子函數),也叫五個規則鏈。
- PREROUTING (路由前)
- INPUT (數據包流入口)
- 向前 (轉發管卡)
- OUTPUT(數據包出口)
- POSTROUTING(路由後)
這是Netfilter的規定的五個規則鏈,任何一個數據包,只要經過本機,必將經過這五個鏈中的其中一個鏈。
防火牆的策略
防火牆策略一般分為兩種,一種叫“通”策略,一種叫“堵”策略:
通策略:
默認門是關著的,必須要定義誰能進。
堵策略:
大門是洞開的,但是你必須有身份認證,否則不能進。
所以我們要定義,讓進來的進來,讓出去的出去,所以通,是要全通,而堵,則是要選擇。當filter過濾的功能,而定義地址轉換的功能的則是nat選項。為了讓這些功能交替工作,我們制定出了“表”這個定義,來定義、區分各種不同的工作功能和處理方式。
我們現在用的比較多個功能有3個:
- filter 定義允許或者不允許的
- nat 定義地址轉換的
- mangle功能:修改報文原數據
對於filter來講一般只能做在3個鏈上:INPUT ,向前 ,OUTPUT
對於nat來講一般也只能做在3個鏈上:PREROUTING ,OUTPUT ,POSTROUTING
而mangle則是5個鏈都可以做:PREROUTING,INPUT,向前,OUTPUT,POSTROUTING
iptables定義規則的方式比較複雜:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
格式: iptables [-t table] COMMAND chain CRETIRIA -j ACTION -t table :3个filter nat mangle COMMAND:定义如何对规则进行管理 chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的 CRETIRIA:指定匹配标准 -j ACTION :指定如何进行处理 iptables -L -n -v#查看定义规则的详细信息 |
鏈管理命令(這都是立即生效的)
-P :設置默認策略的(設定默認門是關著的還是開著的)
1 2 3 |
//默认策略一般只有两种 iptables -P INPUT (DROP|ACCEPT) 默认是关的/默认是开的 |
比如:
1 2 3 |
iptables -P INPUT DROP //这就把默认规则给拒绝了。并且没有定义哪个动作,所以关于外界连接的所有规则包括Xshell连接之类的,远程连接都被拒绝了。 |
-F: 閃,清空規則鏈的(注意每個鏈的管理權限)
1 2 3 |
iptables -t nat -F PREROUTING iptables -t nat -F 清空nat表的所有链 |
-ñ:NEW 支持用戶新建一個鏈
1 |
iptables -N inbound_tcp_web //表示附在tcp表上用于检查web的。 |
-X: 用於刪除用戶自定義的空鏈
1 2 3 |
//使用方法跟-N相同,但是在删除之前必须要将里面的链给清空昂了 -E:用来Rename chain主要是用来给用户自定义的链重命名 -E oldname newname |
-同:清空鏈,及鏈中默認規則的計數器的(有兩個計數器,被匹配到多少個數據包,多少個字節)
1 |
iptables -Z :清空 |
規則管理命令
1 2 3 4 5 6 7 8 9 10 11 |
-A:追加,在当前链的最后新增一个规则 -I num : 插入,把当前规则插入为第几条。 -I 3 :插入为第三条 -R num:Replays替换/修改第几条规则 //格式:iptables -R 3 ………… -D num:删除,明确指定删除第几条规则 |
查看管理命令 “-L”
附加子命令
1 2 3 4 5 6 7 8 9 10 11 12 13 |
-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。 -v:显示详细信息 -vv -vvv :越多越详细 -x:在计数器上显示精确值,不做单位换算 --line-numbers : 显示规则的行号 -t nat:显示所有的关卡的信息 |
詳解匹配標準
1.通用匹配:源地址目標地址的匹配
-小號:指定作為源地址匹配,這裡不能指定主機名稱,必須是IP
IP | IP / MASK | 0.0.0.0/0.0.0.0
而且地址可以取反,加一個“!”表示除了哪個IP之外
-ð:表示匹配目標地址
-p:用於匹配協議的(這裡的協議通常有3種,TCP / UDP / ICMP)
-我的eth0:從這塊網卡流入的數據
流入一般用在INPUT和PREROUTING上
-Ø為eth0:從這塊網卡流出的數據
流出一般在OUTPUT和POSTROUTING上
2.擴展匹配
2.1隱含擴展:對協議的擴展
-p TCP :TCP協議的擴展。一般有三種擴展
–DPORT XX-XX:指定目標端口,不能指定多個非連續端口,只能指定單個端口,比如
–DPORT 21 或者 –DPORT 21-23 (此時表示21,22,23)
–運動:指定源端口
–TCP-fiags:TCP的標誌位(SYN,ACK,END,PA,RST,URG)
對於它,一般要跟兩個參數:
1.檢查的標誌位
2.必須為1的標誌位
–tcpflags SYN,ACK,結束,RST SYN = –SYN
表示檢查這4個位,這4個位中syn必須為1,其他的必須為0。所以這個意思就是用於檢測三次握手的第一次包的。對於這種專門匹配第一包的SYN為1的包,還有一種簡寫方式,叫做–SYN
--p udp的:UDP協議的擴展
–DPORT
–運動
-p ICMP:icmp數據報文的擴展
–ICMP類型:
回波請求(請求回顯),一般用8 來表示
所以 –ICMP類型 8 匹配請求回顯數據包
echo-reply (響應的數據包)一般用0來表示
2.2顯式擴展(-m)
擴展各種模塊
-米多端口:表示啟用多端口擴展
之後我們就可以啟用比如 –dports 21,23,80
六:詳解-j ACTION
常用的ACTION:
下降:悄悄丟棄
一般我們多用DROP來隱藏我們的身份,以及隱藏我們的鍊錶
拒絕:明示拒絕
接受:接受
custom_chain:轉向一個自定義的鏈
DNAT
SNAT
MASQUERADE:源地址偽裝
REDIRECT:重定向:主要用於實現端口重定向
標記:打防火牆標記的
返回:返回
在自定義鏈執行完畢後使用返回,來返回原規則鏈。
本文由 落格博客 原創撰寫:落格博客 » iptabls詳解
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/541.html