Page 1

L I N U X

L A B

IP6TABLES

SNORT

指導老師: 彭學勤老師 楊宏文老師

學生:

林旺聰顧問

林正揚


前言 在 linuxlab 我負責的項目是 ip6tables 與 snort。從 kernel2.4 開始至今, Iptables 是 linux 內建的防火牆。除了可以寫入規則以過濾封包,也可以建立 NAT(Network Address Translation),可以使內部網路的多台電腦共用一個實體 IP 上網。近年來,網路世界逐漸邁向 IPv6,而 ip6tables 成為過濾 IPv6 封包的 防火牆。ip6tables 與 iptables 之間相異之處在於 ip6tables 可支援 IPv6 的 Address/Prefix 設定,其他的設定方式與 iptables 相同。 另外一個項目是 snort,snort 是一套開放原始碼的網路入侵偵測系統,目前 使用的軟體為 Instruction Detection System(IDS),而 IDS 可以監控網路(NIDS) 以及系統(HIDS),此系統一旦發現異常現象或者有入侵企圖的封包,會將網路封 包紀錄並告警系統管理者現在的網路狀況。之所以需要 IDS 是因為可以彌補防 火牆功能的不足,例如:(1)防火牆可以自身被攻破,(2)不是所有威脅都來自防 火牆外部(3) Snort 可以偵測到 OSI Layer7 的封包,而防火牆只能偵測到 OSI Layer4 的封包(4)防火牆無法防禦的攻擊有下列:緩衝區溢位攻擊(Buffer Overflows)、木馬程式攻擊(Trojian Horses)、蠕蟲攻擊(Worms)等等。不過近年 來資訊的進步也相對帶來網路漏洞的加速,而 IDS 只能像 sniffer 監聽封包,當 IDS 發現不正常流量並發出警訊通報系統管理者時,病毒已入侵整個網域,所以 IDS 已不再是主流,Instruction Prevention System(IPS)將慢慢成為一種趨勢,


這兩者的不同之處在於 IPS 同時間偵測以及防禦;IDS 需要一些時間去做考量當 可疑入侵來做紀錄通報,而 IPS 的特就是「深層檢測」以及「線型模式」,IPS 除了可以檢測防火牆 OSI Layer2 ~ 4 並可以檢測 Layer5 ~ 7 層的封包。

防火牆 Ip6tables 1.

Socket 原理: Socket 就是一個 IP 位只加上一個 TCP/UDP port,兩台電腦連線時,封包

內就包含 source port、source address、destination port、destination addres, 所以可分 source socket 跟 destination socket ,而 socket 就是指 port 和 address。Source socket 跟 destination socket 又合稱 socket pair。

2.

NAT 原理: NAT 主要就是用 source socket 或 destination socket 做替代。藉由 NAT

來把來源封包的 IP 位址或 port 做轉換,NAT 實際是對 socket 做轉換的機制。 TABLE

CHAIN

封包處理時機

FILTER 封包過濾

INPUT

封包進入本地網路

OUTPUT

封包傳送至外部網路


FORWARD

封包不是由從本機發送,目 的也非本地網路

NAT 網路位置轉換

PREOUTING

封包進入路由器前 ,進行 DNAT 處理

POSTROUTING

封包進入路由器後 ,進行 SNAT 處理

OUTPUT

由本機產生的封包 ,此封包目的是傳送出介面

3.

清除所有規則: 語法:ip6tables [-t tables] [-FXZ] [chain] -t 參數是用來指定所使用的 table 為何,是 filter、nat 或 mangle。如未使 用 -t table 的話,則預設為 filter table。 參數說明:

-F 清除鏈中的所有規則。如未指定 chain,則預設為 table 中的所有 chain。 -X

清除自訂鏈中的所有規則。如未指定 chain,則預設為 table 中的所有自訂 鏈。

-Z 同等於 --zero。將所有 chain 中的封包計數器歸零

4.

查看清單


5.

允許 ICMPv6 訊息以及拒絕 TCP 連線

接受透過隧道(Tunnel)進入的 ICMPv6 通訊

接受透過隧道(Tunnel)出去的 ICMPv6 通訊

新的 Linux 核心可以指定 ICMPv6 類型:

拒絕進入 TCP 的請求

拒絕跨網段進入 TCP 的請求

Snort 1.

安裝程序

封包擷取套件: libpcap0、libpcap-devel、pcre、pcre-devel 備份log 檔套件: logrotate Snort 主程式:snort-2.8.5-1.1.i586.rmp


rpm –ivh snort-2.8.5-1.1.i586.rmp

2.

設定 Snort 組態:設定內網卡、外網卡

vi /etc/snort/snort.conf 50

var HOME_NET (外網卡網段/遮罩)

53

var EXTERNAL_NET any

120

var RULE_PATH /etc/snort/rules

121

var PREROC_RULE_PATH ../preproc_rules

3.

下載 Snort 的規則比對檔(需註冊)

http://www.snort.org./

4.

建立根目錄下的 snort rules 並切換到此目錄

mkdir /root/snort_rules cd /root/snort_rules


