歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

構建一個軟盤防火牆

  這裡,介紹一種通過floppyfw軟件包將一台舊PC設置為包過濾防火牆的方法。該防火牆的特點是:1、僅需要一張軟盤就可以啟動運行;2、完全運行在RAM中;3、以ipchains為過濾規則。這種防火牆還支持IP地址隱藏(IP masquerading)、端口轉發、並能夠通過syslog將日志記錄到遠程主機上。所有這些工作都可以運行在一台只有8 MB RAM並且沒有硬盤的計算機上,真的難以置信! Floppyfw的作者Thomas Lundquist將它形容為“具有防火牆功能的Linux路由器(screening router)”。Floppyfw通過Linux內核啟動,並且提供了實現上述防火牆功能的最小工具集。這是它的一個重要特性,因為即使一個入侵者采用某種手段進入了防火牆,他也沒有很多可以對造成損害的工具可用。另外,因為防火牆完全運行在RAM中,所以只需要通過軟盤重新啟動就可以將系統恢復到最初的狀態。 同許多其他的Linux工程一樣,floppyfw具有自定制特性。但是,在這裡向推薦所發現的一系列幾乎可以立即執行的過濾規則,這樣就可以快速構建自己的防火牆了。 硬件需求 一台比較合適的計算機(或者是足以組裝一台的部件),它應該是一台386以上的計算機,基本配置如下: 最少8-MB RAM 3.5"軟盤驅動器 顯卡 鍵盤 顯示器 注意,如果想讓floppyfw自主運行,可能只是在配置與測試的時候才需要鍵盤和顯示器。 需要安裝一對網卡,floppyfw支持下面幾種類型的網卡: 3Com 3c509 NE2000 compatibles Tulip-based Intel EtherEXPress PCI 要保證每塊網卡都有各自的中斷號(IRQ)和內存地址。中斷號(IRQ)和內存地址在有跳線的網卡上設置起來很簡單。使用的是一對兒3Com 3c509網卡,當第一次啟動計算機時,這兩塊網卡的配置都是IRQ 10和0x300。是用3Com公司的DOS實用程序3C5X9CFG.EXE解決這個問題的:首先,制作一個DOS啟動盤,並將3C5X9CFG.EXE拷貝到該盤上;然後用這個軟盤啟動計算機並運行3C5X9CFG.EXE(當然,兩個網卡都要插在主板上);選擇其中一塊網卡,為其選擇一個新的IRQ和內存地址;對另外一塊網卡也重新進行配置,記住,要保存新的設置。是在EtherDisk 4.3上找到3C5X9CFG.EXE的,可以在3Com的官方網站http://www.3com.com/上找到最新版本的EtherDisk。 軟件需求 制作floppyfw引導盤很簡單,首先需要在這裡(http://www.zelow.no/floppyfw/download/)下載最新的穩定版映象),然後將映象寫到軟盤上: # dd if=floppyfw-1.0.5.img of=/dev/fd0 bs=72k 配置 這個軟盤是DOS (FAT)格式的,必需首先在另外一台計算機上編輯配置文件之後才能啟動它。常常可以使用Linux的mtools,方法如下: $ cd /tmp $ mcopy a:config $ vi config $ mcopy config a: 如果使用的是其它操作系統,完全可以使用NotePad來完成這些工作。 實際上,floppyfw有5個配置文件: config (主配置文件) firewall.ini (過濾規則) modules.lst (附加的ip_masq模塊) syslinux.cfg (內核引導參數) syslog.cfg (syslog配置,類似於/etc/syslog.conf) 可能根本不必關心syslinux.cfg和modules.lst,在這裡僅僅討論一下主配置文件config,為了盡量說明問題,這裡去掉了大部分注釋內容。其中的大部分值的含義是顯而易見的。只是文件最後的這些開關項可能有些不好理解: OPEN_SHELL控制控制台的shell訪問(/bin/ash)。 如果計算機的RAM 不足12 MB,將ONLY_8M置為"y"。


