天天看點

Linux xinetd使用指南

redhat7.0以後inetd都已換成xinetd了--好用了很多。先看一下/etc/xinetd.conf--instances最大執行個體數--如果你用的是wu-ftpd-最大人數60那就改這個了。注意最後一句includedir其實是把telnet,wu-ftpd等腳本包含到此檔案中的--直接寫在這也行。

defaults

{

instances = 60

log_type = SYSLOG authpriv

log_on_success = HOST PID

log_on_failure = HOST

cps = 25 30

}

includedir /etc/xinetd.d

這篇xinetd完全指南已非常全了--看了它你對xinetd就會很熟了:)

許多人在裝了redhat 7.x後開始找不到北!!!(我就是其中一個)

因為redhat 7.x開始注重系統安全,最大的特征就是用xinetd.conf代替原來的inetd.conf

并且7.1中預設安裝沒有開ftp,telnet等熟悉的服務,而是更安全的ssh!

7.1還加入firewall等服務

(感謝paradise提供下載下傳地點給我安裝redhat7.1)

大家對被稱作超級伺服器的Inetd一定很熟悉,其實作控制對主機網絡連接配接。當一個請求到達由Inetd管理的服務端口,Inetd将該請求轉發給名為tcpd的程式。Tcpd根據配置檔案hosts.{allow, deny}來判斷是否允許服務該請求。如果請求被允許則相應的伺服器程式(如:ftpd、telnetd)将被啟動。這個機制也被稱作tcp_wrapper.

xinetd(eXtended InterNET services daemon)提供類似于inetd+tcp_wrapper的功能,但是更加強大和安全。它能提供以下特色:

* 支援對tcp、ucp、RPC服務(但是目前對RPC的支援不夠穩定)

* 基于時間段的通路控制

* 功能完備的log功能,即可以記錄連接配接成功也可以記錄連接配接失敗的行為

* 能有效的防止DoS攻擊(Denial of Services)

* 能限制同時運作的同意類型的伺服器數目

* 能限制啟動的所有伺服器數目

* 能限制log檔案大小

* 将某個服務綁定在特定的系統接口上,進而能實作隻允許私有網絡通路某項服務

* 能實作作為其他系統的代理。如果和ip僞裝結合可以實作對内部私有網絡的通路

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

編譯安裝

可以從www.xinetd.org下載下傳xinetd,目前最新的版本是xinetd 2.1.8.8p3。預設編譯和安裝xinetd是非常簡單的,按照如下的步驟進行:

#./configure; make; make install

即可完成。

在進行configure時,可以支援如下幾個有用處的選項:

--with-libwrap : 如果使用該選項xinetd将會察看tcpd配置檔案(/etc/hosts.{allow, deny})來進行通路控制,但是如果要利用該功能,系統上必須安裝有tcp_wrapper和相關庫。

--with-loadavg : 使用該選項,xinetd将而已處理max-load配置選項。進而在系統負載過重時關閉某些服務程序,來實作某些DoS攻擊。

--with-inet6 : 使用該選項xinetd将支援IPv6。

如果是是用redhat7.0,則其預設将安裝xinetd,而不需要自行安裝。

配置

xinetd的預設配置檔案是/etc/xinetd.conf。其文法和/etc/inetd.conf完全不同且不相容。它本質上是/etc/inetd.conf和/etc/hosts.allow,/etc/hosts.deny功能的組合。/etc/xinetd.conf中的每一項具有下列形式

service service-name

     ……。

其中service是必需的關鍵字,且屬性表必須用大括号括起來。每一項都定義了由service-name定義的服務。

Service-name是任意的,但通常是标準網絡服務名,也可增加其他非标準的服務,隻要它們能通過網絡請求激活,包括localhost自身發出的網絡請求。有很多可以使用的attribute,在下表中進行了詳細的說明。稍後将描述必需的屬性和屬性的使用規則。

操作符可以是=,+=,或-=。所有屬性可以使用=,其作用是配置設定一個或多個值,某些屬性可以使用+=或-=的形式,其作用分别是将其值增加到某個現存的值表中,或将其值從現存值表中删除。表10.10中說明了可以用後一種形式的屬性。

Value是為給定屬性設定的參數。

表1 擴充的lnernet服務程序屬性

屬 性

描述和允許值

Socket_type

