2009年11月21日星期六

Apache Server(1)

世界上最知名的http service使用的軟體大概就是apache了,在fedora跟ubuntu的安裝都是蠻簡單的,只是名稱不大一樣orz

apt-get install apache2
yum install httpd

安裝完畢之後,輸入http://localhost/就可以看到一個首頁,其實這是個error page而非正常的index page
在設定檔的部分,兩者也有不同,我已經不知道是誰修改了apache(雖然說基本原則一樣),設定的方式還有些差別
以fedora來說,所有的設定幾乎集中在一個檔案/etc/httpd/conf/httpd.conf下面,其他的設定檔案放在/etc/httpd/conf.d/這目錄底下
ubuntu則是把httpd.conf這個精簡化到幾乎只有ServerName,其他一般設定放置在/etc/apache2/apache2.conf內,再把一些模組的設定分散到各個目錄內,全部都在路徑/etc/apache2下
  • mods-available
  • mods-enabled
  • sites-available
  • sites-enabled
這四個目錄,分別放置可用的module跟啟動的module,還有可用的site功能(如virtual host)跟啟用的site功能,其中modes-enabled跟sites-enabled裡面其實只是link到另外兩個目錄的檔案,如果要啟用功能使用a2enmod/a2ensite就可以
另外script使用的方式是
#fedora
/etc/init.d/httpd start|stop|restart
#ubuntu
/etc/init.d/apache2 start|stop|restart
經過以上的說明,相信大家大概都知道,為何同樣的東西,我說在fedora跟ubuntu用起來不大一樣了吧

2009年11月20日星期五

DNS概念(3)

如果所有的查詢紀錄都要每次都由root的Server開始,會非常的消耗網路資源,所以預設的DNS會做cache,比方說www.google.com這個網路名稱常常被查詢,就把他cache下來方便往後的查詢,所以預設的DNS會先檢查自己的zone data跟著看看cache有無資料,接著如果沒有再去網路上抓取,抓取回來的資料會放到cache data裡面
作Cache有些議題需要注意的,雖然因為不用反覆查詢可以有效的降低網路頻寬且同時可以有較快的回應速度,但是他的更新並不及時,如果Cache資料太久就會發生,其實這個Name已經轉換到其他IP的問題,但是如果頻頻更新cache又會有效能不彰的問題

DNS也有另外一個重要的紀錄就是Mail Server的認證,比方說當一個Client要寄信到xxx@MailServer2Name的時候,他會先查詢自己的smtp主機name,把信件送到Mail Server 1,當Mail Server 1收到這個信件,並確認Client是他所允許的用戶端的時候,他會接著查詢Mail Server 2的名稱,將這封信轉送到Mail Server 2去,當Mail Server 2收到來自Mail Server 1的要求的時候,他也會去檢驗Mail Server 1的MX紀錄是否存在DNS內
底下就是一個沒有授權的Mail Server想要傳送信被拒絕的例子,因為接收Request的Mail Server查詢DNS的時候發現,這台Mail Server的MX紀錄並不存在,所以拒絕他的信件

2009年11月19日星期四

DNS概念(2)

Domain的架構大致上是以一個節點以下的sub-domain來說,每個sub-domain都是一個domain。之前有提到一個domain底下有許多sub-domain,又提到DNS是分散式的架構,有一部份是指,管理該domain的server可以把sub-domain授權(delegate)給其他管理者去管理。一旦授權之後,所有該sub-domain的主機名稱跟該sub-domain底下的權限都給該機器管理。

理論上是以domain為單位來看DNS管理,可是實際上卻是用zone的方式,所謂的zone只一台機器的資料庫管理的範圍,他有可能是兩三個domain組成的



在domain的架構完成之後,接著是如何解析,也就是完成Name=>IP這樣的動作,基本上會有幾個角色resolver也就是發出Name=>IP的程式或者host,Name Server也就是管理某個domain的機器,整個查詢會是反覆(iterative)跟遞迴(recursive)的查詢,以底下的圖來說明

一開始resolver會跟預設的DNS Server提出要求,預設的DNS Server會先察看自己的domain跟要求的是否一致,如果屬於自己的管理範圍,則直接回傳IP,如果不一致,則由root開始尋找,root會回應一個管理該sub-domain的name server去負責這件事情,接著預設的DNS Server會改查詢該name server,一直反覆這個動作,直到找到該負責name server記錄者有這筆資料為止,其實上面的過程是一個在尋訪DNS樹狀架構的過程,可以另外以這張圖表示

圖片來自Oreilly的書籍DNS & Bind

2009年11月18日星期三

DNS概念(1)

DNS的起因是IP很難記憶,但是網路上又是利用IP來做為routing的依據,所以勢必要有其他方式,即使是把name對應到IP的方式全部記憶到主機檔案,比方說/etc/hosts,也要面對效能不彰的問題,更嚴重的是,他無法有彈性的架構,比方說今天世界上多了一台機器,你怎麼知道他ip多少呢?
所以DNS就針對這樣的問題發展了出來,一套可以由名稱對應到IP的機制,並且是分散式的架構,一方面可以解決效能的問題,另外一方面可以增加彈性,甚至更多的應用,比方說多個名稱對應到同一個IP
每個DNS伺服器有若干個資料庫,每個資料庫中都充滿了RR (Resource Record),重要的RR簡單列表如下
Domain Record

  • SOA:Start Of Authority
  • NS:Name Server
  • MX:Mail Exchange
Host Record
  • A:Address (IPv4)
  • AAAA:Address (IPv6)
  • CNAME:Alias
  • PTR:Pointer