USE_SYSLOG決定syslogd是否運行。 SYSLOG_FLAGS表示的是syslogd啟動時傳遞給它的一些標記信息。 文件1(FTP://ftp.mfi.com/pub/sysadmin/2001/jan2001.tar.z)中的是定制的config文件。順便提到的是,沒能讓floppyfw與的撥號提供商的DHCP協調工作起來。可能他們用的是一些奇特的非標准DHCP服務器。但是,采用了一種就像是有一個靜態的IP地址一樣的方法解決了這個問題。到現在已經正常運行兩年了,說不准的會運行多久。 過濾規則 現在來看看firewall.ini文件。與floppyfw一起發布的原始firewall.ini文件僅僅設置為基本的地址隱藏和拒絕少數幾個端口。由於正在構建一個防火牆,因此必需對其進行必要的修改。但是,建立功能齊全的包過濾規則需要大量的工作。理論上講,希望先關閉所有的端口,然後再根據將使用的服務打開必要的端口。不要緊張,其實大部分工作已經有人做好了! 是從Robert L. Zieglers的主頁http://linux-firewall-tools.com/linux/faq/index.Html上的ipchains示例文件著手的。 Ziegler也是《Linux Firewalls》(New Riders Publishing, ISBN: 0735709009----人民郵電出版社已經於2000年10月出版的這本書的中譯本)一書的作者,他定制的規則都有很不錯的注釋,並且對每項設置的目的都給出了詳細的解釋。當需要打開某些端口時,這些注釋是再寶貴不過了的! 這裡采用的ipchains規則藍本可以在這裡獲得http://linux-firewall-tools.com/ftp/firewall/rc.firewall.ipchains。 建議首先將這個文件通讀一遍,不能隨便地拿來就用。有些部分甚至包含一些帶有"OR"標記的“二選一”片段,必需根據需要進行取捨。只要將前面的注釋去掉,就可以激活配置項了。 在有限的軟盤存儲空間中存儲如此大的規則文件顯然是不經濟的,最好將認為可能永遠也用不到的部分刪掉以節省磁盤空間的占用。在方便的地方保留一個原始文件的備份以防萬一當然是一個比較明智的做法。如果已經完成配置並將其寫到軟盤中,最好為該軟盤制作若干拷貝,免得軟盤損壞了又給添亂。 清單2(ftp://ftp.mfi.com/pub/sysadmin/2001/jan2001.tar.z)提供了一個經過修改了的firewall.ini。為了避免進行太多的全局編輯和可能對一個或多個規則造成的破壞,在文件的開頭進行了簡單的變量替換,這樣就可以將floppyfw的變量傳給Ziegler所采用的相應的變量。某些情況下,如果沒有合適的變量可用,就直接設置那些值。 根據清單2會體會到為了打開允許的內部網客戶機訪問一些基本的網絡服務(諸如DNS、SMTP、POP、NNTP、TELNET、SSH、FTP、HTTP和WHOIS等)的端口的方法。注意,沒有打開POP端口,而是采用fetchmail取得遠程服務器上的郵件。如果擔心從遠程主機上接收郵件時可能會被別人監聽的話,可以選擇fetchmail。因為fetchmail有一個非常好的特性,它允許首先建立一個SSH連接,然後通過這個連接下載的郵件。這種情況下的確不需要打開POP端口。 記錄日志 如果使用缺省的syslog.cfg文件,floppyfw會將所有的日志發送到控制台。是采用“無意識”(或者說是沒有顯示器或鍵盤)方式運行的防火牆計算機的,所以卻省配置對來說沒有什麼用處。但是,想通過分析日志文件來監視防火牆當前的運行狀況,下面就是的解決方法: 將內部網的一台安裝了Linux操作系統的計算機配置成日志主機。為了做到這一點,確保的日志主機上的syslogd是帶-r選項啟動的,這個選項允許這個守侯進程接收網絡上傳遞過來的日志消息(例如,在Red Hat系統中,需要編輯/etc/rc.d/init.d/syslog來做到這一點)。然後,配置syslog.cfg文件,一定要將192.168.1.2改成日志主機的IP地址。可以在清單3(ftp://ftp.mfi.com/pub/sysadmin/2001/jan2001.tar.z)中取得syslog.cfg文件。 一旦完成了這些文件的配置工作並且寫回到了軟盤中,就可以通過軟盤啟動並進行一些測試工作了。在確保的內部網絡計算機可以相互通信的前提下,檢測一下是否可以訪問已經為其打開端口的外部服務。如果將日志記錄在遠程主機上,請密切關注/var/log/messages,否則注意力必需放在防火牆計算機的控制台屏幕上,它們提供了監視防火牆當前工作狀況的線索。可能需要將的防火牆規則配置得更巧妙,但是不要忘了將修改後的結果寫回軟盤哦。 一定要密切關注的日志文件。當最終將防火牆投入使用後,可能會驚奇地發現有那麼多的人正在在進行端口掃描或其它一些奇奇怪怪的事情,有了自己的防火牆,感覺很不錯吧?

參考資料 Thomas Lundquist設計的floppyfw:http://www.zelow.no/floppyfw/ Robert L. Ziegler 編著的《Linux Firewalls》:http://linux-firewall-tools.com/linux/faq/



Copyright © Linux教程網 All Rights Reserved