:::
顯示具有 Linux 標籤的文章。 顯示所有文章

光碟救援模式(rescue mode)用fsck修復無法啟動的CentOS

光碟救援模式(rescue mode)用fsck修復無法啟動的CentOS

2012-04-23_154621 光碟畫面

繼今天(實際上是昨天)下午寫的用救援模式暫時進入原本系統的研究,之後在救援模式用fsck花了許多時間修復檔案系統之後,居然順利讓我修復完成並且正常啟動了!

以下就記錄修復的過程。


問題敘述

這個作業系統是CentOS 5 final,提供DSpace服務。

前一篇一樣,我要處理的問題都是開機過程「Checking filesystems」時出現「e2fsck: aborted [FAILED]」 錯誤,然後Linux指示以下訊息:

*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.
Give root password for maintenance
(or type Control-D to continue): _

也許可以在維護模式(maintenance)中進行修復,但我摸了一陣子搞不太定。倒是利用CentOS 5 Final的救援模式,用fsck順利修復了系統本身。

從光碟進入救援模式 (rescue mode)

2012-04-23_234849 linux rescue

用光碟開機之後,輸入「linux rescue」就可以進入救援模式。上圖是按下<F5>之後對救援模式的說明。

接著要設定語系、鍵盤與網路。

2012-04-23_235030 continue

最後要決定是否掛載原本的系統。因為我們是要修復原本壞掉的系統,所以這邊要選擇「Continue」。

2012-04-23_235123 chroot hint

掛載完成,原本的系統被掛載到「/mnt/sysimage/」。

2012-04-23_235214 cmd   

接著會進入指令列模式,可以輸入指令進行操作。

請輸入以下指令,將原本的檔案系統視為根目錄:

sh-3.1# chroot /mnt/sysimage/

試著查詢一下現在的目錄看看吧:

sh-3.1# ls
bin dev halt lost+found mnt pgdb sbin sys var
boot dspace home media net proc selinux tmp
core.15890 etc lib misc opt root srv usr

其他的細節請看前一篇的「從光碟進入救援模式(rescue)」。

利用fsck修復檔案系統

在使用fsck修復之前,必須要先卸載要修復的檔案系統,否則會造成檔案系統毀損。

透過「mount」指令,可以知道要修復的檔案系統「/dev/VolGroup00/LogVol00」掛載在「/」根目錄。現在我們使用「umount」卸載檔案系統:

sh-3.1# umount /

接著就能用「fsck」來修復檔案系統囉,指令如下:

sh-3.1# fsck -y /dev/VolGroup00/LogVol00

記得要加上「-y」選項喔,不然會確認按到累死。

image

看到以下訊息,就知道fsck開始修復動作了:

fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
/dev/VolGroup00/LogVol00 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes

修復的過程非常久。我的硬碟有2T大小,修復大概也要快兩個小時有吧。總之請耐心等待。

2012-04-24_052701 finish

修復完成之後會看到上圖的訊息。

image

重開機看看,這次就能夠正常運作囉!


小結:能在維護模式下用fsck修復嗎?

雖然透過光碟的救援模式(rescue mode)使用fsck的確能修復檔案系統,但畢竟這還是要片光碟,比較麻煩。不知道能不能在維護模式(maintenance)中就直接使用fsck修復呢?

2012-04-24_004010 maintenance

當然,直接用上述的作法來做,只會收到以下錯誤訊息:

Error allocating icount link information: Memory allocation failed
e2fsck: aborted

到這邊我就不知道該怎麼做才好了。因為時間的限制,我也沒有繼續找下去。未來有機會再繼續研究吧。

(more...)

用光碟救援模式進入壞掉的CentOS系統

用光碟救援模式進入壞掉的CentOS系統

2012-04-23_154456 dspace 虛擬機器無法開啟

我這邊使用VirtualBox架設CentOS的時候,時常遇到開機程序無法順利進行的問題。雖然可以進入單機維護模式,但卻不能透過網路將檔案拿出來。後來發現可以用CentOS光碟的Linux救援模式來開機,並順利進入原本應該是壞掉的系統中,而且居然還可以順利開啟網頁服務來使用,就像是在原本的系統一樣。

當然,這並不是完整的解決方案,而只是我還在研究如何修復中的一個發現的筆記而已。


問題敘述

上述的問題都是在開機過程中進入到「Checking filesystems」的步驟時出現「e2fsck: aborted [FAILED]」 的錯誤訊息,然後出現以下訊息:

*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.
Give root password for maintenance
(or type Control-D to continue): _

雖然可以輸入root密碼進入維護模式,但是因為不能用網路,所以還要找其他的方法來取出檔案,對我來說是比較麻煩的。

於是我嘗試使用CentOS 5 Final的光碟來修復看看。

從光碟進入救援模式(rescue)

2012-04-23_154621 光碟畫面

從CentOS 5 Final光碟中看到的畫面如上。如果要進入救援模式(rescue mode),我們可以先按 <F5>看一下說明。

2012-04-23_154647 救援模式說明

簡單來說,輸入「linux rescue」並按下 <ENTER>就可以進入救援模式。

 2012-04-23_154722 linux rescue

救援模式設定

進入救援模式之後,會有幾項設定需要確認:

2012-04-23_154812 語言

操作語言。用英文最穩啦,沒有亂碼問題。

2012-04-23_154835 鍵盤

鍵盤配置。台灣通常都是用美規的「us」。

 2012-04-23_154904 網路

是否要啟動網路,選擇「Yes」。

2012-04-23_154925 網路設定

網路的相關配置。按<TAB>切換操作項目,移到「OK」進入下一步。

2012-04-23_154949 讀取模式

掛載原本系統

是否掛載原本的檔案系統到「/mnt/sysimage」。選擇「Continue」吧。

2012-04-23_155045 chroot

掛載完成之後,你就可以用「chroot /mnt/sysimage」指令進入原本的root環境。

進入原本系統

2012-04-23_155125 cmd

接著進入到了指令列,輸入「chroot /mnt/sysimage」 吧。

2012-04-23_155152 輸入之後

雖然系統沒有回應,但現在你已經是以root身分進入原本的系統中,而各種服務都可以正常使用。

啟動DSpace服務

以我在實驗室常用的DSpace來說,你可以透過以下指令來啟動DSpace:

sh-3.1# export JAVA_HOME=/usr/java/jdk1.6.0_06
sh-3.1# /opt/apache-tomcat-6.0.16/bin/startup.sh
sh-3.1# /etc/init.d/postgresql start

同理,要啟動SSH也可以輸入以下指令:

sh-3.1# service sshd start

就跟在原本系統一樣操作。


小結:救援模式只是應急的技巧

儘管用這種方式可以啟動網頁服務,至少大致上看起來是沒問題,不過畢竟不是長久之道。

我本來想試著用upgrade升級原本系統,可是失敗了。現在試著在救援模式中用fsck –y /dec/VolGroup00/LogVol00來修復看看,目前仍在跑,但我覺得成功機率應該不大。

