TCP Wrappers

TCP Wrappers

TCP Wrappers 是一種對使用 /etc/inetd.sec 的替換方法,為由 inetd 生成的服務提供了增強的安全性。TCP Wrappers 提供防止主機名和主機地址欺騙的保護。

TCP WrappersTCP Wrappers
Transmission Control Protocol (TCP) Wrappers 為由 inetd 生成的服務提供了增強的安全性。TCP Wrappers 是一種對使用 /etc/inetd.sec 的替換方法。TCP Wrappers 提供防止主機名和主機地址欺騙的保護。欺騙是一種偽裝成有效用戶或主機以獲得對系統進行未經授權的訪問的方法。

TCP Wrappers 使用訪問控制列表 (ACL) 來防止欺騙。ACL 是 /etc/hosts.allow 和 /etc/hosts.deny 檔案中的系統列表。在配置為驗證主機名到 IP 地址映射,以及拒絕使用 IP 源路由的軟體包時,TCP Wrappers 提供某些防止 IP 欺騙的保護。

簡介

TCP WrappersTCP Wrappers
通常做法是在作業系統層面上安裝防火牆來處理網路連線。然而雖然防火牆有非常廣泛的用途,但他卻不是萬能的,例如它無法處理類似的向連線發起者傳送一些文本這樣的任務。而TCP Wrappers能夠完成它以及更多的其他事情。

TCP Wrappers擴展了inetd為受其控制的服務程式實施控制的能力。通過使用這種方法,它能夠提供日誌支持、返回訊息給聯入的連線、使得服務程式只接受內部連線,等等。儘管防火牆也能夠完成其中的某些功能,這不僅增加了一層額外的保護,也提供了防火牆無法提供的功能。

然而,由TCP Wrappers提供的一些額外的安全功能,不應被視為好的防火牆的替代品。TCP Wrappers 應結合防火牆或其他安全加強設施一併使用,為系統多提供一層安全防護。

初始配置及簡單設定

TCP WrappersTCP Wrappers
使用TCP Wrappers的唯一要求是確保inetd在從rc.conf中啟動時包含了-Ww選項。當然,還需要對/etc/hosts.allow進行適當的配置,但syslogd在配置不當時會在系統日誌中記錄相關訊息。

注意:使用hosts.deny在現在被認為是不推薦和過時的做法。所有的配置選項應放到/etc/hosts.allow中。

在最簡單的配置中,服務程式連線策略是根據/etc/hosts.allow允許或阻止。FreeBSD這樣的作業系統中的默認配置是允許一切發到由inetd所啟動的服務的連線請求。

基本配置的形式通常是:

服務:地址:動作

服務---從inetd啟動的服務程式名字
地址---可以是任何有效的主機名、一個IP或由方括弧([ ])括起來的IPv6地址
動作---欄位可以使allow或deny,分別用於允許和禁止相應的訪問。

在配置時需要注意所有的配置都是按照第一個匹配的規則運轉的,這表示配置檔案將按照順序查找匹配規則,而一旦找到匹配,則搜尋也就停止了。

例如:允許POP3連線通過mail/qpopper服務,應把下面的行添加到hosts.allow
# This line is required for POP3 connections:
qpopper:ALL:allow
增加這樣之後,需要重新啟動inetd。可以通過使用kill命令來完成這項工作,或使用/etc/rc.d/inetd的restart parameter參數。

高級配置

TCP WrappersTCP Wrappers

TCP Wrappers 也有一些高級的配置選項,用來對如何處理連線實施更多的控制。一些時候,返回一個說明到特定的主機或請求服務的連線可能是更好的辦法。其他情況下,記錄日誌或者傳送郵件給管理員可能更為適合。另外,一些服務可能只希望為本機提供。這些需求都可以通過使用通配符擴展字元以及外部命令來實現。

外部命令

假設由於發生了某種狀況,而導致連線應該被拒絕掉,而將其原因傳送給發起連線的人。如何完成這樣的任務呢?這樣的動作可以通過使用twist選項來實現。當發起了連線請求時,twist將調用一個命令或腳本。在hosts.allow檔案中已經給出了一個例子:

# The rest of the daemons are protected.
ALL : ALL \
: severity auth.info \
: twist /bin/echo "You are not welcome to use %d from %h."

這個例子將把訊息“You are not allowed to use daemon from hostname.” 返回給訪問先前沒有配置過允許訪問的服務客戶。對於希望把訊息反饋給連線發起者,然後立即切斷這樣的需求來說,這樣的配置非常有用。請注意所有反饋信息必須被引號包圍,這一規則是沒有例外的。

警告:如果攻擊者向服務程式傳送大量的連線請求,則可能發動一次成功的拒絕服務攻擊

另一種可能是針對這種情況使用spawn。類似twist,spawn也暗含拒絕連線,並可以用來執行外部命令或服務。與twist不同的是,spawn 不會向連線發起者傳送回應。考慮下面的配置:

# We do not allow connections from example.com:
ALL :.example.com \
:spawn (/bin/echo %a from %h attempted to access %d >> \
/var/log/connections.log) \
:deny

這將拒絕來自 *.example.com 域的所有連線;同時還將記錄主機名,IP 地址,以及對方所嘗試連線的服務名字到/var/log/connections.log檔案中。

除了前面已經介紹過的轉義字元,例如 %a 之外, 還有一些其它的轉義符。參考hosts_access在線上手冊可以獲得完整的列表。

通配符選項

前面的例子都使用了ALL。其它選項能夠將功能擴展到更遠。例如,ALL可以被用來匹配每一個服務、域,或IP位址。另一些可用的通配符包括PARANOID,它可以用來匹配任何來自可能被偽造的IP位址的主機。換言之,paranoid可以被用來定義來自IP與其主機名不符的客戶。

# Block possibly spoofed requests to sendmail:
sendmail:PARANOID:deny
在這個例子中,所有連線sendmail的IP位址與其主機名不符的主機都將被拒絕。

小心:如果伺服器和客戶機有一方的DNS配置不正確,使用PARANOID可能會嚴重地削弱服務。在設定之前,管理員應該謹慎地考慮。

相關詞條

相關搜尋

熱門詞條

聯絡我們