使用的TCP/IP socket類型,值可能為stream(TCP), dgram(UDP), raw和seqpacket(可靠的有序資料報)

protocol

指定該服務使用的協定,其值必須是在/etc/protocols中定義的。如果不指定,使用該項服務的預設協定。

Server

要激活的程序,必須指定完整路徑

Server_args

指定傳送給該程序的參數,但是不包括服務程式名

Port

定義該項服務相關的端口号。如果該服務在/etc/services中列出,它們必須比對

Wait

這個屬性有兩個可能的值。如果是yes,那麼xinetd會啟動請的程序并停止處理該項服務的請求直到該程序終止。這是個單線程服務。如果是no,那xinetd會為每個請求啟動的一個程序,而不管先前啟動的程序的狀态。這是個多線程服務

User

設定服務程序的UID,但是若xinetd的有效UID不是0,該屬性無效

Group

設定程序的GID。若xinetd的有效UID不是0,這個屬性無效

Nice

指定程序的nice值

Id

該屬性被用來唯一地指定一項服務。因為有些服務的差別僅僅在于使用不同的協定,是以需要使用該屬性加以差別。預設情況下服務id和服務名相同。如echo同時支援dgram和streama服務。設定id=echo_dgram和id=echo_streams來分别唯一辨別兩個服務

Type

可以是下列一個或多個值:RPC(對RPC服務),INTERNAL(由由xinetd自身提供的服務,如echo),UNLISTED(沒有列在标準系統檔案如/etc/rpc或/etc/service中的服務)

Access_time

設定服務可用時的時間間隔。格式是hh:mm_hh:mm; 如08:00-18:00意味着從8A.M到6P.M.可使用這項服務

Banner

無論該連接配接是否被允許,當建立連接配接時就将該檔案顯示給客戶機

Flags

可以是以下一個或多個選項的任意組合:

REUSE:設定TCP/IP socket可重用。也就是在該服務socket中設定SO_REUSEADDR标志。當中斷并重新啟動xinetd

INTERCEPT:截獲資料報進行通路檢查,以确定它是來自于允許進行連接配接的位置。不能和INTERNAL服務和多線程服務不可使用該屬性值

   NORETRY:如果fork失敗,不重試

IDONLY: 隻有在遠端端識别遠端使用者時才接受該連接配接(也就是遠端系統必須運作ident伺服器),該标記隻适用于面向連接配接的服務。若沒有使用USERID記錄選項則該标記無效log_on_success和/或log_on_failure屬性設定USERID值以使該值生效。僅用于多線程的流服務

NAMEINARGS:允許server_args屬性中的第一個參數是程序的完全合格路徑,以允許使用TCP_Wrappers

NODELAY:若服務為tcp服務,并且NODELAY标記被設定,則TCP_NODELAY标記将被設定。若服務不是tcp服務則該标記無效

Rpc_version

指定RPC版本号或服務号。版本号可以是一個單值或者一個範圍中如2-3

rpc_number

如果RPC程式号不在/etc/rpc中,就指定它

Env

用空格分開的VAR=VALUE表,其中VAR是一個shell環境變量且VALUE是其設定值。這些值以及xinetd的環境都在激活時傳送給服務程式。這個屬性支援=和+=操作符

Passenv

用空格分開的xinetd環境中的環境變量表,該表在激活時傳遞給服務程式。設定no就不傳送任何變量。該屬性支援所有操作符

Only_from

用空格分開的允許通路服務的客戶機表。表2種給出客戶機文法。如果不為該屬性指定一個值,就拒絕通路這項服務。該屬性支援所有操作符。

No_access

用空格分開的拒絕通路服務的客戶機表。表2給出客戶機文法。該屬性支援所有操作符

Instances

接受一個大于或等于1的整數或UNLIMITED。設定可同時運作的最大程序數。UNLIMITED意味着xinetd對該數沒有限制。

Log_type

指定服務log記錄方式,可以為:

SYSLOG facility[level]:設定該工具為daemon,auth,user或loca10-7。設定level是可選的,可以的level值為emerg,alert,crit,err,warning,notice, info, debug,預設值為info

file[soft[hard]]:指定file用于記錄log,而不是syslog。限度soft和hard用KB指定(可選)。一旦達到soft限,xinetd就登記一條消息。一旦達到hard限,xinetd停止登記使用該檔案的所有服務。如果不指定hard限,它成為soft加1%,但預設時不超過20MB.預設soft限是5MB

