網絡防范技術:防火牆和IDS/IPS
0.總體結構
本次作業屬於哪個課程 | 網絡攻防實踐 |
---|---|
這個作業要求在哪里 | 網絡安全防范技術 |
我在這個課程的目標是 | 學習網絡攻防相關技術和原理 |
這個作業在哪個具體方面幫助我實現目標 | 了解網絡安全防范技術,學習防火牆和入侵檢測技術 |
1.實踐內容
首先梳理第六章網絡安全防范技術的原理內容,本章從網絡安全模型出發(后面的技術緊緊圍繞模型展開),主要介紹了防火牆技術(防御技術)和網絡入侵檢測技術(檢測技術)。分為以下幾個部分開展原理內容的梳理。
- 安全模型
- 網絡安全防范技術與系統
- 網絡檢測技術與系統
安全模型
- 靜態安全模型:對網絡進行風險分析,制定相應的安全策略,然后采取安全技術作為防護措施,主要針對固定、靜態的威脅和環境弱點。
- PDR安全模型:基於閉環控制理論的時間動態可適應網絡安全模型,以經典的網絡安全不等式P>D+R(保護、檢測、響應)為本質基礎,並提出安全性可量化和可計算的觀點。
- P2DR安全模型:基於PDR安全模型提出,增加了Policy分析制定安全策略,並以此為核心,所有的防護、檢測、響應都是依據安全策略實施的。
網絡安全防范技術與系統
1.防火牆技術及產品
-
定義:防火牆指的是置於不同的網絡安全域之間,對網絡流量或訪問行為實施訪問控制的安全組件或設備,達到保護特定網絡安全域免受非法訪問和破壞的安全目標。
-
功能:
- 檢查控制進出網絡的流量。
- 防止脆弱或不安全的協議和服務。
- 防止內部網絡信息的外泄。
- 對網絡存取和訪問進行監控審計。
- 強化網絡安全策略並集成其他安全防御機制。
-
不足:
- 先天:無法防范包括來自網絡內部的安全威脅、通過非法外聯的網絡攻擊和計算機病毒傳播的傳播。
- 技術瓶頸:無法防范包括針對開放服務安全漏洞的滲透攻擊、針對網絡客戶端程序的滲透攻擊和隱蔽通道進行通信的特洛伊木馬或僵屍網絡。
-
技術:
- 包過濾技術:在路由功能基礎上進行擴展,通過對網絡層和傳輸層包頭信息的檢查,根據用戶定義的安全策略規則集,確定是否應該轉發該數據包(簡單、安全功能有限)。
- 基於狀態檢測的包過濾技術:也稱動態包過濾。除了使用靜態規則進行安全進行安全策略匹配,還進行數據包的網絡連接的上下文關系探測,來確定是否允許通信。這種技術相比較傳統的包過濾技術安全性更高,數據合法性得到了更有效的保障(對網絡性能有一定的影響)。
- 代理技術:允許客戶端通過代理與網絡服務進行非直接的連接,也稱“網絡代理”。主要是客戶端與代理服務器連接,代理服務器再與目標服務器連接。代理技術包括應用層代理(工作在應用層)、電路級代理(工作在傳輸層)和NAT代理(工作在網絡層)等。
-
部署方法:
- 包過濾路由器:帶有包過濾防火牆功能的路由器。
- 雙宿主堡壘主機:應用代理網關作為雙宿主堡壘主機。
- 屏蔽主機:堡壘主機和包過濾的結合。
- 屏蔽子網:在屏蔽主機的基礎上增加第二道包過濾路由器。
2.Linux開源防火牆netfilter/iptables介紹
這部分的內容詳細說起來比較復雜,下面只做簡要介紹,並推薦兩個博客,分別為iptables詳解和iptables命令詳解和舉例。一個從理論方面的介紹,一個是介紹iptables的命令。
-
簡介:iptables是運行在用戶空間的防火牆配置工具,通過控制運行在Linux內核空間的netfilter模塊,來管理網絡數據包的處理和轉發(最新已經有ip6tables用於ipv6)。
-
規則:規則是用戶預定義的,也是我們常說的防火牆規則,配置防火牆的主要工作就是添加、修改和刪除這些規則。由一個目標和很多匹配組成。匹配如interface(e.g. eth0)、協議類型、源IP/端口、目的IP/端口等。目標是用戶自定義的鏈、一個內置的特定目標或者是一個目標擴展,如ACCEPT、DROP、REJECT、SNAT、DNAT等。
-
鏈:鏈是順序執行規則的編排方式,在復雜的網絡環境中,管理員需求這種可控的、有序執行的規則應用方式。iptables 提供了5條鏈:INPUT鏈、OUTPUT鏈、FORWARD鏈、路由前鏈(Pre-Routing)、路由后鏈(Post-Routing)。
-
表:表的本質就是規則集的組織形式。iptables提供了以下5種表:filter表(過濾)、nat表(地址轉換)、mangle表(包修改)、raw表、security表(強制訪問)。
下面介紹下iptables的指令
說明 | 指令 |
---|---|
制定iptables表 | iptables [-t 表名] 管理選項 [鏈名] [條件匹配] [-j 目標動作或轉發] 思路:選表->選鏈->選條件->選動作 |
規則啟動 | systemctl enable iptables.service systemctl start iptables.service |
保存和加載規則 | iptables-save > /etc/sysconfig/iptables systemctl reload iptables |
查看規則 | iptables -nvL [--line-numbers] [-t 表名] [鏈名] |
添加規則 | iptables -A INPUT -s 192.168.1.5 -j DROP |
修改規則 | iptables -R INPUT 2 -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT |
當然還有很多其他的指令包括指令選項,用到再查,參考上面給的博客或者書上的內容。
網絡檢測技術與系統
1.入侵檢測技術
- 評估指標:檢測率(系統捕獲到的攻擊行為與全部攻擊行為比值)和誤報率(對正常行為的誤報數與全部報警數的比值)。
- 技術類型:特征檢測(匹配特征庫)、異常檢測(檢測與正常用戶在統計方面的差別)。二者通常結合使用,提高入侵檢測系統的整體檢測性能。同時,基於這兩種技術,也可以對入侵檢測系統進行分類。
- 入侵防御系統:也叫內嵌式入侵檢測,即對檢測到的異常行為或者與特征庫匹配的行為直接進行阻斷,斷開訪問。
2.snort基本介紹
- 簡介:Snort是一個強大的網絡入侵檢測系統。它具有實時數據流量分析和記錄IP網絡數據包的能力,能夠進行協議分析,對網絡數據包內容進行搜索/匹配,可以檢測各種不同的攻擊方式,對攻擊進行實時報警等。
- 四大模塊:數據包嗅探模塊、預處理模塊(用相應的插件來檢查原始數據包)、檢測模塊(檢測引擎依據預先設置的規則檢查數據包)、報警/日志模塊(經檢測引擎檢查后的Snort數據輸出)。
- 三種工作模式:嗅探模式(從網絡上讀取數據包,常用命令
snort -dev
)、數據包記錄模式(把數據包記錄到硬盤上,常用命令snort -b
)、網絡入侵檢測模式(載入規則庫才能工作,Snort並不記錄所有捕獲的包,而是將包與規則對比,僅當包與某個規則匹配的時候,才會記錄日志或產生報警)。 - 分析一個規則實例:
alert tcp !192.168.0.1/24 any ->any 21 (content:"USER";msg: "FTP Login";)
alert
表示規則動作為報警。- tcp表示協議類型為TCP協議。
!192.168.0.1/24
表示源IP地址不是192.168.0.1/24。- 第一個
any
表示源端口為任意端口。 ->
表示發送方向操作符。- 第二個
any
表示目的IP地址為任意IP地址,21表示目的端口為21。 content:"USER"
表示匹配的字符串為“USER”。msg:"FTPLogin"
表示報警信息為“FTPLogin”。- 此外,還有一個雙向操作符
<>
,它使Snort對這條規則中,兩個IP地址/端口之間的數據傳輸進行記錄/分析。
2.實踐過程
實踐一:防火牆配置
任務:配置Linux平台上的iptables,完成如下功能並測試
- 過濾ICMP數據包,使主機不接受ping包。
- 只允許特定IP地址訪問主機的某一網絡服務,而其他IP地址無法訪問。
Solution
首先我們以SEED Ubuntu作為服務器,利用Kali訪問SEED Ubuntu,Kali作為信任主機,Linux MetaSploitable作為不可信任主機。IP地址如下。
機器 | IP地址 |
---|---|
Kali Linux | 192.168.3.19 |
Linux MetaSploitable | 192.168.3.22 |
SEED Ubuntu | 192.168.3.24 |
1. 首先在SEED Ubuntu上通過iptables -L
查看規則,發現都是默認規則。
2. 通過指令iptables -A INPUT -p icmp -j DROP
指令使得主機不接受icmp的數據包。指令詳解:-A
是追加一條規則,INPUT
表示數據包入口(規則),-p
用於匹配協議,-j
用於指定如何處理(ACTION)。更多的指令參照上面理論部分給的鏈接。
3. 此時通過Kali ping
SEED Ubuntu,發現是ping
不通的,並且可以查看規則,發現多了一條icmp針對任何位置不允許訪問的規則。
4. 最后別忘了使用iptables -F
刪除自定義規則。至此過濾ICMP數據包實踐完成。
下面開始第二個實踐,只允許Kali訪問SEED Ubuntu的telnet服務。
1. 首先,我們確定兩台機器都可以進行telnet登陸。
2. 接下來使用iptables -P INPUT DROP
指令拒絕一切的數據包流入(修改的是默認規則-P
),此時應該兩台電腦都無法進行訪問。
3. 使用指令iptables -A INPUT -p tcp -s 192.168.3.19 -j ACCEPT
開啟192.168.3.19
對本機的tcp服務。並用iptables -L
查看規則。
4. 此時我們發現Kali是可以正常訪問telnet服務的,但是MetaSploitable卻是無法訪問的。
5. 最后別忘了執行iptables -F
和iptables -P INPUT ACCEPT
兩條指令恢復之前的狀態。
實踐二:Snort
任務:使用Snort對給定的pcap文件進行入侵檢測,並對檢測出的攻擊進行說明
Solution
關於Snort的一些實踐在第四章已經實踐過,這里用的文件還是第四章的listen.pcap
文件。
1. 首先利用指令snort -r listen.pacp -c /etc/snort/snort.conf -K ascii
對listen.pacp
進行入侵檢測,其他的指令第四周都已經詳細介紹了,-K ascii
主要是為了指定輸出log文件的編碼為ASCII(默認為binary)。
2. 查看輸出,我們可以看到檢測出的數據包大部分為TCP數據包。
3. 在/var/log/snort/
目錄下可以查找到alert
文件,這個文件即輸出的日志文件,通過vim打開可以發現這個攻擊是nmap發起的,當然還有很多其他的信息,譬如源地址、目的地址等等。
實踐三:分析蜜網網關的防火牆和IDS/IPS配置規則。
任務:說明蜜網網關是如何利用防火牆和入侵檢測技術完成其攻擊數據捕獲和控制需求
- 上述腳本是如何實現蜜網的數據捕獲和數據控制?
- 獲取IPTables的實際規則列表、Snort和Snort_inline的實際執行參數。
- 蜜網網關開機之后,防火牆、NIDS、NIPS是如何啟動的?
- Snort規則是如何自動升級的?
1. 數據控制:通常數據控制一般包括兩個方面,一個是防火牆對數據的控制,還有一個是IPS對異常數據的限制(snort_inline)。我們稍微看一下其防火牆的文件rc.firewall
(859行代碼,好吧,我也不咋會shell編程,看關鍵部分)。關鍵部分是什么,當然是鏈了。我們可以看下如下的創建了三個鏈,分別是黑名單、白名單、防護名單(FenceList)。所以,大致在上面的功能之上,增加了:
-
防火牆對源地址或者目的地址屬於黑名單的主機,丟棄所有包。
-
對於屬於白名單的主機,接受且不記錄。
-
對於屬於防護名單內的主機,禁止訪問某些不希望被訪問到的主機。
2. 數據捕獲:數據捕獲主要包括:
- 防火牆的日志記錄:記錄的只是簡單的信息如目的地址/端口、源地址/端口、協議、長度等。
- Snort記錄的網絡流。
3. IPTables的實際規則列表:通過指令iptables -t filter -L
來查看規則列表。不難發現,默認的規則入OUTPUT、INPUT、FORWARD都已經被關閉了,取而代之的是一些自定義的規則(包括之前配置Roo的一些參數也反映在規則表上)。
4. Snort實際執行參數:通過vim snortd
打開Snort腳本文件,觀察第一張圖可以看到一開始是一些參數的選項。第二張圖對應的就是實際運行時候的參數了。簡單分析,譬如在指定網卡接口后,如果沒有其他的參數,將按照默認參數運行。如默認不開啟-A
模式,使用默認目錄的config文件(/etc/snort/snort.conf),默認使用eth0、使用二進制模式保存log文件等(了解了Snort的指令之后,這個比較好懂)。
5. Snort_inline實際執行參數:通過vim hw-snort_inline
打開Snort_inline腳本文件,可以觀察到實際運行的參數,以及在最前面定義的參數。我們將前面的變量帶入這個運行指令應該為(-D
表示Daemon模式,-c
表示讀取config文件,-Q
表示使用QUEUE模式,-l
表示輸出log文件的目錄,-t
表示改變程序執行時所參考的根目錄位置):
snort-inline -D -c /etc/snort_inline/snort_inline.conf -Q -l [系統時間命名] -t [目錄]
6. 防火牆、NIDS、NIPS啟動:通過指令chkconfig --list | grep [服務]
來查詢當前服務是不是開啟的。chkconfig
命令主要用於檢查,設置系統的各種服務。我們發現防火牆和NIPS(snort_inline)是跟隨系統啟動的,並且開機自動配置剛才的腳本文件。NIDS是需要手動啟動的。
7. Snort規則如何自動升級:在/etc
目錄下使用指令vim honeywall.conf
打開honeywall配置文件,這個里面可以看到很多東西,譬如我們之前安裝roo時配置的IP地址、譬如白名單黑名單的位置等。同樣我們可以找到snort規則更新的地方。默認是不自動更新的。我們可以看到Oinkmaster字樣,一查,這個果然是個自動更新的軟件。使用方法參考這個簡單的博客吧Oinkmaster使用方法。然后我們在當前目錄下打開oinkmaster.conf
文件,可以看到url也是注釋的,如果你想開啟自動更新,按照上面的博客操作就行啦。
2.學習中遇到的問題及解決
- 問題一:VMware Fusion一打開虛擬機就黑屏卡死
- 問題一解決方案:從網上下載了新的VMware Fusion解決(破解版還是不好用啊)。
- 問題二:電腦截屏失效,換句話說就是其他應用無法訪問我的電腦屏幕,截屏出來就是白色的。
- 問題二解決方案:並沒有找到關於訪問控制的設置,重置了nvram解決的。
- 問題三:電腦再一次死機。
- 問題三解決方案:懷疑是之前換的固態不夠穩?或者是我裝的不夠好?電腦經不起折騰了。老了老了。
- 問題四:實踐做到一半就停電,今天下午好難。
- 問題四解決方案:無盡的等待中。。。。。。。
- 問題五:發布才發現,博客園的markdown不支持latex公式
- 問題五解決方案:不用!!!
3.學習感悟、思考
- 這次實驗整體內容不難,分析內容還是占大多數,本文中的有些分析還是不夠清晰明了,一方面是自己網絡方面的知識不夠系統整體、一方面是關於蜜網網關的資料還是太少。
- 這次實驗下午遇到了好多實驗之外的事情,着實鬧心。