最後的方法就是先在救援模式中取出必要的檔案,然後再架一台同樣環境但可以正常運作的機器,把檔案復原回去吧。

(more...)

SSH資安防護建議

布丁布丁吃布丁

SSH資安防護建議

ssh

圖片來源:SSH tunnels for the common man (and woman)

SSH是Linux常用的通訊協定。儘管它是一種加密式的通訊協定,但是其實它很容易被用各種方法來取得進入的權限。為了提高SSH的安全性,我提出三層額外的SSH防護措施,以避免Linux直接暴露在網際網路的危險之中。


SSH簡介

SSH是Secure SHell protocol(安全的殼程式協定)的簡寫,他是一種封包加密技術,以確保封包在網路傳輸中不會因為中途竊取、監聽而暴露重要資料。SSH在Linux作業系統中已經被視為遠端操作用的基本工具,現在已經幾乎沒人在用telnet來操作Linux,除了BBS之外。詳細內容可以參考維基百科鳥哥的Linux私房菜的介紹。

然而,即使SSH已經是加密過的通訊協定,只要有心人士知道你的IP(用ping就可以抓到,或是各種方法都能知道你的伺服器IP)、連接埠(預設是22,或用連接埠掃描工具就知道)、帳號(預設是root)、密碼(透過暴力破解法猜測而得),那麼任何人依然可以輕易地登入你的主機、植入木馬、讓你的伺服器成為殭屍電腦

由於我們這邊常常有電腦遭駭客鎖定、攻擊,所以我思考了很多SSH防護的對策。以下介紹我目前的SSH三層防護措施:1. 防火牆設置白名單、2. 更改預設登入與連線方式、3. fail2ban。這三層的作法中,做完第一層就能達到一定程度的保護。如果不甚安心,或是無法限定白名單的話,那麼再進行第二層跟第三層的設定即可。


第一層:防火牆設置白名單

2011-11-14_171102 zentyal whitelist - mask

防火牆中的白名單(whitelist)是指較嚴謹的防護方式。只有白名單中IP範圍的電腦才能允許連線,否則全部都不能連線。

如果你所在網路中有架設防火牆統一管理,那麼可以請網路管理員幫忙設定。上圖是Zentyal防火牆套裝軟體的設定畫面,在這邊我將來源範圍設定為140.119.61.0/24,代表只有140.119.61.0~140.119.61.254這些IP範圍內的電腦才能連線,其他電腦都會被擋下來。

如果你沒有類似的防火牆伺服器,那麼也可以在Linux中使用iptables防火牆套件來配置。關於iptables請見我另一篇的說明,像是在iptables.allow的設定中加入以下設定:

iptables -A INPUT -i $EXTIF -s 140.119.61.0/255.255.255.0 -j ACCEPT #允許140.119.61.*的電腦連入

不過,當你不確定哪些電腦可以連入,譬如時常要從特定區域外面的網路中連回到Linux伺服器時,這種白名單就很難掌控。你有兩種作法可以作為應變:

  1. 準備一台白名單內的個人電腦,常常是公司內部的個人工作站,再透過該工作站連到Linux伺服器。
  2. 放棄使用白名單,僅做以下第二層與第三層的防護設定。

當然,我還是會建議你用第一種作法,而不是放棄白名單。

第二層:修改預設登入與連線方式

許多Linux安裝好之後,都會預設開放SSH(連接埠22),並允許root連線登入。所以駭客只要偵測到該IP開放22連接埠提供SSH服務,就可以用root帳號跟暴力破解法猜測密碼來登入。Ubuntu在這點做得不錯,它預設是關閉SSH,更不允許使用者用root直接登入。不過還是很多人打開了SSH連線,結果一樣很容易讓駭客進行暴力破解法猜測。

為了避免直接被猜測預設帳號與連線方式的方法,我提供以下幾個建議:

1. 新增另一個擁有root權限的帳號

為了避免直接被以root帳號猜測登入,我們要先準備另一個帳號,並給予他root般的權限,以方便進行伺服器管理。

Linux新增帳號的指令為useradd,然後再用passwd給予密碼。詳細操作請看鳥哥的帳號管理說明。舉例來說,我現在要以pudding作為另一個管理者帳號,作法如下:

[root@ipfire ~]# useradd pudding
[root@ipfire ~]# passwd pudding
Changing password for pudding
Enter the new password (minimum of 5, maximum of 127 characters)
Please use a combination of upper and lower case letters and numbers.
New password:
Re-enter new password:
Password changed.
[root@ipfire ~]#

接著修改帳號的uid,將之設為0,表示同等於root帳號。修改uid的位置在「/etc/passwd」檔案,打開該檔案之後,有一條設定將會是剛剛新增的帳號。舉例來說,剛剛新增的pudding帳號,其設定如下:

pudding:x:1001:1001::/home/pudding:

將這設定中的uid改成0,結果如下:(注意紅字的部份)

pudding:x:0:1001::/home/pudding:

關於「/etc/passwd」的詳細內容,請參考鳥哥的說明

2. 設定SSH,阻止root登入

SSH的設定檔預設位於「/etc/ssh/sshd_config」檔案中。

要阻止root帳號登入的話,則是在設定檔最後加上一條設定:(注意大小寫不同)

DenyUsers root

儲存之後,重新啟動SSH。之後SSH就不准給root登入了。

不使用PermitRootLogin no的理由

必須要說明的是,在此不使用大部分教學主張的「PermitRootLogin no」設定。這是因為該設定會一併擋掉前面建立的帳號,讓他無法登入。

如果是指令操作的話,還可以用su root換成root帳號。但是像是SFTP的操作就不能用su root切換,因此乾脆還是用擁有root權限的帳號比較方便。

3. 修改SSH連接埠

同樣是在「/etc/ssh/sshd_config」檔案中。

找到「Port 22」的設定,並將之改為其他的連接埠。舉例來說,如果要設定為透過64022來連接SSH的話,那就是改為「Port 64022」。

image

儲存之後,重新啟動SSH。之後SSH必須透過64022登入了。

弱點仍是暴力破解法

很遺憾的是,第二層作法只能防君子不能防小人。駭客依然可以透過掃描工具掃描伺服器連接埠,找到你修改後的SSH連接埠號碼,然後透過暴力破解法,猜測你的帳號與密碼組合。

具體來說,SSH雖然預設限制每次連線都只能嘗試登入5次,但是只要撰寫程式機器人,就可以不斷重複進行SSH並嘗試猜測帳號與密碼。這種程式並不難寫,可是卻很難防禦。為了阻止暴力破解法,你還需要第三層的防護:fail2ban。

第三層:fail2ban 限制登入失敗次數