Redirect

該屬性文法為redirect=Ipaddress port。它把TCP服務重定向到另一個系統。如果使用該屬性,就忽略server屬性

Bind

把一項服務綁定到一個特定端口。文法是bind=Ipaddress。這樣有多個接口(實體的或邏輯的)的主機允許某個接口但不是其他接口上的特定服務(或端口)

Log_on_success

指定成功時登記的資訊。可能值是

PID:程序的PID。如果一個新程序沒被分叉,PID設定為0。

HOST:客戶機主機IP位址

USERID:通過RFC1413高用捕獲客戶機使用者的UID。隻可用于多線程流服務。

EXIT:登記程序終止和狀态

DURATION:登記會話持續期

預設時不登記任何資訊。該屬性支援所有操作符

Log_on_failure

指定失敗時登記的資訊。總是登記表明錯誤性質的消息。可能值是ATTEMPT:記錄一次失敗的嘗試。所有其他值隐含為這個值。

USERID:通過RFC1413調用捕獲客戶機使用者的UID。隻

可用于多線程流服務。

RECORD:記錄附加的客戶機資訊如本地使用者,遠端使用者

和終端的類型。預設時不登記任何資訊。該屬性支援所有操作符。

Disabled

隻可用于defaults項(參看本小節後面的defaults項),指定被關閉的服務清單,是用空格分開的不可用服務清單來表示的。它和在/etc/xinetd.conf檔案中注釋掉該服務項有相同的效果。

我們首先看一個簡單的例子。例1是配置檔案/etc/xinetd.conf的一個範例。這兩種服務的定義看上去像/etc/inetd.conf的原因是因為它們是用itox工具從/etc/inetd.conf轉換得來的,隻把/etc/inetd.conf項對應轉換成适當的xinetd文法。這樣,這些屬性(在大括号中的=号的左邊)意義是非常直接的,其相關值(在大括号中的=号的右邊)也是如此。

例1 檔案/etc/xinetd.conf中的一部分

Serice ftp

