iptables其實並非防火牆本體,它實際上是防火牆的客戶端代理,用戶經過iptables這個代理,將用戶的安全設定執行到對應的「安全框架」中,這個「安全框架」纔是真正的防火牆,這個框架的名字叫作netfilter。前端
netfilter位於內核空間之中,是防火牆真正的安全框架,對比之下,iptables則相似linux的bash同樣,是一個命令行工具,位於用戶控件,咱們用這個工具操做真正的安全框架netfilter。linux
netfilter和iptables共同組成了Linux平臺下的包過濾防火牆,與大多數的Linux軟件同樣,這個包過濾防火牆是一款免費軟件,可是其功能足以媲美昂貴的商業防火牆。在Linux操做系統核心內部的netfilter做爲一個數據包處理模塊,它具備不少功能,如:vim
現現在,咱們打開咱們的ubantu虛擬機,咱們會發現咱們所直接面對的並不是書本上寫到的iptables,而是一個明兒UFW的防火牆,那麼UFW又是什麼呢?
剛纔咱們提到了iptables和netfilter到關係,當數據包到達您的計算機時,將根據經過iptables提供給它的規則,將其移交給netfilter子系統進行接受,處理或拒絕。所以,iptables是管理防火牆所需的所有(若是您熟悉的話)。可是,有許多前端能夠簡化任務。
UFW又是什麼呢?
UFW(非複雜防火牆)是iptables的前端,是Ubuntu默認防火牆的配置工具。特別適合於基於主機的防火牆。ufw的開發旨在簡化iptables防火牆的配置,它提供了一種用戶友好的方式來建立基於IPv4或IPv6主機的防火牆。默認狀況下,UFW被禁用。UFW是專爲Ubuntu開發的(但在其餘發行版中可用),而且也能夠從終端進行配置。安全
Gufw是UFW的圖形前端,建議初學者使用。bash
UFW在Ubuntu 8.04 LTS(Hardy Heron)中引入,默認狀況下在8.04 LTS以後的全部Ubuntu安裝中均可以使用。網絡
sudo ufw enable
要檢查UFW的狀態:oracle
sudo ufw status verbose
輸出應以下所示:框架
youruser@yourcomputer:~$ sudo ufw status verbose [sudo] password for youruser: Status: active Logging: on (low) Default: deny (incoming), allow (outgoing) New profiles: skip youruser@yourcomputer:~$
請注意,默認狀況下,拒絕將應用於傳入。有一些例外,能夠在此命令的輸出中找到:tcp
sudo ufw show raw
您還能夠讀取/ etc / ufw中的rules文件(名稱以.rules結尾的文件)。編輯器
sudo ufw disable
咱們在默認狀況下,UFW容許ping請求,保留(icmp)ping請求能夠診斷網絡問題,反而使用隱祕的安全性對於現代解密器腳本可能幾乎沒有實際好處。
爲了禁用ping(icmp)請求,您須要編輯/etc/ufw/before.rules文件中的如下幾行,將ACCEPT改成DROP:
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
有好幾類相似上面的代碼,可是他們都是有區分的,咱們須要修改的是Output分類下單代碼:
Input: 就是復接入本機地址的數據,說白了就是設置別人能夠訪問個人那些端口的鏈。舉一個例子:本機開啓了ftp服務,有一個客戶端鏈接下載制ftp資料,那麼這個鏈接在Input鏈能夠進行控制。
Output:就是從本機出去的數據,就是容許本機出去的端口。例如我能夠在Output鏈設置我能夠訪問那些地址和那些端口。
Forward:是轉發鏈。若是你的機器處於網zhidao關地址,那麼你能夠代理內部網絡的機器上Internet的參數就在這裏設置
修改過UFW的參數後,使用命令sudo ufw reload
重啓防火牆以從新加載設置參數(切勿忘記)。此時咱們再ping虛擬機就已經不通了。
咱們只須要在bash上進行操做便可,不用像上面那樣修改規則文件。
容許特定端口和IP訪問的語句:
sudo ufw allow from <target> to <destination> port <port number> proto <protocol name>
經過特定的端口禁止特定IP訪問的語句:
sudo ufw deny from <ip address> to <protocol> port <port number>
在正常狀況下咱們能夠經過23號端口經過telnet訪問ubantu
但咱們能夠經過防火牆設置,僅容許特定IP訪問特定端口(下圖1)。
咱們使用命令將默認模式設置爲deny(拒絕)sudo ufw default deny
,則咱們的攻擊機使用telnet訪問靶機時,請求會被防火牆過濾掉,攻擊機收不到反饋,就會一直處於等待狀態直到超時(下圖2)。
咱們設置容許kali虛擬機的IP地址訪問23號端口,sudo ufw allow from 192.168.220.4 to any port 23
(每次設定規則都別忘了重啓防火牆來更新規則列表 sudo ufw reload
)而後咱們就發現kali虛擬機又能夠登陸了。
一樣咱們也能夠在容許語句的
sudo ufw allow from <target> to <destination> port <port number> proto <protocol name>
例如咱們僅開放23號端口的UDP,telnet依然沒法訪問,但若是咱們僅開放了TCP協議,則telnet能夠成功訪問。
從技術上,入侵檢測也可分爲兩類:一種基於特徵(誤用檢測)(signature-based),另外一種基於異常狀況(anomaly-based)。
對於基於標識的檢測技術來講,首先要定義違背安全策略的事件的特徵,如網絡數據包的某些頭信息。檢測主要判別這類特徵是否在所收集到的數據中出現。
而基於異常的檢測技術則是先定義一組系統「正常」狀況的數值,如CPU利用率、內存利用率、文件校驗和等(這類數據能夠人爲定義,也能夠經過觀察系統、並用統計的辦法得出),而後將系統運行時的數值與所定義的「正常」狀況比較,得出是否有被攻擊的跡象。這種檢測方式的核心在於如何定義所謂的「正常」狀況。
snort有三種工做模式:嗅探器、數據包記錄器、網絡入侵檢測系統。嗅探器模式僅僅是從網絡上讀取數據包並做爲接二連三的流顯示在終端上。數據包記錄器模式把數據包記錄到硬盤上。網路入侵檢測模式是最複雜的,並且是可配置的。咱們可讓snort分析網絡數據流以匹配用戶定義的一些規則,並根據檢測結果採起必定的動做。
大多數snort規則都寫在一個單行上,或者在多行之間的行尾用/分隔。Snort規則被分紅兩個邏輯部分:規則頭和規則選項。規則頭包含規則的動做,協議,源和目標ip地址與網絡掩碼,以及源和目標端口信息;規則選項部分包含報警消息內容和要檢查的包的具體部分。
以一個規則範例來介紹:
alert tcp any any -> 192.168.220.0/24 111 (content:"|00 01 86 a5|"; msg: "mountd access"😉
第一個括號前的部分是規則頭(rule header),alert tcp any any表示:警報條件-任意源IP從任意端口發往192.168.220.0/24子網的111端口的tcp報文
包含的括號內的部分是規則選項(rule options),content:"|00 01 86 a5|"表示匹配的字符串爲00 01 86 a5。msg: "mountd access"則表示報警信息爲mountd access
規則選項部分中冒號前的單詞稱爲選項關鍵字(option keywords)。
注意,不是全部規則都必須包含規則選項部分,選項部分只是爲了使對要收集或報警,或丟棄的包的定義更加嚴格。組成一個規則的全部元素對於指定的要採起的行動都必須是真的。當多個元素放在一塊兒時,能夠認爲它們組成了一個邏輯與(AND)語句。同時,snort規則庫文件中的不一樣規則能夠認爲組成了一個大的邏輯或(OR)語句,詳見snort指令集
咱們來分析第四周的listen.pcap文件,使用命令和第四周雷同:snort -r listen.pcap -c /etc/snort/snort.conf -K ascii
能夠看出,所有數據包都來自TCP,再去alert警報記錄中看一下警報信息,使用命令cat /var/log/snort/alert
就能夠看到警報信息基原本自172.31.4.178的各個端口,且來包來源都與SNMP網絡管理協議有關
vi /etc/init.d/rc.firewall
命令能夠打開蜜罐網關的防火牆和IP控制表的配置文件(最好用vim編輯器來看,因爲這個蜜罐網關的操做系統太過於古老,用cat來觀看則不能上下翻頁)
首先,打開這個配置文件後咱們看到的大可能是一些系統函數,例如讀取模組函數load_modules()、添加模組函數ad_modules()、建立IPD函數creat_pidfile()、刪除IPD函數delete_pidfile()、清空IP控制表函數flush()等等系統函數,
影響比較大的一些函數例如create_chains()函數中久可一添加黑名單、白名單、受保護的文件列表(fence list)等,同時在這個函數中,還擁有區分數據包類型(tcp、udp、ICMP、other)的功能
在這個文件中,也有咱們上述防火牆的過濾設置功能,能夠過濾接收、拒絕特定的IP、端口、協議的報文,功能十分強大。
關於iptable過濾規則,我只能看文件中的描述,而不能直接調取iptables -t filter -L
命令來看,以下圖(具體緣由待我研究一下):
我去ubantu上又試了一下,命令沒有問題,多是蜜罐網關裝的有問題,回頭再裝一下,在ubantu上調取過濾表以下:
後面還有一部分就不過多羅列了。
** 在bash用命令打開snort的腳本文件vi /etc/init.d/snortd
,看到默認監聽網卡eth0,默認不開啓-A模式,使用默認目錄的config文件,使用二進制模式保存log文件等設定。**
** 使用命令打開snort——inline防護系統的腳本文件vim /etc/init.d/hw-snort_inline能夠看到不少snort運行調控時候咱們用到的一些參數,如顯示當前情況status(),啓停函數等基本系統函數。**
** 使用命令打開snort——inline防護系統vim /etc/snort_inline/snort_inline.conf的配置文件,其中定義了不少端口,如http80端口、oracle1521端口等等,還引入了許多端口掃描和過濾的規則,其主要做用是進行基礎配置。**
** 很顯然咱們的iptables和snort是開機自動啓動的,可是順序在操做系統啓動以後,而NIDS則是須要手動啓動。**
** 咱們看到了honeywall啓動的各類基礎配置,例如開機自啓動、廣播IP等,在圖二中咱們看到了自更新設定爲no,也就snort是不會自動更新的。**