fail2ban是Linux的一個套件,它會根據記錄檔來判斷使用者登入失敗的次數,來決定是否要阻止該使用者再次嘗試登入。舉例來說,你可以設定嘗試登入次數最高3次,超過次數之後必須等待1小時才能再登入。這樣駭客就很難用暴力破解法猜測你的密碼,因為他用錯誤的方式猜測,一天最多也能猜測24*3=72組帳號密碼而已。

關於fail2ban的安裝與設定方式,請參考我另一篇教學


結語

之前我這邊發生一件事情。我們同事平常用他工作用電腦連上Linux伺服器操作,然而他工作用電腦因為沒有定時更新防毒軟體,導致駭客入侵、成為殭屍電腦,一併感染了Linux伺服器。在這個案例中,第一層防護因為同事電腦位於白名單內而沒有效用,第二層與第三層防護,也因為同事電腦的帳號密碼直接被側錄,而跟著毫無效用。

同事的電腦不更新防毒軟體(實際上是已經過期了,卻又不更新授權),連帶導致的問題,讓計畫團隊足足有半個月沒有任何進度,而是在重灌伺服器跟修補漏洞。

這件事情告訴我們,任何角落都可能成為資安的漏洞來源,怎樣都擋不完。

不過,實際上也不要這麼悲觀。平時定期更新防毒軟體(免費的防毒軟體例如小紅傘Avira AntiVir PersonalAVG Anti-Virus FREE都不錯用)、架設伺服器時設定一下SSH的連線,將資訊安全當成常識一樣看待,將可以大幅降低駭客入侵的可能性。

(more...)

IPFire 實作反向代理伺服器(Reverse Proxy)

IPFire 實作反向代理伺服器(Reverse Proxy)

2011-09-01_123836 ipfire logo 

IPFire是我最近在研究防火牆套裝系統中覺得較為合適的一套軟體。它是以Linux為基礎發展而成的作業系統,專門用來作為防火牆、DHCP伺服器、NAT路由器等功能。

IPFire在安裝Pound套件之後一樣可以作為反向代理伺服器(reverse proxy)使用,不過Pound的設定檔必須要透過指令列來修改,不是很方便。我用PHP寫了一個pound.cfg設定檔編輯器,並將之整合到IPFire的管理介面中。

以下簡介IPFire、反向代理伺服器套件Pound、IPFire安裝Pound與pound.cfg設定檔編輯器的方法,以及如何設定Pound反向代理伺服器。


IPFire簡介

2011-09-01_123836 ipfire logo

IPFire是一個設計作為防火牆的伺服器系統,採GNU第三版發佈,可供人免費自由使用。它主要是用於可設定、調整大小的中小型企業網路與家庭網路中。

在這個前提之下,IPFire原始安裝時只提供了最小的功能,但附有大量的擴充套件(add-ons),只要點點滑鼠就能輕易安裝。這也是IPFire與其他防火牆系統的差異所在:它很容易設定各種功能,並易於管理。

IPFire的安裝與設定都十分簡單,就跟它企鵝火燒屁股的標誌一樣可愛。儘管它並沒有許多UTM(Unified Threat Management,整合式威脅防護系統)主打的複雜功能,但容易上手、設定、並能夠滿足我的需求,對我來說就足夠了。

不過老實說,它網頁管理端的防火牆設定只能設定單一來源位置,如果要規劃複雜的防火牆規則,例如我之前的iptables設定,那麼就得要用指令列來手動設定iptables了。

Pound簡介

Pound是一種反向代理伺服器(reverse proxy)、負載平衡器(load balancer)以及網頁伺服器的前端(front-end)HTTPS管理器。Pound可將流量負載分散至多台網頁伺服器,並能夠使用方便的SSL包裝器加密HTTP封包,讓原本沒有HTTPS功能的網頁伺服器也能夠使用HTTPS提供服務。Pound是以GPL發佈,可供人免費自由地使用。

網路上實作反向代理伺服器的套件很多,大多人都使用Squid與Apache,而之前我也用Lighttpd來做反向代理伺服器。Squid設定複雜不易上手;Apache我試過,但不太穩定;Lighttpd雖然不錯用,但是以Lighttpd作為網頁伺服器的情況不常碰到(IPFire是用Apache);而這個Pound則是專門用來作為反向代理伺服器的套件,跟前面敘述的套件不同的地方是,Pound並沒有代理伺服器特有的快取功能,而完全只負責轉遞封包,這是在使用Pound需要注意到的問題。此外,Pound設定簡單容易上手,這也是我喜歡Pound的特色。

來聊個題外話:通常Pound套件會安裝在獨立的負載平衡伺服器中,但偶爾也會遇到將網頁伺服器與Pound套件安裝在同一台伺服器的情況。由於Pound必須監聽連接埠80才能引導封包流向,這會與一般的網頁伺服器(如Apache)監聽連接埠80相互衝突。我看有些設定是修改網頁伺服器的連接埠,例如改為8080,然後讓Pound在引導封包流向時將80轉為8080,達到兩種服務共同相處的目的。稍後在介紹Pound設定檔pound.cfg的內容時,相信應該很容易理解這個作法。不過本篇並不會處理這樣的問題,當做閒聊看看就算了。


接下來開始介紹IPFire上安裝Pound與Pound設定檔pound.cfg編輯器的方法,以及設定Pound反向代理伺服器的方法。

IPFire安裝Pound

我參考了原本IPFire安裝Pound的教學,加入我額外開發的pound.cfg設定檔編輯器,所以步驟變得有點複雜。如果有任何講述錯誤的地方,請多多指教。

1. 前置作業:安裝IPFire與開啟網頁管理介面(Web Interface)

安裝IPFire的步驟挺簡單的,就跟安裝普通的Linux作業系統一樣,我就不再贅述。

一開始常見的問題通常是要如何連上網頁管理介面(Web Interface)。不過這也不是本篇的重點,我也沒打算花太多篇幅敘述這個作法。簡單來說:

  1. 請使用內部網路(LAN)的電腦來連線。
  2. 連線到https://192.168.0.1:444
  3. 預設帳號為admin,密碼為IPFire安裝時設定的密碼。

以下所有步驟都必須要從網頁管理介面操作,請想辦法努力做到這一步吧。

2. 設定防火牆

這一步也是要在內部網路的電腦中連到IPFire網頁管理介面進行操作。

image

請進入firewall > External Access頁面中,設定網際網路連線可連入IPFire的規則。

主要欄位說明如下:

  • TCP:封包類型。我們大部分的服務都是用TCP進行,此處請選TCP。
  • Destination port:目標連接埠。為了讓網際網路的電腦可以連到IPFire的網頁管理介面,此處請開放444連接埠。
  • Remark:說明。我們為此規則加入「ipfire web interface」的說明。也可以輸入中文。

最後按下「Add」按鈕,就完成了新增規則的作業。以下就能用任意電腦連線至IPFire的網頁管理介面了。

同時,也請你以相同的步驟,開啟以下幾個之後會用到的連接埠:

  • 連接埠222:IPFire使用的SSH通訊協定。
  • 連接埠80:Pound監聽的HTTP通訊協定。
  • 連接埠443:Pound監聽的HTTPS通訊協定。