{

Socket_type=stream

   protocol=tcp

   wait=no

   user=root

   server=root

   Server_args= - 1 - a

Service telnet

   Socket_type=stream

   wait=tcp

   server=/usr/sbin/in.telnetd

建立/etc/xinetd.conf檔案最容易的方法是用itox工具(該例假定目前工作目錄是xinetd的編譯目錄):

# xinetd/itox -daemon_dir /usr/sbin /etc/xinetd.conf。itox的參數-daemon_dir /usr/sbin指定服務程式的目錄位置,如果實作了TCP_Wrappers,從/etc/inetd.conf中是不能确定它的,轉換完成以後,就開始增加屬性和值,以限制通路并增加登記,最後要手工修改/etc/xinetd.conf以充分利用xinetd的特性;否則,如果隻把/etc/inetd.conf轉換為/etc/xinetd.conf, xinetd的行為就和inetd一樣了。

表1詳述了在/etc/xinetd.conf中最常使用的一些屬性和值。當然還有許多其他屬性,詳細配置選項可以在安裝xinetd以後通過man xinetd.conf來得到。在本小節後面的“配置執行個體”中,将用一些例子闡明其中的許多屬性。

表2中給出only_from和no_access表的文法,定義了指定主機名,IP位址和網絡的文法。注意表2中最後一項netmask的文法和之前看到的有所不同。它沒有采用傳統的十進制或十六進制netmask的表示方法,而是采用一個整數表示從netmask(用二進制表示)的最高位(最左端)開始起每位都為1的位數。是以,給定例子的netmask值設定為20,意味着其最左端的20位都設定為1,而餘下12位設定為0,或

11111111    11111111   11110000   00000000

它是十進制netmask255.255.240.0的二進制表示。

表2 /etc/xinetd.conf的通路控制表的文法

語  法

描  述

hostname

可解析的主機名。使用和這個主機名相關的所有IP位址

IPaddress

點和十進制形式的标準IP位址,如192.168.0.1

Net_name

/etc/networks中的網絡名

x.x.x.0 x.x.0.0

x.0.0.0 0.0.0.0

0作為通配符看待。如項88.3.92.0比對從88.3.92.0到88.3.92.255的所有IP位址。項0.0.0.0比對所有位址

x.x.x.{a,b,…}

x.x{a,b,…}

x.{a,b,…}

指定主機表。如172.19.32.{1,56,59}意味着含IP位址172,19.32.1,172.19.32.56和172.19.32.59的表

Ipaddress/netmask 

定義要比對的網絡或子網。如172.19.16.0/20比對從172.19.16.0到172.19.31.255的所有位址

在看了這些基本屬性之後,下面我們仔細讨論那些必需的屬性,特定服務和一些配置執行個體。

必需的屬性

對每種服務都必須指定某些屬性。一些服務比其他服務需要更多屬性,因為它們不被預設定義(即不在/etc/services或/etc/rpc中)。表3列出了必需的屬性。

表3 必需的屬性

語 法

描 述

所有服務

在/etc/services或/etc/rpc中列出的服務

非内部服務

不在/etc/services中的非RPC服務

Protocol

不在/etc/services中的所有RPC服務和所有其他服務

所有RPC服務

Rpc_number

不列在/etc/rpc中的任何RPC服務

特定的xinetd服務 /etc/xinetd.conf檔案中有4個特殊項。它們分别是defaults, servers,services和xadmin。Defaults項不是一項服務,且不需要前置service關鍵字(否則它會被當成稱為defaults的服務對待)。這些特殊項在以下4小段中描述。

Defaults項

/etc/xinetd.conf檔案中的defaults項是實作為該檔案中的所有服務指定某些屬性的預設值。這些預設值可被每個服務項取消或修改。表4中列出可在defaults項中指定的屬性。這個表也指明了具體服務項中可以修改哪些屬性。

表4 defaults可用的屬性

屬性

服務修改

Log_on_success

Log-on_failure

  Only_from

  No_access

  Passenv

可以用=操作符改寫或用+ =或 - =操作符修改

Instances

可以用=操作符改寫

disabled

可注釋掉的服務,但disabled屬性可用于某個服務項内

例2是defaults項的一個執行個體。從中看到對所有服務而言,登記消息将通過loca14.info有選擇地送到syslogd程序。對成功的服務連接配接,将登記PID,客戶機IP位址,中止狀态和連接配接時間。對不成功的連接配接企圖,将登記客戶機IP位址。每項服務的最大執行個體數設定為8。禁止兩項服務:in.tftpd和in.rexecd。

defaults項從本質上提供了在整個檔案中建立某些屬性的預設值,它應用于沒有設定這些屬性的所有服務。

例2 /etc/xinetd.conf中defaults項的示例

Defaults

Log_type = SYSLOG loca14 info

Log_on_success = PID HOST EXIT DURATION

Log_on_failure = HOST

Instances =8

Disabled = in.tftpd in.rexecd

注:如果在/etcxinetd.conf檔案中沒有defaults項,且之後決定增加這一項,你必須中止和重新啟動xinetd以使defaults生效。這對任何要增加到/etc/xinetd.conf中的新服務也是正确的。它可以如下完成。

# kill-TERM xinetd

#/ usr/sbin/xinetd

或者如果使用了啟動腳本,則隻需要簡單執行。

#/etc/rc.d/init.d/xinetd restart

Servers項 servers特殊服務是實作提供目前運作在伺服器上的程序表,以及有關這些程序的确切資訊。換句話說,它提供了活動連接配接的清單。這對排除故障和檢查xinetd狀态是個有用機制。例3顯示了/etc/xinetd.conf檔案中的一個執行個體servers項。注意這項服務的類型是INTERNAL,UNLISTED,這意味着它是xinetd的内部功能,且不列在/etc/services中。使用的端口是完全任意的。

例3 servers項的示例

Service servers

     type = INTERNAL UNLISTED

     Socket_type = stream

     Protocol = tcp

     Port = 9997

     Wait = no

     Only_from = 172.17.33.111

注意這項服務僅用于特定IP位址172.17.33.111,它是伺服器自身的IP位址。這表示不允許任何其他主機從這個伺服器獲得目前運作在伺服器上的程序清單。這樣做的原因是顯而易見的:如果這條資訊可被其他系統上的主機擷取,基于對目前正在運作的程序的了解就加以利用。除用于調試之外,一般不要運作該服務,因為172.17.33.111上的任何使用者通過執行例4中的telnet 172.17.33.111 9997都能擷取這條資訊。注意xinetd僅提供這條資訊就退出,不提供互動連接配接。例4中的輸出告訴我們有兩個正在運作的telnet程序(第5行和第31行),一個程序PID為5931,另一個為5961(分别為第6行和第32行),有一個ftp程序(第18行),其運作PID為5960(第19行)。

例4 servers服務的輸出示例

1 $ telnet topcat 9997

2 Trying 172.17.33.111……

3 Connected to topcat

4 Escape character is ‘^]'

