最近更新日期:2007/09/22
1. 防火牆基礎
2. knockd 的使用 2.1 knockd 的功能與特色 2.2 knockd 的安裝 2.3 knockd 的設定與啟動--以 SSH 為例 3. knock 用戶端處理方式 3.1 用戶端為 Linux 系統 3.2 用戶端為 Windows 系統 4. 針對本文的建議:http://phorum.vbird.org/viewtopic.php?p=127903#127903 防火牆基礎
一部伺服器的維護與管理當中,最重要的是更新所提供的服務之軟體程式,
以避免可能會遭人入侵的漏洞問題。舉例來說,如果開放 WWW 就得要隨時更新 Apache 這支程式才好。
再來則是訂定一系列的災難復原標準操作行為,接下來才是防火牆的設定。所以說,防火牆的重要性還比不上軟體更新喔!
但是防火牆還是有他存在的必要啦,底下來簡單的說一說原因吧。
一般來說,在 Linux 伺服器上頭的封包過濾式防火牆主要有兩種,(1)是 Linux 核心支援的 iptables , (2)則是利用 TCP Wrappers (或 xinetd 這個 super daemon) ,亦即是利用 /etc/hosts.allow, /etc/hosts.deny 這兩個檔案來管理的方式。利用 iptables 可以即時更新防火牆機制,而且效能也是很不錯的。 至於使用 TCP Wrappers 的話,那就得要針對 /etc/hosts.{allow,deny} 修修改改的囉。 基本上,只要妳想要架設防火牆的話,就得要針對特定或不特定的 IP 來源進行開放或拒絕的動作。 所謂的『特定』指的是例如 192.168.0.0/24 或者是某個特定的 IP 或主機名稱,或者是某個特定的協定 (如 port 80) 等。 而不特定在這裡的意思表示針對整個 Internet 開放的意思。如果妳對於防火牆還有其他的問題, 可以先參考一下鳥哥之前寫的一篇 簡易防火牆 再說。 在這一章當中,鳥哥假設您已經學會 iptables 的相關語法與觀察的指令了。 雖然很多人都覺得防火牆是一部主機管理上最重要的地方,但其實鳥哥之前就曾談過, 防火牆基本上是沒有什麼用途的! ^_^!因為無論如何,妳都得要開放某些服務給用戶端登入對吧! 如此一來,防火牆當然無法抵擋對你所開放的服務之連線啦! 但防火牆也不是一無用處,至少他可以將伺服器所提供的網路服務『侷限』在某些特定的範圍內。 怎麼說呢?底下我們來舉個例子好了。 鳥哥有些 Linux 主機放置到崑山科大資訊傳播系內, 而且鳥哥常常需要在沒有固定 IP 的地方連線到這部主機上面進行操作,以秀給大家看一下主機的設定或者是一些 Linux 相關議題。 因為鳥哥所在的用戶端沒有固定 IP ,所以是否就得要針對整個 Internet 來開放那個可怕的 sshd 的服務嗎? 要注意, sshd 可是個很危險的服務喔,因為只要使用者登入主機,那麼他能夠作的事情實在太多了! 所以不要將 sshd 對整個 Internet 開放才好。您說是吧? 既然 sshd 不對整個 Internet 開放,然而鳥哥所在的位置又是非固定 IP 的來源,那我這部 Linux server 的防火牆要如何針對 sshd 進行設定啊?難道無解嗎?呵呵!沒問題,我們可以利用 knockd 這個 daemon 來負責的啦! 底下我們就來談一談 knockd 這個咚咚吧! knockd 的使用
為了解決非固定 IP 來源用戶端的連線問題,我們可能得要手動的加入用戶端的防火牆設定於防火牆規則當中。
這很麻煩啦!那有沒有自動的方式可以讓防火牆規則自動的修改的?是有的∼那就是利用 knockd 這個服務。
底下讓我們來談談這個玩意兒的特色與使用方式吧!
knockd 的功能與特色
knockd 主要的目的是希望可以動態的修改防火牆規則,他的運作流程是這樣的:
圖一-a、用戶端必須要『依序』對某些埠口進行連線的動作 圖一-b、若通過 knockd 對埠口的設定,則 knockd 會動態的增加防火牆規則,且用戶端可以連線了 圖一-c、若用戶端離線,或者是 knockd 等待逾時,則 knockd 可主動的刪除剛剛建立的規則 您可以看到,防火牆的規則本來是關閉的,然後在用戶端依序碰觸某些埠口後, knockd 就能夠『僅針對此一 IP』啟動某些特定的埠口,此時用戶端就能夠透過這個特殊的埠口進行主機的連線。 並且可以在用戶端斷線後,將該防火牆規則拿掉!呵呵!如此一來,我們不論是在何處, 就可以使用這個功能來開啟某些比較危險的服務啦,例如 sshd 這個 port 22 囉! knockd 的安裝
knockd 的安裝非常簡單,因為他除了提供 Tarball 之外,還提供 SRPM 哩!所以安裝方面非常容易!
鳥哥是將 knockd 安裝在 CentOS 5.x 上面的,所以使用 RPM 來測試給大家看看。
如果妳想要安裝 Tarball 的話,可以參考這一篇的說明:
Tarball 與原始碼 。至於 knockd 的下載可以參考:
讓我們開始安裝吧!
knockd 的設定與啟動--以 SSH 為例
在開始玩 knockd 之前,請務必使用 man knockd 去查閱一下詳細的設定方法,
這很重要啊!不然妳不會知道底下設定檔的意義喔!好了,我們知道 knockd 是藉由偵測 port 來動態進行防火牆規則的修改,
所以我們當然就得要有設定檔啦。使用 RPM 安裝時,預設的設定檔在 /etc/knockd.conf ,
這個檔案的原始內容是這樣的:
knock 用戶端處理方式
既然 knockd 需要接觸伺服器的數個埠口,那麼用戶端該如何接觸呢?很簡單啊∼
妳可以使用 telnet 發送封包,也可以使用 knock 這個用戶端指令來處理。
knock 很不錯的地方,在於他同時提供 Linux/Windows 那個用戶端程式!
鳥哥也建議使用 knock 即可,因為使用 telnet 常常無法成功,真煩人∼
底下讓我們來實際測試看看囉:
用戶端為 Linux 系統
如果用戶端是 Linux 系統時,請前往前面安裝的地方,妳只要安裝 knock 即可,不需要安裝 knock-server 的啦!
那這個程式如何使用呢?非常簡單,只要這樣做即可:
用戶端為 Windows 系統
若用戶端為 Windows 系統時,knockd 官網已經很好心的將 knock 的用戶端軟體編譯成為 Win32 能執行的二進位檔案
(binary file) ,所以妳可以直接下載來使用。若需下載,請按底下的連結吧:
由於檔案是壓縮檔,因此妳必須要先解壓縮才行。解壓縮完畢後,進入新建的目錄會有底下的檔案: 圖二、Windows 用戶端使用的 knock 軟體 上面的檔案都是原始碼,給大家參考用而已。在那個 Release 目錄內的檔案才是可執行檔。 建議妳可以將檔名為 knock.exe 的檔案 (在 Release 目錄內) 放置到 C:\Windows 底下, 這樣妳才可以在任何地方直接下達 knock 這個指令。接下來請打開 DOS 視窗,亦即『開始』-->『執行』 在出現的視窗當中輸入『 cmd 』,就能夠取得終端機了。之後的指令就如同 Linux 環境囉!
參考資料 2007/09/19:討論區的老周兄一直建議的好軟體,鳥哥來將他寫成簡單的文件吧! 2007/09/22:根據老周的來信,確認 iptables.rule 不需要修改!沒有開放 port 也可以。感謝 jou ! 2007/09/19 以來統計人數 |
|||||||||