3. 開啟SSH

2011-08-31_184738 ssh access (draw)

請開啟網頁管理介面中的system > SSH Access頁面。

在ssh區塊中,勾選以下選項:

  • SSH Access:讓IPFire可以使用SSH。
  • Allow TCP forwarding:允許TCP封包轉遞。
  • Allow password based authentication:允許密碼認證。
  • Allow public key based authentication:允許公開金鑰認證。

加上前一步驟中開放了防火牆,接下來你可以就用你的電腦以SSH連線至IPFire。IPFire的SSH連接埠為222,這跟一般預設的22有所不同,因此比較不容易被駭客猜到。

稍後我們會透過SFTP(SSH的FTP模式)上傳檔案,我是使用FileZilla來上傳。如果要用SSH的指令列模式操作IPFire的話,我通常是使用PieTTY,但是指令列模式操作比較困難,本篇也不打算多談,僅供進階使用者使用而已。

4. 檔案上傳

以下幾個檔案請以SFTP方式上傳到IPFire的指定路徑中。

pound
  • 下載位址
  • 存放路徑:/etc/sysconfig/pound
  • 開機時自動啟動pound的設定。
ipfire-interface-ssl.conf
  • 下載位址
  • 存放路徑:/etc/httpd/conf/vhosts.d/ipfire-interface-ssl.conf
  • 讓Apache可以使用PHP程式。其實IPFire的Apache本來就有載入PHP元件,但並沒有設定PHP關連。此檔案就是加入了PHP的關聯設定。
pakfire.cgi
  • 下載位址
  • 存放路徑:/srv/web/ipfire/cgi-bin/pakfire.cgi
  • 在IPFire網頁管理介面中加入開啟pound.cfg的連結。
pound_edit.php
  • 下載位址 (如果新版本IPFire的pound.cfg路徑有修改的話,請下載這個檔案)
  • 存放路徑:/srv/web/ipfire/html/pound_edit.php
  • 編輯pound.cfg設定檔的程式

檔案放完之後,要記得重新啟動apache喔。指令如下:

[root@ipfire ~]# /etc/init.d/apache restart
Restarting Apache daemon... [ OK ]

5. IPFire安裝Pound套件

2011-08-31_172002 pound install (draw)

在網頁管理介面端,進入ipfire > Pakfire頁面,請在Available Addons中選擇「pound」(我目前使用的是pound-2.5-2版本),然後按下下面的「+」按鈕進行安裝。

2011-08-31_172904 pound install comfirm

接著IPFire會要你確認是否要安裝。按下綠色向右箭頭確認即可。稍微等待一段時間,IPFire一下子就會裝好Pound套件,並跳回剛剛的Pakfire頁面中。

6. 開啟pound.cfg editor

2011-08-31_173052 pound.cfg editor path

安裝完Pound套件之後,網頁管理介面的ipfire > Pakfire下方應該會出現pound區塊。請開啟pound.cfg editor連結。

2011-08-31_172934 pound.cfg editor

接著會開啟pound.cfg editor視窗,你就可以在此畫面中編輯Pound的設定檔了。詳細的設定稍後會再敘述,此處只要確認可以開啟即可。

7. 重新啟動IPFire

2011-09-01_132305 reboot

以上設定完畢之後,需要重新啟動Apache跟Pound,設定才會生效。你可以從網頁管理介面中的 system頁面找到「Reboot?」按鈕,按下去之後就會讓IPFire重開機了。

如果你會使用SSH指令列操作IPFire,也可以輸入以下兩個指令,各別將Apache與Pound重新啟動:

[root@ipfire /]# /etc/init.d/apache restart
[root@ipfire /]# /etc/init.d/pound restart

到此為止,IPFire安裝Pound就大功告成了。


設定pound反向代理伺服器

反向代理伺服器是一種特殊的網路架構,它利用FQDN(Fully Qualified Domain Name)透過反向代理伺服器連接到內部網路的伺服器。其原理我已經在之前討論pfSense時介紹過了,在此不再贅述。

Pound作為反向代理伺服器的設定方式很容易上手,在此我謹介紹最簡單的範例。我先講述一下範例的網路拓蹼,然後再講要如何設定Pound。如果要進行更複雜的設定,請參考Pound官方網站的說明

1. 網路拓蹼規劃

ipfire 網路拓蹼

現在的網路拓蹼架構如上圖,IPFire作為防火牆與路由器,負責連接網際網路(外部網路)與內部網路兩者。

在內部網路中,有一台網頁伺服器提供Joomla網站服務,內部網路的IP為192.168.0.20

為了讓網際網路的電腦可以連線至Joomla網站,我們先註冊一個FQDN:joomla.example.com,並指向IPFire伺服器的外部網路IP:140.119.61.254

接著我們就要設定IPFire中的Pound套件,讓它知道接收到來自joomla.example.com的封包時,要轉遞到內部網路中的Joomla伺服器。

2. 進入pound.cfg editor

Pound的設定檔是/etc/pound.cfg。如果你在上述步驟中一起安裝了pound.cfg編輯器,那麼你可以透過它從IPFire網頁管理介面中編輯pound.cfg。

請開啟IPFire的網頁管理介面,進入ipfire > Pakfire,找到最下面的pound.cfg editor,開啟視窗。

3. 編輯pound.cfg

依照目前的網路拓蹼規劃,有幾個參數是必須要確定的:

  • IPFire的外部網路IP位置:140.119.61.254 (以藍色表示)
  • FQDN:joomla.example.com (以紅色表示)
  • 內部網路伺服器的IP位置:192.168.0.20 (以綠色表示)

如此設定pound.cfg之後的內容如下,請注意顏色的對應:

ListenHTTP
Address 140.119.61.254
Port 80
Service
HeadRequire "Host: .*joomla.example.com*"
BackEnd
Address 192.168.0.20
Port 80
End
End
End

設定應該算蠻好懂的,在此就不多解釋了。

4. 重新啟動IPFire

修改pound.cfg之後,要重新啟動Pound才會生效。你可以從IPFire的網頁管理介面中將IPFire重新啟動,也可以透過SSH輸入指令「/etc/init.d/pound restart」來重新啟動Pound。

以上Pound的設定就大功告成了。


F&Q

為什麼pound.cfg editor抓不到檔案內容?

可能是IPFire設定的pound.cfg路徑有所修改,詳細請看IPFire addons: pound的說明。


結語

我本來是打算用pfSense作為反向代理伺服器。但很遺憾的是,不知道是不是硬體不支援的關係,我的實體伺服器並沒辦法安裝pfSense。所以我只好臨時找尋其他的方案,而找到現在的這個IPFire。

老實說,IPFire並沒有pfSense容易上手,但還算是堪用就是。希望他真的能夠讓我安裝到實體伺服器中,別讓我又要重找了啊。