5 telnet server

6 Pid=5931

7 Start_time=Sat Apr 17 10:32:15 1999

8 Connection info:

9 State=CLOSED

10 Service=telnet

11 Descriptor=20

12 Flags=9

13 Remote_address=10.48.3.2,39958

14 Alternative services=

15 Log_remote_user=YES

16 Writes_to_log=YES

17 

18 ftp server

19 Pid=5960

20 Start_time=Sat Apr 17 10:49:06 1999

21 Connection info:

22 State=CLOSED

23 Service=ftp

24 Descriptor=20

25 Flags=9

26 Remote_address=172.17.55.124,2320

27 Alternative services=

28 Log_remote_user=YES

29 Writes_to_log=YES

30

31 telnet server

32 Pid=5961

33 Start_time=Sat Apr 17 10:49:20 1999

34 Connection info:

35 State=CLOSED

36 Service=telnet

37 Descriptor=20

38 Flags=9

39 Remote_address=172.17.1.3,35461

40 Alternative services=

41 Log_remote_user=YES

42 Writes_to_log=YES

43

44 Connection closed by foreign host

45 $

Services項

  services特定項的目的是提供可用服務的清單。對services特定項來說,這是個有用的排除故障工具,但為了上述同樣的安全因素,可能不會去用它。盡管如此,還是要看一看它如何工作。

例5是 services項的一個示例。端口号的選擇也是任意的。也應注意通路限制于topcat,這是伺服器自身的主機名。

例5 /etc/xinetd.conf中services項示例

Service services

    type = INTERNAL UNLISTED

    Socket_type = stream

    protocol = tcp

    port = 8099

    wait = no

    Only_ from = topcat

對于servers服務來說,任何使用者可執行telnet topcat 8099,并獲得來自services服務的輸出。例6給出了連接配接8099端口的執行個體資訊資訊。注意xinetd僅提供這條資訊就退出,而不提供任何互動連接配接。

例6 查詢services内部服務的輸出

$ telnet topcat 8099

Trying 172.17.33.111……

Connected to topcat.

Escape character is ‘^]'

Servers tcp 9997

Services tcp 8099

ftp tcp 21

telnet tcp 23

Shell tcp 514

Login tcp 513

Talk udp 517

Ntalk udp 518

Pop-2 tcp 109

Pop-3 tcp 110

Imap tcp 143

Linuxconf tcp 98

Connection closed by foreign host.

$

Xadmin項

這個特定服務項提供以互動方式獲得services特定服務所提供資訊的方法。例7是/etc/xinetd.conf項的一個示例(端口号的選擇也是任意的),類似于services和servers服務,這項服務也沒有密碼或其他保護,是以要謹慎設定服務的only_from項,以增強安全性。

例7 xadmin項

Service xadmin

    socket_type = stream

    port = 9967

    Only_from = topcat

對前兩個特定服務類型來說,你隻需telnet到所列端口上,即telnet topcat 9967。和前兩項服務不同,xadmin提供了一個互動環境。一旦連接配接到xadmin伺服器上,就可執行5個指令。它們是help,show, run,bye和exit。Help指令顯示其他指令以及一個簡短的用法消息。Bye和exit指令都關閉這個連接配接。Show run和show avail指令分别提供servers和services提供的資訊。

警告:像前3段中指出的一樣,這些特定服務servers, services和xadmin産生的資訊可用于攻擊系統。可能不需要一直運作這些服務,或許隻當你調試時才需要。在任何時候,如果的确運作了這些服務,要确信用access_from和/或no_access配置了通路控制。也可以為這些服務使用bind屬性以進一步限制通路。

配置執行個體

  這節中将看到一些不同的例子,與之相關的行為以及它們産生的登記消息。

通路控制

