Linux 7.x TCP Wrapper and xinetd(轉)

gugu99發表於2007-08-10
Linux 7.x TCP Wrapper and xinetd(轉)[@more@]

  第一節 概述

  RedHat 7.2 的系統服務存取控制機制主要有兩種:一種是以ipchains或iptables為具體實現的firewall機制,另一種是以TCP Wrapper為具體實現的xinetd機制。本文件主要論述後一種機制的具體實現。

  1 關於TCP Wrapper

  象Telnet、SSH、FTP、POP和SMTP等很多網路服務都會用到TCP Wrapper,它被設計為一個介於外來服務請求和系統服務回應的中間處理軟體。它的基本過程是這樣的:當系統接收到一個外來服務請求的時候,先由TCP Wrapper處理這個請求,TCP Wrapper根據這個請求所請求的服務和針對這個服務所定製的存取控制規則來判斷對方是否有使用這個服務的許可權,如果有,TCP Wrapper將該請求按照配置檔案定義的規則轉交給相應的守護程式去處理同時記錄這個請求動作,然後自己就等待下一個請求的處理。

  TCP Wrapper機制的主要目的在於,來自客戶端的請求只被允許同一個獨立的守護程式(xinetd)直接通訊,而它請求的目標服務被TCP Wrapper包裹起來,這樣就提高了系統的安全性和系統管理的方便性。

  一方面,TCP Wrapper 提高了系統的安全性。系統安全性的具體體現主要有兩點,一個是獲取訪問許可權前的控制,一個是獲取訪問後的處理。獲取許可權前,它會根據/etc/hosts.allow和/etc/hosts.deny定製的規則來判斷對方是否有許可權;獲取許可權後,透過bind、redirect等屬性的設定,可能已經由另一臺主機或者另一個服務在處理了對方的請求,而對方並不會感知中間經過了這樣的處理。

  另一方面,TCP Wrapper更加方便了系統管理。一方面可以抽取系統所有服務共有的屬性放到/etc/xinetd.conf中,另一方面,將每一個服務具體的配置放到/etc/inetd.d目錄下,而每個配置檔案都遵循同樣的語法和規則。

  TCP Wrapper的功能來自於libwrap.a,它是一個網路服務庫,象xinetd、sshd和portmap等許多系統服務編譯時都依賴於它,其他的網路服務程式甚至你自己編寫的網路服務程式都可以加上這個編譯選項來提供TCP Wrapper的功能。

  2 關於xinetd

  然而,TCP Wrapper機制並不是僅僅有了libwrap.a庫就起作用,只有當libwrap.a庫和xinetd服務結合使用的時候才能發揮出TCP Wrapper機制的作用。xinetd是RedHat 7.x的超級守護程式,它提供諸如訪問控制、請求記錄、地址繫結、重定向和資源利用控制等服務。

  RedHat Linux 7.x版本中的很多系統服務都用到了xinetd,象FTP, IMAP, POP, 和 telnet.等。/etc/services中所有的服務透過他們的埠來訪問伺服器的時候,先由xinetd來處理,在喚起對方請求的服務之前,xinetd先檢驗請求者是否滿足配置檔案中指定的訪問控制規則,當前的訪問是否超多了指定的同時訪問數目,還有配置檔案中指定的其他規則等,檢查透過,xinetd將這個請求交付到相應的服務去處理,自己就進入sleep狀態,等待下一個請求的處理。

  Rredhat 7.x開始更加註重系統安全,最大的特徵就是用xinetd.conf代替原來的inetd.conf

  並且7.x中預設安裝沒有開ftp,telnet等熟悉的服務,而是更安全的ssh,7.x還加入firewall等服務增強了系統的安全性。xinetd(eXtended InterNET services daemon)提供類似於inetd+tcp_wrapper的功能,但是更加強大和安全。它能提供以下特色:

  1、 強大的存取控制功能:

  

  • 內建對惡意使用者和善意使用者的差別待遇設定;

      

  • 使用libwrap支援,其效能更甚於tcpd

      

  • 可以限制連線等級,基於主機的連線數和基於服務的連線數

      

  • 設定特定的連線時間

      

  • 將某個服務設定到特定的主機提供服務
  2、 有效防止DOS攻擊

  

  • 可以限制連線的等級

      

  • 可以限制一個主機的最大連線數,從而防止某個主機獨佔某個服務

      

  • 可以限制日誌檔案的大小,防止磁碟空間被填滿

  3、 強大的日誌功能

  

  • 可以為每一個服務就syslog設定日誌等級

      

  • 如果不使用syslog,也可以為每個服務建立日誌檔案

      

  • 可以記錄請求的起止時間以決定對方的訪問時間

      

  • 可以記錄試圖非法訪問的請求

  4、 轉向功能

  • 可以將客戶端的請求轉發到另一臺主機去處理

  5、 支援IPv6

  • xinetd 自 xinetd 2.1.8.8pre* 起的版本支援 IPv6

  6、與客戶端的互動功能

  • 無論客戶端請求是否成功,xinetd都會有提示告知連線狀態

  當前,它最大的缺點是對RPC支援的不穩定性,但是可以啟動protmap與xinetd共存來解決這個問題。

  何時使用xinetd?

  原則上任何系統服務都可以使用xinetd,然而,我認為,最適合應該是哪些常用的internet服務,同時,這個服務的請求數目和頻繁程度不會太高。象DNS和Apache就不適合採用這種方式,而象Ftp、telnet、 SSH等就很適合使用xinetd方式,至於pop、imap等郵件服務是否適合使用這種方式,我自己也很難下結論,系統預設使用xinetd,很多人也是這樣做的,但我沒有這方面的測試。

  系統預設使用xinetd的服務可以分為如下幾類:

  1、標準internet服務:telnet ftp

  2、資訊服務:finger netstat systat

  3、郵件服務:imap imaps pop2 pop3 pops

  4、RPC服務:rquotad rstatd rusersd sprayd walld

  5、BSD服務:comsat exec login ntalk shell talk

  6、內部服務:chargen daytime echo servers services time

  7、安全服務:irc

  8、其他服務:name tftp uucp

  第二節 獲取、編譯與安裝

  xinetd在RedHat 7.2是預設安裝的,所以一般說來,你無需自己去安裝。然而,如果你在低版本的RedHat上,你可能需要下面的安裝步驟。

  1 軟體的獲取

  Xinetd當前最新的版本是2.3.5,釋出於May.28.2002。你可以從下面的地址獲取它的原始碼包:

  2 編譯安裝

  現在假設你將該軟體下載到/home/src目錄,安裝步驟如下:

  cd /home/src

  tar xvzf xinetd*

  cd xinetd*

  ./configure -prefix=/etc -with-libwrap -with-loadavg -with-inet6

  make

  make install

  cp xinetd/sample.conf /etc/xinetd.conf

  如果你在舊版本的RedHat上安裝,你可能會用到下面的指令,這個perl指令碼可以將inetd.conf轉換為xinetd.conf:

  xinetd/xconv.pl < /etc/inetd.conf > /tmp/xinetd.conf

  下面是編譯引數說明:

  --prefix 指定安裝目錄

  --with-libwrap 載入libwrap.a庫,使之可以使用TCP Wrapper功能

  --with-loadavg 使之具有限定連線數的功能,避免DOS攻擊

  --with-inet6 使之支援ipv6

  說明:

  如果您使用的是RedHat 7.x版本,建議你無需自己安裝,這一點跟別的服務不同,如果你自行安裝,可能會出現意想不到的麻煩。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-940131/,如需轉載,請註明出處,否則將追究法律責任。

相關文章