至於為什麼pound.cfg editor是用PHP開發的這點,雖然IPFire主要的功能都是用Perl寫成的cgi網頁,但我對cgi並不熟,所以才會折衷用PHP來寫。雖然安裝手續上複雜了一點,但操作時應該比較容易才是吧?至少不必用到vi來編輯pound.cfg設定檔,這點應該可以讓許多管理者容易上手許多才是。

光是研究各個防火牆系統套件花了不少時間,本來想說這個pound.cfg editor應該可以很快完成,結果又因為其他意外拖了很久,實在是很慚愧。希望未來也能繼續努力加油,嗯!

(more...)

Linux的iptables防火牆設定記事

Linux的iptables防火牆設定記事

2011-07-22_160136 view_iptables

iptables是Linux作業系統中常見的防火牆套件,中文的維基百科也有介紹iptables。它可以用來設計靈活的過濾規則,並以簡單的語法進行設定,是Linux的網管人員必須學習操作的套件。架設伺服器時,為了防止被惡意攻擊、入侵,網管人員都必須要一併設定防火牆。但是高靈活性的iptables設定起來門檻也相當的高,往往讓初學者不知該從何設起。

我最近鑽研iptables的設定,參考了Linux網管人員必讀的鳥哥的Linux私房菜中的iptables實際設定,並根據身邊的網路伺服器環境做了些修改,想辦法讓iptables的設定與使用讓人簡單易懂。

這一篇就是分享我設定iptables的腳本檔,介紹安裝與使用方法,供其他人設定iptables時作為參考。


iptables腳本檔防火牆設定概述

這些腳本檔是參考鳥哥的iptables實際設定修改而成,iptables腳本檔可以從以下網址下載:

在pulipuli.iptables.zip裡面有六個檔案。以sh副檔名的三個檔案是可以執行的腳本檔,其他三個則是設定檔。

以下簡單敘述這些腳本檔的目的,稍後會再詳細介紹腳本檔的內容與用法。

  • iptables.rule.sh:設定iptables的主要規則。以下三個檔案是依附此腳本的設定檔:
    • iptables.deny:設定要阻擋的IP。
    • iptables.allow:設定要允許的IP。
    • iptables.service:設定要允許的連接埠。
  • reset_iptables.sh:清除iptables的設定。
  • view_iptables.sh:觀察iptables的設定。
iptables.rule.sh的功用

其中,主要的設定都集中在iptables.rule.sh中,裡面設定了相當多常見的防火牆規則。以下我簡單地敘述它的綱要:

  • 設定核心的網路功能
  • 重設防火牆設定:包括阻擋所有INPUT封包
  • 開放 lo 本機網路卡
  • 開放由本機發出的回應封包
  • 阻擋指定的IP:使用iptables.deny設定檔
  • 允許指定的IP連入:使用iptables.allow設定檔
  • 允許 0 3 3/4 4 11 12 14 16 18 ICMP封包進入
  • 允許指定的連接埠連入:使用iptables.service設定檔
  • 儲存防火牆設定

以下是iptables.rule.sh的內容:

#!/bin/bash

# 請先輸入您的相關參數,不要輸入錯誤了!
EXTIF="eth0" # 這個是可以連上 Public IP 的網路介面
RULE_PATH="/root/iptables" #iptables的設定路徑,最後不要有「/」
export EXTIF RULE_PATH

# 第一部份,針對本機的防火牆設定!##########################################
# 1. 先設定好核心的網路功能:

# 防止SYN Flloding的DoS攻擊
echo "1" > /proc/sys/net/ipv4/tcp_syncookies

# 防止ping的Dos攻擊
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#rp_fileter:啟動逆向路徑過濾(Reverse Path Filtering)
#log_martians:記錄不合法的IP來源到/var/log/meesages
for i in /proc/sys/net/ipv4/conf/*/{rp_filter,log_martians}; do
echo "1" > $i
done

# 以下建議關閉
# accept_source_route:來源路由
# accept_redirects:IP相同時採用最短路徑
# send_redirects:與前者類似,發送ICMP redirect封包
for i in /proc/sys/net/ipv4/conf/*/{,accept_source_route,accept_redirects,send_redirects}; do
if [ -f $i ]; then
echo "0" > $i
fi
done

# 2. 清除規則、設定預設政策及開放 lo 與相關的設定值
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin; export PATH
iptables -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

#接受lo本機介面網路卡
iptables -A INPUT -i lo -j ACCEPT

#接受由本機發出的回應封包
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# 3. 啟動額外的防火牆 script 模組
if [ -f $RULE_PATH/iptables.deny ]; then
sh $RULE_PATH/iptables.deny
fi

if [ -f $RULE_PATH/iptables.allow ]; then
sh $RULE_PATH/iptables.allow
fi

# 4. 允許某些類型的 ICMP 封包進入
# 詳細請參考ICMP協定 http://linux.vbird.org/linux_server/0110network_basic.php#tcpip_network_icmp
AICMP="0 3 3/4 4 11 12 14 16 18"
for tyicmp in $AICMP
do
iptables -A INPUT -i $EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT
done

# 5. 允許某些服務的進入,請依照你自己的環境開啟
if [ -f $RULE_PATH/iptables.service ]; then
sh $RULE_PATH/iptables.service
fi

# 6. 最終將這些功能儲存下來吧!
/etc/init.d/iptables save

各個指令的意義請參考鳥哥的Linux私房菜 第九章、防火牆與NAT伺服器介紹,在此不贅述。以下我就直接介紹如何安裝、設定與使用這些腳本檔。


1. iptables腳本檔安裝

iptables的設定必須以 root 管理者 的身分操作,因此這一篇所有的動作都請以 root 進行吧。

另外,為了避免防火牆配置錯誤導致伺服器無法遠端連線,建議請在可以直接控制本機的時候再進行設定。以免設定錯誤導致伺服器無法連線的時候,再遠端也無能為力啊。

1-1. 檔案下載與配置

請下載以下檔案:

將該zip檔案上傳到伺服器的指定目錄「/root/」。並以unzip解壓縮。unzip解壓縮的指令如下:

[root@dspace-dlll ~]# unzip pulipuli.iptables.zip -d /root

iptables的腳本檔就會出現在「/root/iptables」目錄中。

當然,你也可以在其他電腦解壓縮之後再上傳到「/root/iptables」目錄。

1-2. 修改sh權限為700

為了要讓副檔名為sh的腳本檔可以執行,必須將他們的權限設為700,意思是只有擁有者root才能執行。

設定權限的指令如下:

[root@dspace-dlll ~]# chmod 700 /root/iptables/*.sh


2. iptables腳本檔設定

在主要設定中,我們會先讓iptables阻擋所有外來連線。因此我們要在以下三個檔案中設定特別阻擋或允許的IP與連接埠設定。以下主要設定的有三個檔案,他們的優先順序也是由先到後:

  1. iptables.deny:設定要阻擋的IP。
  2. iptables.allow:設定要允許的IP。
  3. iptables.service:設定要允許的連接埠。