從一個簡單的通路控制例子開始。在例10中,伺服器topcat的login服務項允許IP位址以172開始但不以172.19開始的任何系統通路。這個例子包括了defaults部分。假定這一項用于login服務,且從客戶機上用rlogin指令激活,讓我們檢查成功和不成功企圖,以及它們産生的登記。

假定主機underdog和IP位址是172.18.5.9。那麼當Mary執行rlogin登記topcat時,會給予她通路權。這相成功的登入如例11所示。盡管例11說明了Mary的動作産生的log内容。如例12所示,該例中的最後一項反映了當Mary拆除登入時的退出情況。可用PID跟蹤某次會話的退出,隻要你指明這個PID将在/etc/xinetd.conf中登記。登記項如下:每個xinetd登記項記錄日期和時間戳,之後伺服器主機名,然後是xinetd,之後在括号中是xinetd的PID。例12中的第一條記錄以start關鍵字開始,表明這個會話的開始,之後識别的激活程序(login),然後激活程序的PID,最後是客戶機位址。

例10 在/etc/xinetd.conf中rlogin service項的示例

    Log_type=SYSLOG loca14 info

    Log_on_success=PID HOST EXIT DURATION

    Log_on_failure=HOST

    instances=8

Service login

    Socket_type=stream

    protocol=tcp

    wait=no

    user=root

    flags=REUSE

    Only_from=172.0.0.0

    No_access=172.19.0.0

    Olg_on_success+=USERID

    Olg_on_failure+=USERID

    server=/usr/sbin/in.ftpd

    Server_args=-1 –a

例11 成功的rlogin企圖

[mary@underdog]$ rlogin topcat

password:

last login:Wed Apr 14 17:45:02 from roadrunner

[mary@topcat]$

例12 和例11相關的登記項

Apr 15 11:01:46 topcat xinetd[1402]:START:login pid=1439

From=172.18.5.9

Apr 15 11:01:46 topcat xinetd[1439]:USERID:login OTHER:mary

apr 15 11:39:31 topcat xinetd[1402]:EXIT:login status:1 pid=1439 dura-tion=2265(sec)

第2項以USERID關鍵字開始,表明成功地發出了RFC1413調用。之後是服務名(login),遠端系統對RFC1413調用(此時為OTHER)的響應,最後遠端使用者名(mary)。

這些log項的含義是很清楚的,但表4提供了這些關鍵字(如START,USERID和EXIT)和其含義的解釋。

現在假定Joe想在主機sly.no.good.org(IP位址為19.152.1.5)上使用rlogin。例13顯示了這一結果。看上去Joe連接配接被拒絕,或者可能他想強入。讓我們看一看例14中的這三次企圖所産生的登記項。注意登記項不包括遠端使用者名,盡管我們在例10中用log_on_failure屬性特别請求那個資訊。這是因為遠端主機sly.no.good.org沒有運作identd或類似程序。因為主機sly.no.good.org不在例10中的only_from表中,盡管在login服務項中增加了flags=IDONLY一項,它不會記錄sly.no.good.org沒有運作identd的事實。僅當主機得到許可時,這樣一項登記記錄才會出現。

表4 xinetd登記項的描述

登記關鍵詞

格式和描述

START

START:service_id[pid=PID][from=Ipaddress]

當啟動一項服務時記錄該項。Service_id是服務名,像id屬性指定的一樣(如果不明确設定這個屬性,它采用該服務參數的值:參看表10.10);PID是被激活程序的辨別符,或者如果沒有程序被激活,就為0(僅不靈log_on_

Success指定了PID時才記錄):Ipaddress是客戶機的IP位址(僅當HOST是log_on_success時才記錄)

EXIT