在進入DNS Server運作之前,要先理解Domain Name的架構。Domain Name是一個樹狀的架構,最上層為root,下面每一層為sub-domain,同樣的,每一層的下層為之sub-domain。
常見的domain name型態有
  • Root是top level domain (TLD)
  • General TLD : .com, .org, .net, …
  • Country TLD : .tw, .ca, .us, …
Domain Name的解讀,由dot (.)分開,也就是由後(root)往前,前面的部分為後面的sub-domain,一個完整的名稱稱為Fully Qualified Domain Name (FQDN),比方說www.kimo.com.,要注意最後面的一個點,雖然一般我們使用的時候並不打出來。接著,在理論上,DN並不允許重複的名稱
圖片來自Oreilly的書籍DNS & Bind

2009年11月17日星期二

process(程序)管理(3)

job control,何謂job,其實好像沒有太嚴格的定義XD,我一般把他當作process的同義詞,或者說一串執行的指令(就不只一個process了),比方說使用awk把/etc/passwd的前一個欄位抓出來並且排序,這樣是一件工作,但是至少就要有awk跟sort兩個processes
如果今天再執行一個要很長執行時間的工作,這時候又有一個比較重要的工作要做的時候,需要先把這個工作放到背景暫停起來,執行優先的動作。比方說你正在備份資料,可是老闆說要看今天的報表,那你只好先把備份的工作站停,然後先去弄報表。只要一個簡單的ctrl+z就可以把目前的工作變成暫停(stopped)的狀態放到背景去
另外一種狀況可能是你再執行一個很長的時間的搜尋,你總不希望他一直佔用的console畫面,讓你不能執行一些其他的工作,linux可是一個多工的作業系統,其實很簡單,只要在指令最後加上&就可以了,這時候工作並不會停止,他會在背景執行(running)
但是如果你使用了上面的方式,你就看不到輸出了,怎麼知道目前我放了哪些工作在背景呢?linux提供了jobs指令,他會給每個工作一個編號,後面fg指令用的到
jobs -l
列出所有背景工作
jobs -r
列出所有背景執行中(&/running)的工作
jobs -s
列出所有暫停(ctrl+z/stopped)在背景的工作

知道了之後當然會想要把他們拿出來用,那怎麼辦呢?fg指令就是把目前在背景的工作帶到前面的指令使用fg %#,比方說fg %3,就是把編號3的工作拿到前景來
如果說想要讓背景的工作由暫停變成執行,但卻不要帶到前景,那可以用bg %#,比方說bg %2是個備份指令,就讓他繼續在背景執行吧

如果不幸這工作因為某些原因,出了問題,想要直接終止他怎麼辦呢?就使用之前的kill指令kill -signal %#,比方說kill -9 %3這樣

2009年11月16日星期一

rkhunter安全工具

因為linux本身有權限的管理,所以不像XP,啥動不動就是administrator,這樣一來要對linux直入病毒跟木馬來大肆破會難度就增高了,所以一班入侵linux跟xp不一樣,就是想辦法取得root權限,就可以為所欲為:P 這樣的工具叫做root kit,是一堆常見的hacker跟craker在用的工具,當然,他山之石,可以攻錯,就有人利用這樣的原理寫出了偵測工具,就是rkhunter

rkhunter可以偵測哪些漏洞呢?其實鳥哥的網站有介紹,簡單擷取如下

  • 利用 MD5 指紋分析
  • 檢查 rootkit 經常攻擊的檔案
  • 檢查是否具有錯誤的檔案權限--針對 binary files
  • 檢查隱藏檔案
  • 檢查可疑的核心模組(LKM/KLD)
  • 作業系統的特殊檢測
  • 檢查已啟動的監聽埠號
  • 特定分析(String scanner)
使用ubuntu安裝很簡單就是apt-get install rkhunter就可以了,他還會幫你加到每天的例行工作內哩,所以你每天就可以收到熱呼呼的rkhunter報告

安裝完畢第一件事情就是
rkhunter --checkall
我建議第一次不要加入--skip-keypress這個參數,好好的把rkhunter做的事情看一遍,有助於理解安全性。我就被抓到一個忘記把ssh的root login的參數設定為no,印象中當時因為某件事情把設定打開就忘記關閉了~囧rz!!
另外一件重要的事情就是要更新阿,沒更新的rkhunter大概跟沒更新病毒碼的防毒軟體一樣,是會過期的,可能會拉肚子阿XD
rkhunter --update
這個指令用來更新

2009年11月15日星期日

nmap簡介

上一篇有提到nmap,它的主要功能是拿來scan port,所以現在來看它是怎樣使用,簡單的用法就是nmap host,這做法是掃描某個host上面的TCP port,如果要連帶掃描UDP則是 nmap -sTU host,結果跟下圖一樣
看到的結果跟我自己想的差不多,除了5353那個zeroconf是啥,說真的到是不知道,不過上網找了之後,似乎也是個無害的服務(?)
接著比較一下netstat的結果,幾乎是差不多的
多了一個57990的port #,從process name來看,好像也是zeroconf的同一掛的

nmap其他參數的用法簡列如下
-sT:用TCP connection掃描
-sS:用TCP syn掃描
-sP:用ping掃描
-sU:用UDP掃描
-sO:用IP為主的protoco進行掃描
-O:除了port scan之外,偵測作業系統類型
-A:除了-O之外,連使用的套件都加以進行偵測

上面的-sP是一個很好用來偵測區域網路哪些主機存活的工具(雖然未必準確,因為主機未必對ping有回應),nmap允許做區網的掃描,比方說對class C的192.168.1.0區域網路掃描
nmap -sP 192.168.1.0/24

nmap有些做法其實很暴力,很容易被人家知道你在進行port scan,所以如果拿去掃描別人的機器很容易招來麻煩,這樣也好,本來這軟體就不應該被濫用