2-1. iptables.deny 設定要阻擋的IP

檔案的內容如下,紅字的部份是要阻擋的IP

#!/bin/bash

# 這份設定要搭配iptables.rule.sh運作

# 底下填寫的是『你要抵擋的IP!』

# iptables -A INPUT -i $EXTIF -d members.lycos.co.uk -j DROP #不能使用Domain Name,會被iptables轉換成IP
iptables -A INPUT -i $EXTIF -s 213.131.252.251 -j DROP #阻止後門程式連入
iptables -A INPUT -i $EXTIF -d 213.131.252.251 -j DROP #阻止後門程式連出

在此範例中,我將「213.131.252.251」這個IP列為阻擋的對象。一個IP有兩條設定,一個是加上「-s」參數的阻擋連入,一個是加上「-d」參數的阻擋輸出。如果你要擋下其他的IP的話,可以據此依樣畫葫蘆建立相同的設定,然後更換IP即可。

2-2. iptables.allow 設定要允許的IP

檔案的內容如下,藍字的部份是要允許一定範圍的IP紅字部分是要允許的IP

#!/bin/bash

# 這份設定要搭配iptables.rule.sh運作

# 底下則填寫你允許進入本機的其他網域或主機

#iptables -A INPUT -i $EXTIF -s 140.119.61.0/255.255.255.0 -j ACCEPT #140.119.61.*的電腦,不建議開放
iptables -A INPUT -i $EXTIF -s 140.119.61.254 -j ACCEPT #允許指定IP連線

此例中,我設定「140.119.61.0/255.255.255.0」,也就是「140.119.61.*」這個範圍的IP都可以允許連線,不論是用哪種連接埠。(因為連接埠的設定iptables.service是在iptables.allow之後執行)但是這種大範圍的允許規則比較危險,除非你非常信任這個區域網路,否則不建議開放。因此我將此條規則前面加上「#」註解掉,讓它無法生效。

另外我指定「140.119.61.254」這個IP,允許他連線到伺服器,而不論是用哪種連接埠。如果你通常使用固定IP來管理這台伺服器,那麼我比較建議使用這種用法。

2-3. iptables.service 設定要允許的連接埠

檔案的內容如下,紅字的部份是要允許的連接埠藍字的部份是連接埠預設對應的服務名稱

#!/bin/bash

# 這份設定要搭配iptables.rule.sh運作

# 5. 允許某些服務的進入,請依照你自己的環境開啟
#iptables -A INPUT -p TCP -i $EXTIF --dport 21 --sport 1024:65534 -j ACCEPT # FTP
#iptables -A INPUT -p TCP -i $EXTIF --dport 22 --sport 1024:65534 -j ACCEPT # SSH 不建議直接開放,請允許IP即可
#iptables -A INPUT -p TCP -i $EXTIF --dport 25 --sport 1024:65534 -j ACCEPT # SMTP
#iptables -A INPUT -p UDP -i $EXTIF --dport 53 --sport 1024:65534 -j ACCEPT # DNS
#iptables -A INPUT -p TCP -i $EXTIF --dport 53 --sport 1024:65534 -j ACCEPT # DNS
iptables -A INPUT -p TCP -i $EXTIF --dport 80 --sport 1024:65534 -j ACCEPT # WWW
#iptables -A INPUT -p TCP -i $EXTIF --dport 110 --sport 1024:65534 -j ACCEPT # POP3
#iptables -A INPUT -p TCP -i $EXTIF --dport 389 --sport 1024:65534 -j ACCEPT # LDAP
#iptables -A INPUT -p TCP -i $EXTIF --dport 443 --sport 1024:65534 -j ACCEPT # HTTPS SSL
#iptables -A INPUT -p TCP -i $EXTIF --dport 8080 --sport 1024:65534 -j ACCEPT # Tomcat
#iptables -A INPUT -p TCP -i $EXTIF --dport 10000 --sport 1024:65534 -j ACCEPT # Webmin

在iptables.rule.sh中,我們先將所有連線都擋掉,而以白名單的方式設定要允許的連接埠。這邊設定的連接埠,可以讓任何電腦藉此連線到伺服器。

然而,我們一般伺服器開放的服務並沒有這麼多,通常只有開放WWW網頁伺服器而已,因此大部分的服務我都用「#」註解掉不使用。請依照你的需求來決定是否要開放。

必須要注意的是,我並不建議在此開放管理用的連接埠,像是ssh用的22、Webmin用的10000。我建議應該要設定 iptables.allow 指定允許的IP連線即可,這些IP不會受到iptables.service的連接埠設定限制。不要將管理用的連接埠開放到網際網路,是比較安全的作法。


3. 執行iptables腳本檔

3-1. 執行iptables.rule.sh:設定生效

設定完上述三個檔案之後,接下來執行 iptables.rule.sh 腳本檔,設定才會生效。

執行的指令與正常運作的訊息如下:

[root@dspace-dlll ~]# /root/iptables/iptables.rule.sh
正在儲存防火牆規則到 /etc/sysconfig/iptables: [ 確定 ]

3-2. 執行view_iptables.sh:檢查設定

為了確認iptables的設定是否有正常寫入,你可以執行 view_iptables.sh 這個腳本檔。其實它的內容只是「iptables –L –n -v」 ,也就是iptables查詢設定的指令。為了簡便記憶,我把它連同參數一起寫成 view_iptables.sh 這個腳本檔。

執行 view_iptables.sh 的指令與正常運作的訊息如下:

[root@dspace-dlll ~]# /root/iptables/view_iptables.sh
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
65 5564 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
55 3344 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 DROP all -- eth0 * 213.131.252.251 0.0.0.0/0
0 0 DROP all -- eth0 * 0.0.0.0/0 213.131.252.251
0 0 ACCEPT all -- eth0 * 140.119.61.254 0.0.0.0/0
0 0 ACCEPT icmp -- eth0 * 0.0.0.0/0 0.0.0.0/0 icmp type 0
0 0 ACCEPT icmp -- eth0 * 0.0.0.0/0 0.0.0.0/0 icmp type 3
0 0 ACCEPT icmp -- eth0 * 0.0.0.0/0 0.0.0.0/0 icmp type 3 code 4
0 0 ACCEPT icmp -- eth0 * 0.0.0.0/0 0.0.0.0/0 icmp type 4
0 0 ACCEPT icmp -- eth0 * 0.0.0.0/0 0.0.0.0/0 icmp type 11
0 0 ACCEPT icmp -- eth0 * 0.0.0.0/0 0.0.0.0/0 icmp type 12
0 0 ACCEPT icmp -- eth0 * 0.0.0.0/0 0.0.0.0/0 icmp type 14
0 0 ACCEPT icmp -- eth0 * 0.0.0.0/0 0.0.0.0/0 icmp type 16
0 0 ACCEPT icmp -- eth0 * 0.0.0.0/0 0.0.0.0/0 icmp type 18
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp spts:1024:65534 dpt:80

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 98 packets, 8728 bytes)
pkts bytes target prot opt in out source destination