EXIT:service_id[type=s][pid=PID][duration=#(sec)]

僅當為log_on_success指定了EXIT時,若程序終止就記錄這項。Service_id和PID項和以前一樣。Type項記錄退出狀态或産生終止的信号。Duration捕獲會話時間(秒數)且需要在log_on_success中說明DURATION選項

FAIL

FAIL:service_id reason[from=Ipaddress]

當失敗的請求發生且至少為log_on_success屬性指定了一個值時生成該項。Service_id如前。Reason是一個解釋失敗原因的簡單詞或短語。Ipaddress是客戶機位址且需要為log_on_success屬性設定HOST值才出現。

DATA

DATA:service_id data

僅當為log_on_failure指定了RECORD時才記錄。Service_id如前。記錄的data取決于服務,但通常包括遠端使用者名(如果可得到)和狀态資訊

USERID

USERID:service_id text

僅當為log_on_success或log_on_failure或者指定了USERID時,才記錄這個住處。Service_id如前。Text包括客戶機對RFC1413調用的響應且特别是遠端使用者名

NOID

NOID:service_id Ipaddress reason

僅當為flags屬性設定了IDONLY值且至少為log_on_success或log_on_failure設定了USERID值時該項出現。Service_id如前。給出的Ipaddress是主機位址。Reason是失敗狀态

例13 來自未授權主機的失敗rlogin企圖

Sly.no.good.org $ rlogin topcat

Topcat:Connection reset by peer

Sly.no.good.org $ rlogin –1 paul topcat

Sly.no.good.org $ rlogin –1 mary topcat

Sly.no.good.org $

例 14 和例10-50相關的登記項

Apr 15 12:08:40 topcat xinetd[1402]:FAIL:login address from-19.152.1.5

Apr 15 12:08:52 topcat xinetd[1402]:FAIL:login address from-19.152.1.5

Apr 15 12:08:49 topcat xinetd[1402]:FAIL:login address from-19.152.1.5

有一個最後登記項要檢查。注意例10中的instances屬性設定為8。對第9個登入會話會發生什麼?當第9個使用者試圖rlogin到topcat時,那個使用者會看到下列錯誤消息

rcmd:topcat:address already in use

并且topcat中為這一事件記錄的登記項是

Apr 15 13:37:33 topcat xinetd(1402):FAIL:login service_limit from-172.17.55.124

把這個記錄和表4中的描述相對照,FAIL關鍵字之後是服務名,然後是對失敗的解釋(此時為service_limit),最後是客戶機位址。

使用bind屬性

bind屬性允許把一個特定接口的IP位址和一個特定的服務關聯。假定有一個内部ftp伺服器,它通過匿名ftp為公司職員提供隻讀資源。再假定這個ftp伺服器有兩個接口,一個連接配接在公司環境中,另一個連接配接到專用内部網,通常隻有在那個特定組中工作的職員可通路它。盡這個例子中隻考慮基于接口提供兩個不同ftp服務的需求。例15在/etc/xinetd.conf中說明了兩個ftp服務項。它可以實作所期望的功能。出于完整性再次提供了defaults部分。

注意每個ftp服務項有一個唯一的id屬性。對有相同名字的服務數目沒有任何限制,隻要每個有唯一的辨別符。在這個例子中,為内部ftp伺服器設定id屬性為ftp,為外部匿名伺服器設定id屬性為ftp_chroot。注意在後一種情況下,激活的程序是/usr/sbin/anon/in.aftpd(對TCP_Wrappers來說是twist),這和以前的服務是不同的。

例15 把服務綁定到特定位址上

    Instances=8

Service ftp

    id=ftp

    Only_from=172.17.0.0 172.19.0.0/20

bind=172.17.1.1

    Log_on_success+=USERID

    Log_on_failure+=USERID

    id=ftp_chroot

Service telnet

    Wait=no

bind=172.17.33.111

    server=usr/sbin/in.telnetd

    Log_on_success=PID HOST EXIT DURATION USERID

    Log_on_failure=RECORD HOST

bind=201.171.99.99

    redirect=172.17.1.1 23

    LOG_ON_FAILURE=record host

例 16 redirect的結果

$ telnet 201.171.99.99

Trying 201.171.99.99

Connected to 201.171.99.99

Escape character is‘^]'

UNIX(r) System V Release 4.0 (foghorn)

Login:

因為Linux對每個實體端口最多支援256個邏輯接口,是以理論上可以為系統上的每個實體位址代理256個不同的位址。

盡管redirect機制可能是非常有用的,但實作它時要小心。要確定在代理伺服器和終端系統上進行登記。可是在高度受控的内部網絡中,這個實作可能是友善的。

包含TCP_Wrappers 

/etc/xinetd.conf中包含TCP_Wrappers功能是如此簡單,TCP_Wrappers的所有功能可通過xinetd包括進去,就像通過inetd一樣。例17是/etc/xinetd.conf檔案的一個執行個體,它為許多服務使用了TCP_Wrappers。當屬性伺服器設定為/usr/sbin/tcpd後,那個服務将被包裹。注意這樣的項總是把server_args屬性設定為要激活的程序(全路徑)。載讨論xinetd的編譯時,用到了libwrap配置選項,但是無論是否用libwrap編譯,例17中的配置檔案都能發揮作用。用libwrap編譯的作用是包含/etc/hosts.allow和/etc/hosts.deny中的通路限制。例7所示提供了TCP_Wrappers的一組完整特征,banners,spawn,twist等。

