xinetd(eXtended InterNET services daemon)
xinetd概述
* 支持對tcp、udp、
RPC服務(但是當前對RPC的支持不夠穩定)
* 功能完備的log功能,即可以記錄連線成功也可以記錄連線失敗的行為
* 能有效的防止
DoS攻擊(Denial of Services)
* 能限制同時運行的同一類型的伺服器數目
* 能限制啟動的所有伺服器數目
* 能限制log檔案大小
* 將某個服務綁定在特定的系統接口上,從而能實現只允許私有網路訪問某項服務
* 能實現作為其他系統的代理。如果和ip偽裝結合可以實現對內部私有網路的訪問
它最大的缺點是對RPC支持的不穩定性,但是可以啟動protmap,與x
inetd共存來解決這個問題。
xinetd用括弧括起的、擴展了的語法取代了inetd中的通用的行。另外,還添加了日誌和訪問控制功能。 雖然
inetd可以使用Venema的
tcp_wrappers軟體(tcpd) 控制 TCP 的連線,但是你不能用它來控制 UDP 連線。此外,inetd對RPC(portmapper)類型的服務也處理不好。另外,雖然使用 inetd 你可以控制連線速度 ( 通過給wait或是no wait 變數附加一個數值,例如nowait.1表示每隔一秒鐘一個實例),你不能控制實例的最大數。這能導致進程表攻擊(例如,一個有效的
拒絕服務攻擊)。通過使用xinetd,我們可以防止Dos。
xinetd 對所有的服務都進行紀錄,日誌保存到檔案 /var/adm/xinetd.log中,並且使用配置檔案/etc/xinetd.conf。
配置檔案
x
inetd 配置檔案,通常可以手工或是自動從inetd.conf檔案生成。前者費時間且容易出錯;後者可以通過 itox軟體或者xconv. pl 腳本輕易完成。雖然itox軟體正在被取消而傾向於使用 xconv. pl 腳本,它仍是很有用的。但是,要注意重複的運行它會覆蓋原有的配置檔案。itox和 xconv都以同樣的方式工作,我們用 itox來進行演示:
$ itox < /etc/inetd.conf > xinetd.conf 新一些的工具(xconv)可以理解注釋,並且在對tcpd的使用上要比itox做得更好,使用itox,你不得不指定
守護進程的路徑 (如 /usr/sbin)。 你想要包含的第一段就是默認的段,就像名字暗示的那樣,默認的x
inetd服務。
defaults
{
instances = 25
log_type = FILE /var/adm/servicelog
log_on_success = PID HOST EXIT
flags = NORETRY
log_on_failure = HOST RECORD ATTEMPT
only_from = 129.22.0.0
no_access = 129.22.210.61
disabled = nntp uucp tftp bootps who
shell login exec
disabled += finger
}
我們可以了解 x
inetd 設定參數的語法:<指示(directive)> <操作符(operator)> <值(value)>。xinetd所能理解的指示列在表一中,在這裡我們將忽略 flags、type、env 和passenv指示符。 我對將對 only_from 和 no_access以及額外的日誌選項加以更多的討論。
表 1. xinetd的指示符
|
|
指示符
| 描述
|
socket_type
| 網路套接字類型, 流或者數據包
|
socket_type
| 網路套接字類型, 流或者數據包
|
protocol
| IP 協定, 通常是TCP或者 UDP
|
wait
| yes/no, 等同於inetd的wait/nowait
|
user
| 運行進程的用戶 ID
|
server
| 執行的完整路徑
|
server_args
| 傳遞給server的變數,或者是值
|
instances
| 可以啟動的實例的最大的值
|
start max_load
| 負載均衡
|
log_on_success
| 成功啟動的登記選項
|
log_on_failure
| 在線上失敗的時候的日誌信息
|
only_from
| 接受的網路或是主機
|
no_access
| 拒絕訪問的網路或是主機
|
disabled
| 用在默認的 {} 中 禁止服務
|
log_type
| 日誌的類型和路徑 FILE /SYSLOG
|
nice
| 運行服務的優先權
|
id
| 日誌中使用的服務名
|
操作符非常簡單,“=”、“+=”、“-=”。用 =,右邊給定的值傳給左邊的指示符。+=也是非常直接的,用於給一個已經指定的指示符添加一個值。-=表示在原來的參數中捨棄這裡要輸入的參數。沒有它,原先的指示符就會被覆蓋,這樣可以用來展開
訪問列表,或者跨越多行。
用如下的格式描述服務:
服務名
{
指示符 = 值
指示符 += 值
指示符 -= 值
}
服務名一定要在 /etc/services列出 ,並且要使用合適的socket和協定。
註:Linux系統中,inetd服務的默認配置檔案為:/etc/inetd.conf
Linux系統中,默認情況下,xinetd所管理伺服器的配置檔案存放在:/etc/xinetd.d