看到設定都有順利存入iptables之後,防火牆設定就大功告成囉!

reset_iptables.sh:清除iptables設定

有時候防火牆設定並不如人意,你又不確定是哪裡設定錯誤的時候,你可以用 reset_iptables.sh 來暫時清除所有防火牆的設定。

reset_iptables.sh的檔案內容如下。

#!/bin/bash

# 清除iptables的所有設定,並允許所有連線
iptables -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

# 儲存設定
#/etc/init.d/iptables save #先不儲存,重開機之後就會恢復之前的設定

請注意最後一行,我將儲存設定的指令註解掉,因此清除iptables設定的動作並不會永久儲存,下次重新開機或重新啟動iptables的時候,之前的設定就會恢復。如果你有必要永久儲存的話,請取消這一行的註解吧。

reset_iptables.sh 的執行指令如下:

[root@dspace-dlll ~]# /root/iptables/reset_iptables.sh


結語

網路上對iptables規則設定的討論相當多,由於每台伺服器所在的網路環境都有所不同,因此似乎沒有能夠完美應對所有環境的設定。

我也還在鑽研iptables中,這個腳本檔也可能有些問題。在此歡迎大家多多指教。

(more...)

以VirtualBox安裝OSSIM

以VirtualBox安裝OSSIM

image

Alienvault Open Soucre SIM(簡稱為OOSIM)是一個網路設備掃描、管理工具,類似我之前介紹的Spiceworks,而且是開放原始碼的軟體。OOSIM是一個整合平台,他結合了多種網管工具,包括知名的Nagios,還有知識管理的工具,詳細介紹可以看張百川的介紹

我現在才在剛開始評估OSSIM,弄了好久才用VirtualBox把OSSIM才架設起來。這一篇就簡單記錄一下安裝過程,描述我安裝時發現硬碟分割的選項,以及如何讓OSSIM可以透過VirtualBox的NAT來運作,而不需要給予獨立IP的設定。


安裝環境

OSSIM 2.3.1(32位元)

OSSIM是一個Debain的Linux發行版,必須以光碟安裝成一個完整的作業系統。OSSIM網站可以下載到32位元跟64位元的ISO光碟映像檔。我下載的是32位元的2.3.1版本,ISO檔案大小為690MB。

VirtualBox Version 3.0.8 r53138

VirtualBox由Sun發展的自由軟體,他部分是開放原始碼方式發行。目前被Orcale採購,冠以Orcale VirtualBox的名稱。跟其他的虛擬機器相比,VirtualBox適合初學者、新手、臨時建立虛擬機器之用,相當容易上手,但是長期運作跟大量虛擬機器管理就不是很好用。

image

我使用的VirtualBox是Sun在被Orcale採購之前的版本,不過我想自3版之後的差異應該不大,請下載最新版本來安裝即可。安裝VirtualBox的作業系統是Windows 2003。


安裝步驟中我參考了張百川的OSSIM安裝介紹,不過他使用的是VMware,而且網路設定方式也是固定IP(儘管是區域網路IP),在VirtualBox的安裝中稍微有點有些不一樣。

我先從VirtualBox建立虛擬機器開始介紹,然後將OSSIM安裝中的選項記錄一下。

1. VirtualBox設定

1-1. 建立虛擬機器

在開始安裝OSSIM之前,我們要在VirtualBox建立一個安裝它的虛擬機器。

2011-07-21_154601 vb main (mask)

VirtualBox建立虛擬機器的方式很簡單,可以透過精靈來完成,我的設定請看上圖。以下我只講重要的一些細節:

  • 虛擬機器類型為Debian
  • 虛擬硬碟大小至少20GB以上:OSSIM初始安裝完的大小約3GB,quzaldon使用了一個月之後大概佔用了20GB。請使用動態延伸儲存方式(Dynamically expanding storage)的VDI格式吧。
  • 網路卡設為PCnet-FAST III (NAT):NAT模式是用DHCP分配IP給OSSIM,省下還要給OSSIM配給IP的麻煩。
  • 記憶體:我設定的是1024MB,Hinky說他配了1.5GB都還不夠用,不過我想至少設個256MB左右就能順利安裝了。
  • 光碟機設定映像檔alienvault_ossim_32bits_2.3.1.iso:VirtualBox可以用映像檔當做虛擬機器的光碟機,而不需要燒成實體光碟。
  • 關閉音效:因為用不到。
1-2. VirtualBox設定NAT的連接埠轉遞

NAT模式儘管不需要配給OSSIM一個IP,但是也沒辦法讓外界連線到OSSIM。還好VirtualBox可以使用連接埠轉遞機制(port forwarding)來讓外界可以連線到OSSIM的管理介面。

詳細的VirtualBox連接埠轉遞機制可以看我之前的介紹,在此主要要給OSSIM開放轉遞的連接埠有兩個:

  • 80:OSSIM管理介面。我設定成外面是由61080來連線。
  • 22:OSSIM的SSH指令列管理。我設定成外面是由61022來連線。

你也可以直接在VirtualBox的虛擬機器設定檔中,在<ExtraData>標籤裡面直接加入以下紅字設定:

<ExtraData>
<!-- 其他設定 -->
<ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/Protocol" value="TCP"/>
<ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/GuestPort" value="80"/>
<ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/HostPort" value="61080"/>
<ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" value="TCP"/>
<ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" value="22"/>
<ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" value="61022"/>
</ExtraData>

設定連接埠轉遞的時候,虛擬機器必須關閉,最好連整個VirtualBox都關掉喔。

2. OSSIM安裝

OSSIM的安裝方式是以精靈的方式提供安裝指導,操作起來應該算是很簡單,大部分都按「contiune」就能繼續安裝。以下我只講一些需要注意的選項。

2-1. 選擇「Unattended installation」(無人職守安裝)

image

開機進入OSSIM的光碟選單之後就會有三個選項,請選擇第一個「Alienvault Ossim 2.3.1 (32 bit) Unattended installation」選項,按enter進入。

2-2. 設定網路

image

OSSIM的安裝步驟中沒有提供DHCP設定,必須要現在給予他網路設定。遺憾的是我並不知道VirtualBox的NAT模式到底是給了OSSIM什麼IP,所以這邊我是根據之前的經驗來設定:

  • IP: 10.0.2.2
  • Netmask: 255.255.255.0(OSSIM自動配置)
  • Gateway: 10.0.2.1 (OSSIM自動配置)
  • Name Server address: 10.0.2.1 (OSSIM自動配置)

這樣子的設定是無法透過VirtualBox連到網際網路,稍後安裝完成之後我們可以再把它設定成DHCP的連線,以適應VirtualBox的NAT模式。

2-3. 硬碟分割成LVM

