• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • TCPD與使用IPFWADM來設定防火墻

    發表于:2007-07-02來源:作者:點擊數: 標簽:
    內容摘要: 本文扼要地介紹, 在系統里設定 inetd 服務, 以增進系統 安全 的方法, 我們把焦點放在 IPFWADM 這個系統管理工具, 以及 inetd 服務的設定上面。 首先, 我們必須厘清什麼是 inetd。 簡單地說, inetd 是一個伺服程式, 用以控制主機連上網路時

    內容摘要: 本文扼要地介紹, 在系統里設定 inetd 服務, 以增進系統安全的方法, 我們把焦點放在 IPFWADM 這個系統管理工具, 以及 inetd 服務的設定上面。

    首先, 我們必須厘清什麼是 inetd。 簡單地說, inetd 是一個伺服程式, 用以控制主機連上網路時, 所提供的各項服務。 您有可能會遇到一部電腦, 其預設狀況并未設定好 inetd 來控制所有的服務, 因此, 第一件事, 便是找出 /etc/inetd.conf 檔案, 并檢查有哪些現存的服務由它控制 ( 也就是沒有 “#“ 符號開頭的那幾行內容 )。 給您的第一個忠告就是, 除非真的需要這項服務, 不然千萬別啟動它, 那些從未使用的伺服程式里, 可能藏有臭蟲, 避免有人利用此類漏洞入侵的最好方法, 就是不要用它。 假設讀者手邊有一份 inet.conf 檔案的內容, 接下來我就解譯一下里頭的意義。

    舉例來說, 下面這一行:


    ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a

    第一個字是所提供的服務名稱 ( 本例中指的是 “ftp“, 我們可以另外在 /etc/services 檔案里, 查出它所連結的是哪一個埠號 )。

    第二個欄位是所開啟的 socket 類型,它可以是: stream ( 如本例即是 )、 dgram、 raw、 rdm、 或 seqpacket。

    接下來的欄位是所使用的通訊協定, 您必須先在 /etc/protocols 檔案中宣告, 在前例中, 我們假定您已經在此檔里宣告了 TCP 通訊協定。

    在通訊協定之後, 接著是 wait/nowait 的欄位。 除了 datagram (dgram) 類型之外的 socket, 其他都應該是 nowait, 至於 datagram 類型的 socket, 如果伺服程式支援多執行緒, 那麼我們應該設定 nowait, 如果伺服程式僅支援單一執行緒, 那麼請設定為 wait。 原因是多執行緒系統, 當其收到連線要求時, 它會啟動一個新的 process, 然後再把原本的 socket 釋放掉, 讓 inetd 可以繼續 listen 其他的連線要求, 因此要使用 nowait。 在單一執行緒系統的場合, 則需要設定為 wait, 因為伺服程式會一直守著同一個 socket, 而不能另外產生 process 以供連結。 除此之外, 還有一些格式上的變化, 我們可以寫成 nowait.50 -- 代表短時間內, 最多可以啟動 50 個伺服程式 ( 從另一個角度來看, 或者可以說, 是接受這麼多個連線要求 )。 其預設值是 40 個。

    第五個欄位, 指明了伺服程式, 是以哪位使用者的名稱來執行, 在這個例子中, ftp 是以 root 這個使用者名稱來執行。

    第六個以及接下來的欄位, 便是執行的程式與其所接的參數了。 在我們的例子當中, 伺服程式 tcpd 被啟動, 後頭接了伺服程式 in.ftpd 與 -l -a 為參數。 接下來, 我們就要來談談最有趣的部份, TCPD 的設定問題。

    嗯, tcpd 是個用來過濾連線要求的伺服程式, 它會根據哪個伺服程式即將被啟動, 來決定做哪些事, 以向提出這些連線要求的 IP 位址, 做出回應的動作。 而究竟會怎麼做決定, 則視 /etc/hosts.allow 與 /etc/hosts.deny 這兩個檔案如何設定。

    原則上, /etc/hosts.deny 檔案是用來指定拒絕向哪些主機提供服務, 而 /etc/hosts.allow 檔案則是用來指定允許向哪些 機提供服務。

    這兩個檔案的設定格式如下:


    DAEMON: IP[: OPTION1 [: OPTION2 ]]

    上述的 DAEMON, 可以是想要啟動的伺服程式名稱, 如前例中所示的 in.ftpd, 或者是 ALL 這個字, 它代表著所有的伺服程式。

    IP 可以是某個特定的 IP, 或是某個 URL, 或是某一范圍的 IP ( 或 URL ), 或者是等一下會解釋到的萬用字。

    為了能夠指定某一范圍的 IP 位址, 例如說, 我們可以這樣寫: `123.32, 這個表示方式, 代表了 123.32.XXX.XXX 的所有 IP, 同樣地, 像 `.ml.org 可以用來指定某一范圍的 URL, 它代表所有 ml.org 底下的子網路。

    以 IP/MASK 之格式來指定某一范圍的 IP, 則是更為傳統的方法, 舉例來說, 從 127.0.0.0 到 127.0.255.255, 此一范圍的 IP 可被指定為 127.0.0.0/255.255.0.0

    前面提到的萬用字有:


    ALL 代表檔案里, 所有可能的數值都是允許的LOCAL 會符合到所有名稱里沒有 ^?^?的主機UNKNOWN 代表所有名稱或 IP 位址為未知的主機KNOWN 代表所有名稱及 IP 位址均為已知的主機PARANOID 代表所有名稱與 IP 位址并不一致的主機

    前面提到的選項有:


    allow 不管 hosts.allow 與 hosts.deny 檔案里的設定為何, 符合此一設定條件者, 都接受其連線要求。 這個選項設定, 應該置於該行的最後面。 deny 類似上面的選項設定, 不過, 它是用來指定拒絕連線的條件。 spawn 當收到連線要求時, 會啟動一個命令殼的指令, 譬如說, 可以在每次有人想要從外面, 連進我的機器時, 執行一個嗶聲通知。 twist 這個和 spawn 選項類似, 不過, 當命令殼指令執行完畢後,連線狀態便會中斷。 此一選項, 同樣必須置於設定行的最後面。

    上述的最後兩個選項,還可以配合適當的擴充字元給 tcpd 使用, 這些擴充字元有:

    %a 客戶端主機的位址 %c 客戶端的資訊 ( 可能是像 , 或是其他由客戶端所得的資訊 ) %d %h 在可以取得的情況下, 這會代表客戶端的名稱或 IP 位址 %n 客戶端的名稱 %p 伺服程式的 PID %s 伺服端的資訊 ( 例如 或只有 daemon 之資訊, 視情況而定 ) %u 客戶端使用者的名稱 %% 這是表示 % 這個字元配合這些擴充字元與選頁, 您已經可以做很多事了, 例如, 我知道有人設定成, 一旦有人想要經由 telnet 連進他的主機, 便自動送出一個 teardrop 攻擊 :)

    附注: teardrop 是一種 Dos ( Denial of Service, 會造成系統重新開機, 或重新起始化的攻擊方式 )。 它是因為 TCP 封包重組時的臭蟲而起, 多數的作業系統都有這個問題 ( 或者說, 以往的作業系統是如此, 因為許多的核心程式已經針對此問題, 加以修正了 ), 在 InterNet 上的資料, 是透過 TCP/IP 通訊協定來傳送 ( 此一通訊定, 在其他類型的網路上也可以看到, 譬如像 intranet 就是 ), 實際上, 它是兩種通訊協定: TCP 負責將資料, 加以分割成一段段的封包, 然後再把它傳給 IP 通訊協定, 由它送往目的地; 一旦資料送達目的主機後, TCP 通訊協定會檢查, 是否所有封包都完整, 然後再將它們重組成原本的資料。 然而, 上述 ( 以及許多根據此一原理 ) 的攻擊方式, 利用多數的作業系統, 在重組封包之前, 不會檢查封包過小的問題, 因此, 這樣的機器在重組封包後, 就會發生錯亂的狀況。 顯然地, 對此在下并不確定怎樣才是完整的解釋, 因此歡迎大家提出各式批評與指教。 好的, 經過上述的簡短解釋後, 讓我們繼續...

    例:


    #hosts.allow

    ALL: 127.0.0.1 # 允許 localhost 進入做所有事

    in.ftpd: ALL: spawn (wavplay /usr/share/sounds/intruder.wav & ) # 讓所有人都可以透過 ftp 進入, # 但會啟動一個聲音檔 ( 因此它可以警告我 )

    in.telnetd: ALL: twist ( teardrop %h %h ) # 所有人想要透過 telnet 的話, # 送回一個teardrop 的攻擊

    #fin

    #hosts.deny

    ALL: `.bsa.org # 禁止來自 bsa.org 網域的所有連線

    in.fingerd: ALL # 禁止所有的 fingerd 服務 :)

    #fin

    關於 tcpd, 我想說的就是這些了, 因為所學有限, 可能講得不夠好。 在下的建議是, 試著去實驗一些設定項目, 并且熟讀線上手冊 ( tcpd, host_acess(5) 的 manual pages ), 相信讀者可以學得比我所教的還要多。接下來, 讓我們進入

    I

    PFWADM

    工具程式的部分。


    首先, 不可或缺的是, 要把核心程式中, 有關 IP Firewalling 的支援加入 ( Networking -> Network firewalls + IP: firewalling )。 接下來, 重新編譯及系統重新開機後, 我們就準備好可以使用這個工具了。

    IPFWADM 可以讓我們管理某些程式 ( 這些應用程式, 并不限於我在本文中所介紹的 ), 其 TCP、 UDP、 ICMP 封包的進出狀況。 簡單地說, 管理員可以規定哪些封包才允許進入, 可以指定的條件包括: 來自於某個 IP、 或某段 IP 范圍的主機, 哪一個特定的埠號, 哪一種特定的通訊協定, 或是上述各種條件的組合... 同樣地, 對於準備送往主機外的封包, 我們也可以具有相同程度的管理控制。

    ipfwadm 有幾種主要的參數:

    -A 指定記錄 (aclearcase/" target="_blank" >ccounting) 之處理方式 -I 指定準備進入主機內的封包 (incoming packets) 之處理方式 -O 指定準備送往主機外的封包 (outgoing packets) 之處理方式 -F 指定封包轉送 (forwarding) 之處理方式 -M 用來進行 IP masquareding 的管理 本文中, 我只打算介紹 -I 與 -O 參數, 它們兩者都具有相同的語法。

    這些參數的選項有:


    -a 在表單後面加進一個或多個處理方式 -i 在表單前面加入一個或多個處理方式 -d 從表單里面刪除一個或多個處理方式 -l 顯示表單上面的處理方式 -f 刪除表單上面所有的處理方式 -p 指定哪些封包一定被 acceppted (a)、 denied (d) 或 rejected (r) -c 檢查某個封包準備進入時, 其應用哪些處理方式 -h 輔助說明 重要的參數有:


    -P 指定某個表單上, 處理方式所作用到的通訊協定。 這里的通訊協定, 可以是 TCP、 UDP、 ICMP 或 all ( 表示所有的通訊協定 ) -S 指定封包的來源位址。 其格式為: ADDRESS[/MASK] [PORT] 舉例來說, 像這樣 123.32.34.0/255.255.255.250 25 便代表從 123.32.34.0 到 123.32.34.5 的 IP 范圍 -D 指定封包的目的位址, 其格式與 -S 相同原則上, 這些都是最基本的參數, 因此, 想要讓所有從我的電腦發出的封包, 能夠到達我自己的電腦, 可以這樣設定處理方式:

    i

    pfwadm -I -i a -S 127.0.0.1


    還想要擋掉來自於 123.34.22.XXX 的封包, 可以這樣設定:

    i

    pfwadm -I -a d -S 123.34.22.0/255.255.255.0


    接下來, 如果除了 111.222.123.221 這個 IP 之外, 我想要擋掉所有其他對於 netbios 埠號的連線要求, 可以這樣設定:

    i

    pfwadm -I -a a -P tcp -S 111.222.123.221 139 ipfwadm -I -a d -P tcp -D 0.0.0.0/0 139

    就這些!

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>