例 17 在/etc/xinetd.conf中使用TCP_Wrappers

}

    Only_from=172.17.0.0

    Access_times=8:00-16:30

    server= /usr/sbin/tcpd

    Server_args= /usr/sbin/in.ftpd –1 –a

    flags=NAMEINARGS REUSE

    User=root

Bind=172.17.33.111

    Server_args= /usr/sbin/in.telnetd

     Socket_type=stream

     protocol=tcp

     wait=no

     flags=REUSE

     user=root

     redirect=172.17.1.1 23

     Log_on_success=PID HOST EXIT DURATION USERID

     Log_on_failure=RECORD HOST

xinetd程序

xinetd程序接受若幹參數。這些參數可被特定服務default中的屬性改寫,或在一個或多個服務的單個屬性項改寫。然而,這裡給出的所有參數或它們的預設值控制xinetd自身的行為。例如,如果filelog标記指定為xinetd,那麼将在那裡登記所有狀态轉換消息,盡管 /etc/xinetd.conf檔案中為和服務相關消息指定了其他登記位置。可用參數列在表5中。

應注意xinetd報告的所有狀态資訊,總是出現在-syslog或-filelog标記指定的登記檔案中,不管設定如何,即通過defaults還是在/etc/xinetd.conf中。如果要在一個檔案中捕獲xinetd的PID,可以用

xinetd –pid 2> /var/run.xinetd.pid

和xinetd一起使用的可用信号 xinetd程序也基于收到的信号采取特定的行動。表16描述了它接受的每個信号的功能。注意每當增加了新服務或defaults項,或每當改變了任何服務的如下屬性:protocol,socket_type,type或wait時,必須用SIGTERM(或更簡單的TERM)信号中止xientd。每當給xinetd釋出一個軟性或硬性重配置信号時,将寫入例19中所示類型的登記項。這個特定例子是硬性重配置的結果。注意這次硬性重配置的結果是中止了一項服務(用dropped=1辨別)。

表 5 xinetd的标記

标 記

-d

調試模式。輸出可和調試器如gdb一起使用

-sysllog facility

指定syslogd工具。是daemon, auth, user和loca10-7其中之一

-filelog file

指定登記寫到file而不是syslog中。必須是完整路徑名

-fconfig_file

指定配置檔案。必須是完整路徑名。預設是/etc/xinetd.conf

-pid

把PID寫入标準錯誤中

-loop rate

指定每秒鐘分叉的程序數。預設是10.對較快機器來說可能希望改變它

-reuse

設定可重用的TCP socket,這意味着以前的執行個體運作時也可啟動其他程序。當和flags屬性一起使用時,有更特殊的服務控制(參看表10.10)

-limit numproc

限制由xinetd啟動的同時運作的程序總數為numproc

-

限制同時發生的RFC1413請求數為limit

-shutdownprocs limit

當log_on_failure屬性中使用了RECORD值時,xinetd分叉稱為shutdown的服務以收集服務終止時的資訊。該選項限制同時運作的shutdown程序總數為limit

-cc interval

使xinetd每隔interval秒運作對其内部狀态的一緻性檢查。用killall –IOT xinetd可手工實作

表18 xinetd信号

信 号

作 用

SIGUSR1

軟性重配置。重讀/etc/xinetd.conf并作相應調整

SIGUSR2

硬性重配置。重讀/etc/xinetd.conf并殺死和配置檔案中的建立準則不再比對的所有程序。例如,如果一個客戶機連接配接到這個伺服器且又增加到no_access表中,那麼這個信号會終止該客戶機的會話

SIGQUIT

終止xinetd但不終止它分叉的任何程序

SIGTERM

終止xinetd分叉的所有程序;然後終止xinetd

SIGHUP

把xinetd狀态資訊寫到/tmp/xinetd.dump中

SIGIOT

檢查内部資料庫毀壞情況并報告結果

例19 xinetd硬性重配置的登記記錄

繼續閱讀