5.

解壓縮跟目錄的 snortrules-snapshot-CURRENT.tar.gz

Tar –zxvf ../snortrules-snapshot-CURRENT.tar.gz

6.

測試 Snort 組態檔是否正確

Snort –T –c /etc/snort/snort.conf

MySQL 1.

安裝程序

套件: mysql、mysql-client、libmysqlclient15、 libmysqlclien-devel

2.

啟動 MySQL Server

service mysql start

3.

設定 MySQL Server 帳號密碼

/usr/bin/mysqladmin -u root password ‘123456’

4.

設定 MySQL Server 開機執行

chkconfig mysql on

5.

安裝 SNORT 的 MySQL 套件

rpm -ivh snort-mysql-2.8.6-1.1.i586

6.

設定 SNORT 登入 MySQL 的帳號、密碼與資料庫名稱


vi /etc/snort/snort.conf

7.

建立 MySQL 帳號、密碼與資料庫

Mysql –u root –p Enter password: 123456 mysql> create database snortdb; mysql> use snortdb; mysql> grant all on snortdb.* to snort@localhost; mysql> set password for snort@localhost=password('123'); mysql> flush privileges; mysql> exit

8.

匯入 Snort 的 MySQL 資料表與欄位

mysql -u snort -p snortdb < /usr/share/doc/packages/snort/schemas/create_mysql Enter password: 123

9.

測試 SNORT

snort -T -c /etc/snort/snort.conf

Apache、PHP 1.

安裝程序


套件:apache2、apache2-mod_php5、php5、php5-mysql、 php5-dg

2.

啟動 Apache

service apache2 start

3.

開機自動啟動 Apache

Chkconfig apache2 on

4.

測試 PHP 是否正常

vi /srv/www/htdocs/phpinfo.php <?php phpinfo(); ?> 在瀏覽器輸入http://(自己的IP)/phpinfo.php,測試是否可見到此畫面

BASE 1.

安裝程序

BASE 主程式:base-1.4.4.tar.gz 套件:adodb510.tgz tar -zxvf base-1.4.4.tar.gz -C /srv/www/htdocs/ cd /srv/www/htdocs/


mv base-1.4.4 base tar -zxvf adodb510.tgz -C /srv/www/htdocs/

2.

降低 PHP 的安全程級

vi /etc/php5/apache2/php.ini 356

3.

error_reporting = E_ALL & ~E_NOTICE

重新開啟 apache

service apache2 restart

4.

設定 BASE

用瀏覽器http://(自己IP)/base/setup/來設定,設定完後無法看到紅色的Graph的 話,在設定一串指令 /usr/local/bin/snort -c /etc/snort/snort.conf -i eth0 -g root –D 設定完後重新瀏覽http://(自己IP)/base/登入:


Guardian 前言所提到的IPS,就是需要安裝Guardian套件。

5.

安裝程序

tar –zxvf guardian-1.7.tar.gz touch /etc/ guardian.ignore cp guardian.conf /etc/ cp guardian.pl /usr/local/bin/ mv iptables_blocl.sh /usr/local/bin/guardian_block.sh mv iptables_unblock.sh /usr/local/bin/guardian_unblock.sh

6.

修改組態檔

vi /etc/guardian.conf AlertFile 改成 /var/log/snort/alert (讀取snort的偵測)

7.

執行 Guardian

./guardian.pl -c ./guardian.conf 或是指定perl的所在目錄來執行: /usr/bin/perl ./guardian.pl -c ./guardian.conf 測試guardian: 用一client 模擬攻擊,當它發出攻擊封包的時候,snort 就


會記錄此IP,guardian 則會把此IP 傳遞至iptables 的規則內並收到信。

心得與自我檢討 這次做完LAB,收穫很多,學到了不少東西,雖然短短一個禮拜內做完,感覺很 趕,但能從中學到linux知識才收穫。為了使用Ipv6,我們使用了實體IP,感覺非 常的難得,所以大部分時間都待在教室內做實驗。這次我負責的是防火牆與snort, 也許不是特別困難的項目,但是這次是用IPv6來建置,所以比想像中還難上許多, 在加上版本相容性的問題以及第一次使用Xen這個虛擬機器。Xen虛擬機器也許 是第一次使用,所以操作起來也不太容易上手,所以浪費很多時間在這虛擬機器 上。後來,原本還蠻順利的,snort可以偵測到封包並顯示出在log檔,不過我網 頁的圖形介面一直出現偵測,所以我當初以為是因為版本問題,重新更換版本, 但很多組態設定都不是很熟,所以在驗收前兩個小時,網頁被我親手弄垮,不過 還好我之前在virtualbox也有多做一份snort 跟 ip6tables,但驗收時,有些功能 就沒辦法補救了。所以我建議,如果XEN操作還不太順手,先用其他虛擬機器先 練習,然後再來就是版本相依性的問題,不過回想起來,我當初圖形介面沒出現, 應該不是相依性的問題,而是其他套件沒安裝完整,所以我認為我的survey能力 還須加強。

86linuxlab31100186  

86linuxlab for me