image

接著OSSIM會要求配置硬碟分割。在此我選擇第二個選項「Guide - use entire disk and set up LVM」,這樣子安裝完之後才能順利啟動。

張百川是選擇「Guide - use entire disk」,我一開始也是用這種方式安裝,但安裝完成開機之後卻無法正常啟動。

image

然後選擇要安裝的硬碟。這一顆是剛剛在建立VirtualBox虛擬機器時一併建立的虛擬硬碟。

image

OSSIM會要你確認硬碟分割的設定,選擇「Yes」,然後按「Continue」,並進入漫長的硬碟分割與安裝程序。

2-4. 設定root密碼

image

接著OSSIM會要求你設定root的密碼。這個密碼與實際上使用OSSIM管理介面時使用的密碼並不相同,是管理整個OSSIM伺服器的密碼。

填入兩次相同的密碼之後,再按「Continue」繼續。

2-5. 不要更新

image

OSSIM會問你要不要確認更新。這個動作需要網路連線,但目前我們的網路並沒有正確的設定,所以在此請選擇「NO」不更新,然後按「Continue」進入最後的設定過程。

未來如果要更新OSSIM更新的話,可以再安裝完成的OSSIM伺服器的指令列模式中輸入「ossim-update」指令來更新即可。

image

最後再經過一個確認畫面,OSSIM就安裝完成,並直接重開機進入OSSIM作業系統。

3. OSSIM網路設定

進入OSSIM作業系統之後會是Linux的命令列。

因為網路並沒有設定好,所以不時會出現以下錯誤訊息:

* Starting Network Intrusion Detection System  snort_eth0
...done.

請先不用理會它,讓我們先登入、設定網路吧。

3-1. root登入

請在登入訊息中輸入「root」,按下enter,然後再輸入你剛剛設定的密碼。

如果順利登入的話,就會出現像上圖一樣的訊息。

3-2. 修改網路設定

接著是來將OSSIM的網路改成DHCP設定。請輸入以下指令開啟網路設定的檔案:

opensourcesim:~# vim /etc/network/interfaces

這邊使用的是VIM編輯器。如果你不太熟VIM怎麼使用,請參考鳥哥的VIM介紹

我將原始的靜態網路設定註解掉,然後加入DHCP的設定。最後的設定檔如下,注意紅字的部份:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
#iface eth0 inet static
# address 140.119.61.252
# netmask 255.255.255.0
# network 140.119.61.252
# broadcast 140.119.61.255
# gateway 140.119.61.254
# # dns-* options are implemented by the resolvconf package, if installed
# dns-nameservers 140.119.1.110
# dns-search alienvault

# DHCP configuration
auto eth0
iface eth0 inet dhcp


編輯完之後,儲存後離開設定檔即可。

3-3. 重新啟動網路

編輯完網路設定檔之後,還要重新啟動網路才能生效。

重新啟動網路的指令如下:

opensourcesim:~# /etc/init.d/networking restart

順利的話會出現以下訊息:

* Reconfiguring network interfaces...                                                                There is already a pid file /var/run/dhclient.eth0.pid with pid 1657
illed old client process, removed PID file
nternet Systems Consortium DHCP Client V3.1.1
opyright 2004-2008 Internet Systems Consortium.
ll rights reserved.
or info, please visit http://www.isc.org/sw/dhcp/

istening on LPF/eth0/08:00:27:4f:6b:e2
ending on LPF/eth0/08:00:27:4f:6b:e2
ending on Socket/fallback
HCPRELEASE on eth0 to 10.0.2.2 port 67
nternet Systems Consortium DHCP Client V3.1.1
opyright 2004-2008 Internet Systems Consortium.
ll rights reserved.
or info, please visit http://www.isc.org/sw/dhcp/

istening on LPF/eth0/08:00:27:4f:6b:e2
ending on LPF/eth0/08:00:27:4f:6b:e2
ending on Socket/fallback
HCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7
HCPOFFER from 10.0.2.2
HCPREQUEST on eth0 to 255.255.255.255 port 67
HCPACK from 10.0.2.2
ound to 10.0.2.15 -- renewal in 40340 seconds.
[ OK ]

3-4. 重新啟動OSSIM伺服器

設定網路之後,為了確保OSSIM順利運作,最後再來重新啟動OSSIM伺服器。重新啟動的指令如下:

opensourcesim:~# reboot

3-5. 更新OSSIM

image

在安裝步驟因為沒有設定好網路連線,所以無法進行更新。現在設定好網路連線之後,我們就可以來幫OSSIM更新了。更新的指令如下:

opensourcesim:~# ossim-update

在更新的過程中OSSIM會要你確認許多資料。根據OSSIM的統計,要先下載292MB的資料來準備更新,更新之後會額外安裝27MB的檔案,因此整個更新要花上非常長的一段時間。

4. 登入OSSIM管理介面

4-1. 開啟OSSIM管理介面

OSSIM的管理介面可以直接用HTTP連線開啟它的網頁。預設是使用瀏覽器輸入OSSIM的IP,就能夠打開它的管理介面。但是由於我們是使用VirtualBox的NAT模式,並設定了連接埠轉遞,將80轉成61080,所以實際上要加上轉遞過的連接埠。

舉例來說,假如我現在的IP是「140.119.61.254」,而我以連接埠轉遞設定61080轉到OSSIM的80,那麼連線網址就是「http://140.119.61.254:61080」。

4-2. 登入OSSIM

開啟後的畫面如下圖所示。

 2011-07-21_145436 login (mask)

第一次登入時,請輸入以下資訊:

  • User: admin
  • Password: admin

然後按下「Login」登入。奇怪的是,OSSIM好像會用JavaScript幫我在密碼上動點手腳,不知道是不是我的錯覺。

4-3. 設定管理者密碼

2011-07-21_153350 password (mask)

第一次登入時OSSIM會要求我們設定密碼。請輸入兩次相同的密碼再繼續。

4-4. 進入OSSIM主介面

2011-07-21_153904 main (mask)

好,終於順利登入OSSIM了,接下來就可以開始使用OSSIM囉!


結語:不一定能順利安裝成功

image

因為寫這篇文章要截圖,所以我重灌了幾次OSSIM。但是最近一次重灌卻沒有辦法順利成功,儘管都是用一樣的設定方式,卻出現了硬碟找不到的錯誤訊息:

fsck.ext2: No such file or directory while trying to open /dev/hda1

雖然這不太像是數位檔案該有的行為,但可能安裝的時候也要有點運氣吧。

原本我在這篇寫了一些知識管理功能(Knowledge DB)的評估與討論,但是寫一寫覺得這樣會讓這篇文章太過雜亂,所以後來就讓這些討論獨立成一篇文章了。

不管怎麼說,光是這些東西就花了我一整天的時間,而且OSSIM的知識管理功能也沒有達到我希望的程度,不禁令人有種白費工夫的無奈感啊。

(more...)