當(dāng)一個系統(tǒng)被用作公開網(wǎng)絡(luò)的服務(wù)器時,這個系統(tǒng)就成為被攻擊的目標(biāo).對網(wǎng)絡(luò)服務(wù)進(jìn)行訪問控制
是一個服務(wù)器管理員面臨的最重要的安全任務(wù)之一.紅帽企業(yè)Linux為這種訪問控制提供了一些工具.例如,內(nèi)核使用一個基于iptables的防火墻來將
不受歡迎的網(wǎng)絡(luò)數(shù)據(jù)包過濾在內(nèi)核網(wǎng)絡(luò)之外.對于使用這種防火墻的網(wǎng)絡(luò)服務(wù),TCP
Wrappers又增加了一層保護(hù),這層保護(hù)通過定義哪些主機允許或不允許連接到"wrapped"網(wǎng)絡(luò)服務(wù)上來實現(xiàn).TCP
Wrappers為多種不同的服務(wù)提供訪問把關(guān)的功能.大多數(shù)現(xiàn)代網(wǎng)絡(luò)服務(wù)系統(tǒng),像SSH,Telnet和FTP,都利用TCP
Wrappers在外來進(jìn)入系統(tǒng)的請求和被請求的服務(wù)器之間設(shè)立防范.
xinetd超級服務(wù)器就是這樣的一個wrapped
network(會繞網(wǎng)絡(luò))服務(wù).這項服務(wù)被稱為一個超級服務(wù)器,是因為它可以控制連接到網(wǎng)絡(luò)服務(wù)的一個子集的連接,還能進(jìn)一步精致地進(jìn)行訪問控制.如果
TCP Wrappers和xinetd一起聯(lián)合使用,TCP
Wrappers的功能就會增強,因為xinetd作為超級服務(wù)器可以為系統(tǒng)就訪問,登錄,捆綁,重定向和資源利用方面提供額外的服務(wù)享有權(quán)控制.
1.TCP Wrappers
在默認(rèn)情況下會安裝TCP
Wrappers軟件包(tcp_wrappers),該軟件包提供基于主機的,到網(wǎng)絡(luò)服務(wù)的訪問控制.這個軟件包中最重要的組成部分是/usr/lib
/libwrap.a庫.通常來說,使用libwrap.a庫進(jìn)行編譯的服務(wù)就是一個TCP Wrappers.
當(dāng)一個客戶試圖與一個TCP-wrapped服務(wù)進(jìn)行連接時,這個服務(wù)首先會檢查主機的訪問文件(/etc/hosts.allow和
/etc/hosts.deny)來決定這個客戶是否被允許連接到這個服務(wù).在大多數(shù)情況下,這個服務(wù)還會使用syslog守護(hù)進(jìn)程(syslogd)把
這個發(fā)出請求的客戶用戶名以及所要求訪問的服務(wù)寫入/var/log/secure或/var/log/messages文件中.如果一個客戶被允許進(jìn)行
連接,TCP
Wrappers會釋放它對所請求服務(wù)的連接控制權(quán),然后將不再在這個客戶與服務(wù)器間的通信過程中起任何作用.除了可以控制訪問和記錄日志信息外,TCP
Wrappers還可以在允許或拒絕到網(wǎng)絡(luò)服務(wù)的連接請求之前來執(zhí)行相關(guān)的命令與客戶進(jìn)行交流.
因為TCP Wrappers是系統(tǒng)管理員所使用的安全工具庫的一個很有價值的補充,紅帽企業(yè)Linux中的多數(shù)網(wǎng)絡(luò)服務(wù)都與libwrap.a庫相連.這樣的應(yīng)用程序包括/usr/sbin/sshd,/usr/sbin/sendmail等.
1.1.TCP Wrappers的優(yōu)勢
TCP Wrappers擁有以下其它網(wǎng)絡(luò)控制技術(shù)不具備的優(yōu)勢:
A.對客戶和wrapped(會繞的)網(wǎng)絡(luò)服務(wù)的透明性.連接的客戶和wrapped網(wǎng)絡(luò)服務(wù)都不需要知道TCP Wrappers在使用中.合法用戶會被記錄到日志中,并獲得所需要的服務(wù),而非法用戶則無法獲得要求的服務(wù).
B.中央化管理多項協(xié)議.TCP Wrappers獨立運行于它們所保護(hù)的網(wǎng)絡(luò)服務(wù),這就允許多個服務(wù)器應(yīng)用程序共享一組通用的訪問控制配置文件,從而簡化了管理任務(wù).
1.2.TCP Wrappers配置文件
要決定一個客戶是否被允許連接一項服務(wù),TCP Wrappers會參考以下兩個文件,這兩個文件通常被稱為主機訪問文件:
/etc/hosts.allow
/etc/hosts.deny
當(dāng)一個TCP Wrappers接收到一個客戶請求時,它會運行以下幾個步驟:
A.檢查/etc/hosts.allow.TCP會繞服務(wù)會循序地解釋/etc/hosts.allow文件并應(yīng)用第一個為這個服務(wù)所指定的規(guī)則.如果找到了一個匹配的規(guī)則,則允許連接.如果找不到匹配的規(guī)則,就會進(jìn)行下一個步驟.
B.檢查/etc/hosts.deny.TCP會繞的服務(wù)會循序地來解釋/etc/hosts.deny文件.如果找到一個匹配的規(guī)則,則拒絕這個連接.如果找不到匹配的規(guī)則,則允許連接到這個服務(wù).
在使用TCP Wrappers保護(hù)網(wǎng)絡(luò)服務(wù)時應(yīng)該考慮以下幾個要點:
A.因為hosts.allow中的規(guī)則會首先被應(yīng)用,所以比hosts.deny中指定的規(guī)則有優(yōu)先權(quán).因此,如果訪問一項服務(wù)在hosts.allow中設(shè)置為允許,那么在hosts.deny中同一項服務(wù)的拒絕訪問設(shè)置則被忽略.
B.每個文件中的各項規(guī)則是由上到下被讀取的,第一個匹配的規(guī)則是唯一被應(yīng)用的規(guī)則.因此,規(guī)則的排列順序極其重要.
C.如果在這兩個文件中都沒有找到匹配的規(guī)則,或這兩個文件都不存在,那么就授予訪問這項服務(wù)的權(quán)限.
D.TCP會繞的服務(wù)并不緩存主機訪問文件中的規(guī)則,因此對hosts.allow或hosts.deny的配置改變都無需重新啟動網(wǎng)絡(luò)服務(wù)便會馬上起作用.
1.3.格式化訪問規(guī)則
/etc/hosts.allow和/etc/hosts.deny文件的格式是完全相同的.每個規(guī)則都必須位于其正確的行位.空行或以井字號(#)開始的行會被忽略.
每條規(guī)則都使用以下基本格式來對網(wǎng)絡(luò)服務(wù)的訪問進(jìn)行控制:
<daemon list>: <client list> [: <option>: <option>: ...]
字段解釋如下:
<daemon list>,一個由逗號分隔的進(jìn)程名(不是服務(wù)名)列表,或ALL通配符.守護(hù)進(jìn)程列表也接受運算符來提供更大的靈活性.
<client list>,一個由逗號分隔的主機名,主機IP地址,特殊模式或通配符列表,該列表用來識別受這項規(guī)則影響的主機.客戶列表也接受運算符來允許更大的靈活性.
<option>,這項規(guī)則被觸發(fā)時要運行一個動作選項或由冒號分隔開動作列表.選項領(lǐng)域支持?jǐn)U展式,發(fā)布shell命令,允許或拒絕訪問以及修改日志記錄.
下面是一個基本的主機訪問規(guī)則示例:
vsftpd : .example.com
這條規(guī)則指示TCP Wrappers監(jiān)測在example.com域內(nèi)的任何主機向FTP守護(hù)進(jìn)程(vsftpd)發(fā)出的連接.如果這條規(guī)則出現(xiàn)在hosts.allow 中,連接則被接受.如果這條規(guī)則出現(xiàn)在hosts.deny中,連接則被拒絕.
下面的主機訪問規(guī)則比較復(fù)雜,而且使用兩個選項領(lǐng)域:
sshd : .example.com \ :spawn /bin/echo `/bin/date` access denied>>/var/log/sshd.log \ :deny
請注意每個選項領(lǐng)域前面都有反斜線(\).使用反斜線可以防止由于規(guī)則太長而造成失敗.
這個范例規(guī)定如果example.com中的某個主機試圖向SSH守護(hù)進(jìn)程(sshd)發(fā)出連接請求,那么執(zhí)行echo命令來將這次嘗試添加到一個專用日
志文件里,并且拒絕該連接.因為使用了命令選項 deny,這一行拒絕訪問,即使它出現(xiàn)在 hosts.allow 文件里.
1.4.通配符
通配符使TCP Wrappers更容易匹配各種守護(hù)進(jìn)程或主機.使用通配符最頻繁的是在訪問規(guī)則的客戶列表領(lǐng)域內(nèi).
以下是可以被使用的通配符:
ALL,完全匹配,可以用在守護(hù)進(jìn)程列表和客戶列表中.
LOCAL,與任何不包括圓點(.)的主機匹配,如localhost.
KNOWN,與任何帶有已知主機名和主機地址或已知用戶的主機匹配.
UNKNOWN,與任何帶有未知主機名和主機地址或未知用戶的主機匹配.
PARANOID,與任何帶有主機名和主機地址不相匹配的主機匹配.
1.5.模式
模式可以用在訪問規(guī)則的客戶領(lǐng)域里,從而更準(zhǔn)確地給客戶主機指定分組.
下面是一個常用模式列表:
A.主機名以圓點(.)開始,如果在一個主機名的開始放置一個圓點,那么就與所有共享這個主機名中列出的相同組成部分的主機匹配.如:.example.com適用于example.com域內(nèi)的任何主機.
B.IP地址以圓點(.)結(jié)束,如果在一個IP地址的末尾放置一個圓點,那么就與所有共享一個IP地址的起始數(shù)值組的主機匹配.如:192.168.適用于192.168.x.x網(wǎng)絡(luò)內(nèi)的任何主機.
C.IP地址/網(wǎng)絡(luò)掩碼對,網(wǎng)絡(luò)掩碼表達(dá)式也可以作為一個模式用來控制對某一組特定的IP地址的訪問.如:192.168.0.0
/255.255.254.0適用于地址區(qū)間從192.168.0.0到192.168.1.255的任何主機.
D.[IPv6地址]/前綴長度對,[網(wǎng)]/前綴長度對也可以作為一種模式用來控制對某一組特定的IPv6地址的訪問.如:
[3ffe:505:2:1::]/64適用于地址區(qū)間從3ffe:505:2:1::到
3ffe:505:2:1:ffff:ffff:ffff:ffff的任何主機.
E.星號(*),星號可以用來匹配整個不同組別的主機名或IP地址,只要在含有其它模式類型的客戶列表中這些組不混雜在一起的話.如:*.example.com適用于example.com域內(nèi)的任何主機.
F.斜線(/),如果一個客戶列表以斜線開始,這個列表就被當(dāng)作一個文件名對待.若是需要指定很大數(shù)量主機的各種規(guī)則的話,這一點就很有用處.
更多TCP Wrappers所接受的其它用到的模式.可參閱hosts_access man 5 page.
1.6.Portmap(端口映射器)和TCP Wrappers
實施TCP
Wrappers的Portmap不支持主機查找,也就是說portmap命令不能用主機名來識別相應(yīng)的主機.因此,在hosts.allow或
hosts.deny中對portmap的訪問控制規(guī)則必須使用IP地址來特指某主機,或用關(guān)鍵詞ALL.
對portmap訪問控制規(guī)則的修改可能不會立即起作用.可能得重新啟動portmap服務(wù).
像NIS和NFS一樣的被廣泛使用的服務(wù)都有賴于portmap來進(jìn)行運作,所以要了解這些局限性.
1.7.算子(Operators)
目前,訪問控制規(guī)則接受一個算子EXCEPT,這個算子可以用在一個規(guī)則的守護(hù)程序列表中,也可以用在客戶列表中.
這個EXCEPT算子允許特定的例外以用來在同一個規(guī)則中拓寬匹配的范圍.
下面的例子來自一個hosts.allow文件,除cracker.example.com之外,允許所有example.com主機連接所有的服務(wù)
ALL: .example.com EXCEPT cracker.example.com
hosts.allow文件內(nèi)的另一個例子中,來自192.168.0.x網(wǎng)絡(luò)的所有客戶都可以使用除FTP之外的所有服務(wù)
ALL EXCEPT vsftpd: 192.168.0.
從組織結(jié)構(gòu)上來說,避免使用EXCEPT算子更簡易一些.因為這樣可以讓其他的系統(tǒng)管理員能很快地掃描相關(guān)的文件以便查看哪些主機被允許或被拒絕訪問服務(wù),而無須通過EXCEPT算子來進(jìn)行排序.
1.8.選項領(lǐng)域
除了允許和拒絕訪問的基本規(guī)則外,紅帽企業(yè)Linux對TCP
Wrappers的實施支持通過option
fields對訪問控制語言的擴展式.通過在主機訪問規(guī)則中使用選項領(lǐng)域,系統(tǒng)管理員可以完成多種不同的任務(wù),比如像修改日志動作,加強訪問控制以及發(fā)出
shell命令.
1.9.記錄日志
通過使用severity命令,其選項領(lǐng)域讓系統(tǒng)管理員能夠很容易地改變一個規(guī)則的日志設(shè)施和優(yōu)先級別.
在下面的例子中,example.com域內(nèi)的任何主機向SSH守護(hù)進(jìn)程發(fā)出的各種連接會登錄到默認(rèn)的authprivsyslog設(shè)施內(nèi)(因為沒有具體指明設(shè)施參數(shù)值),并且以emerg優(yōu)先:
sshd : .example.com : severity emerg
使用severity選項也可以指定某個設(shè)施.下面的例子將來自example.com 主機的任何SSH連接意圖登錄到local0設(shè)施,并以alert優(yōu)先.
sshd : .example.com : severity local0.alert
實際操作中,這個例子直到syslog守護(hù)進(jìn)程(syslogd)被配置為登錄到local0設(shè)施才會起作用.
1.10.訪問控制
選項領(lǐng)域也允許系統(tǒng)管理員通過添加allow或deny作為命令的最后選項來明確地以單個規(guī)則方式允許或拒絕主機.
例如,下面的兩個規(guī)則允許來自client-1.example.com的SSH連接但卻拒絕來自client-2.example.com的連接
sshd : client-1.example.com : allow
sshd : client-2.example.com : deny
訪問控制以每個規(guī)則為基礎(chǔ),這樣選項領(lǐng)域就允許系統(tǒng)管理員把所有訪問規(guī)則寫成一個單一文件,要么是hosts.allow,要么是hosts.deny.有些系統(tǒng)管理員認(rèn)為這樣組織訪問規(guī)則更容易一些.
1.11.Shell命令
選項領(lǐng)域允許訪問規(guī)則通過下面兩個指令發(fā)出shell命令:
spawn,作為子進(jìn)程發(fā)出一個shell命令.這個命令可以使用/usr/sbin/safe_finger來獲取發(fā)出請求客戶的更多信息,或使用
echo命令來創(chuàng)建專用日志文件.在下面的例子中,試圖訪問來自example.com 域的Telnet服務(wù)的客戶被俏俏地登錄到一個專用文件.
in.telnetd : .example.com \
: spawn /bin/echo `/bin/date` from %h>>/var/log/telnet.log \
: allow
twist,把要求進(jìn)行的服務(wù)轉(zhuǎn)換成特定的命令.這個命令經(jīng)常用來給外侵者設(shè)立陷阱(也叫"蜜罐兒").也可以用來向預(yù)連接的客戶發(fā)送信息.這個
twist命令必須出現(xiàn)在該規(guī)則命令行的末尾.在下面的例子中,試圖訪問來自example.com域的FTP服務(wù)的客戶接收到用echo命令發(fā)送的一個
訊息.
vsftpd : .example.com \
: twist /bin/echo "421 This domain has been black-listed. Access denied!"
1.12.擴展式
擴展式命令與spawn和twist命令一起使用時,可以提供關(guān)于客戶/服務(wù)器以及相關(guān)進(jìn)程的信息.
下面是一個支持?jǐn)U展式的命令列表:
%a,返回用戶的IP地址.
%A,返回服務(wù)器的IP地址.
%c,返回大量的客戶信息,比如用戶名和主機名,或用戶名和IP地址.
%d,返回守護(hù)進(jìn)程的名稱.
%h,返回客戶的主機名(或IP地址,如果主機名沒有提供的話).
%H,返回服務(wù)器的主機名(或IP地址,如果主機名沒有提供的話).
%n,返回客戶的主機名.如果主機名沒有提供的話,屏幕上會顯示unknown.如果客戶的主機名和主機地址不匹配的話,屏幕上會顯示paranoid.
%N,返回服務(wù)器的主機名.如果主機名沒有提供的話,屏幕上會顯示unknown.如果服務(wù)器的主機名和主機地址不匹配的話,屏幕上會顯示paranoid.
%p,返回守護(hù)進(jìn)程的進(jìn)程ID.
%s,返回各種不同類型的服務(wù)器信息,比如守護(hù)進(jìn)程的進(jìn)程和服務(wù)器的主機或IP地址.
%u,返回客戶的用戶名.如果沒有提供的話,屏幕上會顯示unknown.
下面用來示范的規(guī)則與spawn命令一起使用了一個擴展式來在一個定制的日志文件中確認(rèn)客戶主機.
當(dāng)來自example.com域的一個主機向SSH守護(hù)進(jìn)程(sshd)發(fā)出連接意圖時,執(zhí)行echo命令來把這次包括客戶主機名(通過使用%h擴展式)的連接嘗試信息記錄到一個專用文件中.
sshd : .example.com \
: spawn /bin/echo `/bin/date` access denied to %h>>/var/log/sshd.log \
: deny
同樣的,擴展式也可以用來把個性化的訊息返回給客戶.在下面的例子中,試圖訪問來自example.com域的FTP服務(wù)的客戶們得到通知,他們的訪問被服務(wù)器取締了.
vsftpd : .example.com \
: twist /bin/echo "421 %h has been banned from this server!"
有關(guān)可用擴展式的更完全的解釋,以及對附加的訪問控制選項的更完全的解釋,可參閱man page的第五部分,查看hosts_access(man 5 hosts_access)和hosts_options.
1.13.連接旗幟(Connection Banners)
當(dāng)用戶連接到服務(wù)器時,用合適的旗幟標(biāo)示顯示其連接是一種很好的方式,可以讓潛在的襲擊者知道本系統(tǒng)管理員很有警惕性.同時也可以控制關(guān)于系統(tǒng)什么樣的信
息可以呈現(xiàn)給用戶.要想為一項服務(wù)設(shè)置一個TCP Wrappers旗幟標(biāo)示,可使用banner選項。
這個例子為vsftpd設(shè)置一個旗幟標(biāo)示.首先,創(chuàng)建一個旗幟標(biāo)示文件,可以儲存在系統(tǒng)的任何地方,但必須與其守護(hù)進(jìn)程同名.例如,該文件命名為/etc/banners/vsftpd并包含下面一行:
220-Hello, %c 220-All activity on ftp.example.com is logged. 220-Inappropriate use will result in your access privileges being removed.
%c權(quán)標(biāo)可提供客戶的多種信息,比如用戶名和主機名,或用戶名和IP地址,也許這樣會使該連接更讓人覺得有脅迫感。
要想使該旗幟在有外來連接進(jìn)入時顯示,可在/etc/hosts.allow文件上加上下面一行:
vsftpd : ALL : banners /etc/banners/
2.xinetd
xinetd控制對一個流行網(wǎng)絡(luò)服務(wù)子集的訪問,該子集包括FTP,IMAP和Telnet.同時這種服務(wù)還對訪問控制,增強的日志記錄功能,捆綁,重定向以及資源使用控制提供特定化服務(wù)配置選項.
當(dāng)一個用戶試圖連接由xinetd控制的一個網(wǎng)絡(luò)服務(wù)時,這種超級服務(wù)會接到請求并且查看是否有任何相匹配的TCP
Wrappers訪問控制規(guī)則存在.如果連接被允許,xinetd則檢驗該連接在其個性化的規(guī)則下對那項服務(wù)來說是被允許的.同時也檢查該項服務(wù)是否還有
足夠的資源份額以及這項服務(wù)是否與任何定義好的規(guī)則相沖突.如果所有條件都得到滿足,(也就是:訪問這項服務(wù)的請求被允許,這項服務(wù)還有足夠的資源份額,
以及這項服務(wù)不與任何定義好的規(guī)則相沖突),那么xinetd就開始進(jìn)行被請求的服務(wù)并且讓其通過對連接的訪問控制.連接建立后,xinetd就不再參與
客戶和服務(wù)器之間的通訊交流.
2.1.xinetd的配置文件
xinetd的配置文件如下:
/etc/xinetd.conf,全局xinetd配置文件.
/etc/xinetd.d/,包含所有具體化服務(wù)文件的目錄.
/etc/xinetd.conf文件包含一般的配置設(shè)定,這種設(shè)定影響xinetd控制下的每一項服務(wù).當(dāng)xinetd服務(wù)第一次啟動時,其設(shè)定信息就
被讀取,所以要想使改變后的配置起作用,你需要重新啟動xinetd服務(wù).下面是一個/etc/xinetd.conf文件的示范:
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
includedir /etc/xinetd.d
這些行控制xinetd以下的各個方面:
instances,指定xinetd可以處理同時間進(jìn)入系統(tǒng)的請求的最大數(shù)值.
log_type,配置xinetd來使用authpriv日志設(shè)施,該設(shè)施將日志條目寫入/var/log/secure文件.如果加上一個像FILE
/var/log/xinetdlog一樣的命令,就會在/var/log/目錄下創(chuàng)建一個叫作xinetdlog的定制日志文件.
log_on_success,配置xinetd來記錄成功的連接嘗試.默認(rèn)情況下,遠(yuǎn)程主機的IP地址和服務(wù)器處理這個請求的處理ID都要被記錄.
log_on_failure,配置xinetd來記錄失敗的連接嘗試,或被拒絕的連接嘗試.
cps,配置xinetd來設(shè)定對任何一項服務(wù)來說每秒鐘最多允許25個連接.如果超過這個限制,該服務(wù)就會隱退30秒.
includedir/etc/xinetd.d/,包含位于/etc/xinetd.d/目錄下的并且在具體化特定服務(wù)配置文件中聲明的各種選項.
/etc/xinetd.d/目錄含有xinetd管理下的每一項服務(wù)的配置文件以及與該服務(wù)相關(guān)連的各文件的名稱.就xinetd.conf來說,該目
錄只有當(dāng)xinetd服務(wù)啟動時才被讀取.要使改變的配置起作用,系統(tǒng)管理員必須重新啟動xinetd服務(wù).
/etc/xinetd.d/目錄下的文件格式使用與/etc/xinetd.conf相同的常規(guī)格式.各項服務(wù)的配置都儲存在一個獨立的文件中,其主要原因是這樣做使得個性化定制更容易一些,一項服務(wù)影響其它服務(wù)的可能性也更小一些.
要想了解這些文件是如何組構(gòu)在一起的,可參考以下/etc/xinetd.d/krb5-telnet文件:
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/kerberos/sbin/telnetd
log_on_failure += USERID
disable = yes
}
這些行控制telnet服務(wù)的多個不同側(cè)面:
service,指定服務(wù)名稱,通常是/etc/services文件中服務(wù)列表中的一項.
flags,設(shè)定連接的一系列屬性中任何一個屬性.REUSE指示xinetd來重新使用這個插座進(jìn)行Telnet連接.
socket_type,設(shè)定該網(wǎng)絡(luò)插座類型為stream.
wait,指定這項服務(wù)是單線程(yes)還是多線程(no).
user,指定該進(jìn)程運行在哪個用戶 ID 下.
server,指定要發(fā)射哪個二進(jìn)制可執(zhí)行文件.
log_on_failure,為log_on_failure指定登錄參數(shù),在xinetd.conf中已經(jīng)定義好的除外.
disable,指定這項服務(wù)是要被中止(yes)還是不被中止(no).
可參閱xinetd.conf man page來獲取關(guān)于這些選項及其用途的更多信息.
2.2.日志記錄選項
下面的日志記錄選項可用于/etc/xinetd.d/目錄下的/etc/xinetd.conf和各種具體化特定服務(wù)配置文件.
ATTEMPT,日志記錄每次連接嘗試失敗的事實(log_on_failure).
DURATION,日志記錄這項服務(wù)被遠(yuǎn)程系統(tǒng)使用的時間長度(log_on_success).
EXIT,日志記錄退出狀態(tài)或這項服務(wù)的中止信號(log_on_success).
HOST,日志記錄遠(yuǎn)程主機的IP地址(log_on_failure 和 log_on_success).
PID,日志記錄該服務(wù)器接到連接請求時進(jìn)行處理的處理ID(log_on_success).
USERID,日志記錄遠(yuǎn)程用戶使用為所有多線程主流服務(wù)而在RFC 1413中規(guī)定的方法(log_on_failure andlog_on_success).
如果需要一個日志記錄的完整列表,可參閱xinetd.conf man page.
2.3.訪問控制選項
xinetd服務(wù)的用戶們可以選擇使用TCP Wrappers主機訪問規(guī)則,也可以通過xinetd配置文件提供訪問控制,或二者混合使用.
下面是一些xinetd支持的主機訪問控制選項:
only_from,只允許特別指定的主機使用這項服務(wù).
no_access,阻斷列出的主機使用這項服務(wù).
access_times,指定某一特定服務(wù)可能需要的時間段.該時間段的表達(dá)必須用24時的符號格式,即:HH:MM-HH:MM.
only_from和no_access選項可以使用很多IP地址或主機名,或者可以指定整個網(wǎng)絡(luò).與TCP
Wrappers類似,將xinetd訪問控制與增強的日志記錄配置相結(jié)合可以提高安全性,這樣可以阻斷被禁止主機的請求同時又詳細(xì)記錄每一次的連接嘗
試.
例如,下面的/etc/xinetd.d/telnet文件可以用來阻斷來自某特定網(wǎng)絡(luò)群體的Telnet訪問,也用來限制允許用戶們登錄的總體時間段.
service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/kerberos/sbin/telnetd
log_on_failure += USERID
no_access = 172.16.45.0/24
log_on_success += PID HOST EXIT
access_times = 09:45-16:15
}
在這個例子中,當(dāng)一個來自10.0.1.0/24網(wǎng)絡(luò)的用戶系統(tǒng),比如10.0.1.2,試圖訪問Telnet服務(wù)時,連接由外連主機關(guān)閉.
另外,他們的登錄試圖會記錄在/var/log/messages中.
當(dāng)TCP Wrappers和xinetd連用來進(jìn)行訪問控制時,了解這兩種訪問控制機制之間的關(guān)系是很重要的.
當(dāng)一個客戶請求連接時, xinetd控制下的事件發(fā)生順序如下:
1.xinetd守護(hù)進(jìn)程通過使用libwrap.a庫呼叫來訪問TCP Wrappers主機訪問規(guī)則.如果一個拒絕規(guī)則匹配這個客戶,那么連接就被放棄.如果一個允許規(guī)則匹配這個客戶的話,該連接就被傳遞給xinetd.
2.xinetd守護(hù)進(jìn)程檢查其本身的訪問控制規(guī)則,這種檢查既為xinetd服務(wù),也為被請求的服務(wù).如果一個拒絕規(guī)則匹配這個客戶,那么連接就被放棄.否則,xinetd 就啟動這項被請求的服務(wù),并讓連接連到那項服務(wù)上.
2.4.捆綁和重定向選項
xinetd服務(wù)配置文件支持將這項服務(wù)捆綁到一個IP地址上,并且把那項服務(wù)的外來請求重定向到另外一個IP地址,主機名或端口.
捆綁服務(wù)用特定化服務(wù)配置文件中的bind選項來控制,并把該服務(wù)鏈接到系統(tǒng)上的一個IP地址.捆綁配置好后,bind選項只允許到合法IP地址的請求來訪問該服務(wù).你可以使用這種方法把不同服務(wù)根據(jù)要求捆綁到不同的網(wǎng)絡(luò)接口.
這對擁有多重網(wǎng)絡(luò)適配器或多個IP地址的系統(tǒng)尤其有用.在這樣的系統(tǒng)內(nèi),不安全的服務(wù)(比如Telnet)可以配置成只用來偵聽連接到某專用網(wǎng)的接口而不偵聽連接到互聯(lián)網(wǎng)(Telnet)的接口.
redirect選項接受后面帶有端口號的IP地址或主機名,并配置這項服務(wù)來把連接到這項服務(wù)的任何請求都重定向到指定的主機和端口號.重定向的這一特
征可以用來把請求改向到同一個系統(tǒng)上的另一個端口,重定向到同一臺機器上的一個不同IP地址,或轉(zhuǎn)移到一個完全不同的系統(tǒng)和端口號,以及這些選項的任何結(jié)
合.因此,一個系統(tǒng)上要連接到某項服務(wù)的用戶可能會被路由到另外一個系統(tǒng),而無須中斷目前的系統(tǒng).
xinetd守護(hù)進(jìn)程要完成這樣的重定向需要不斷復(fù)制這樣一個過程:發(fā)出請求的客戶主機和實際提供這項服務(wù)的主機在連接期間要保持活動狀態(tài)并且兩個系統(tǒng)之間不斷要有數(shù)據(jù)的傳輸轉(zhuǎn)移.
bind和redirect選項一起使用時,其優(yōu)勢最為明顯.如果把一項服務(wù)捆綁到一個系統(tǒng)的某特定的IP地址,然后再把對該服務(wù)的請求重定向到只有第一
個機器可以看見的第二個機器上,那么可以使用內(nèi)部系統(tǒng)來為一個完全不同的網(wǎng)絡(luò)提供這些服務(wù).還有其它用途,比如這些選項可以用來限制在一個多處為家的機器
上某特定服務(wù)與一個已知IP地址的連接時間,也可以用來把對那項服務(wù)的任何請求重定向到另外一臺專門為那項服務(wù)配置的機器.
例如,考慮這樣一個系統(tǒng),一個為其Telnet服務(wù)而設(shè)定的被用作防火墻的系統(tǒng):
service telnet
{
socket_type = stream
wait = no
server = /usr/kerberos/sbin/telnetd
log_on_success += DURATION USERID
log_on_failure += USERID
bind = 123.123.123.123
redirect = 10.0.1.13 23
}
這個文件中的bind和redirect選項保證那臺機器上的Telnet服務(wù)被捆綁到外部IP地址(123.123.123.123),面向互聯(lián)網(wǎng)的那
個地址.另外,任何發(fā)送到123.123.123.123的Telnet服務(wù)請求都會通過第二個網(wǎng)絡(luò)適配器重定向到一個內(nèi)部IP地址
(10.0.1.13),這個地址只有防火墻和內(nèi)部系統(tǒng)可以訪問.這個防火墻就傳輸這兩個系統(tǒng)之間的通訊交流,可是該連接系統(tǒng)卻認(rèn)為連接的是
123.123.123.123,而實際上連接的是一個不同的機器.
這一特征對使用寬帶連接又只有一個固定的IP地址的用戶尤其有用.使用NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)時,網(wǎng)關(guān)機器背后的使用內(nèi)部專用IP地址的各系統(tǒng)在該網(wǎng)關(guān)系
統(tǒng)以外是不能被使用的.然而,當(dāng)由xinetd控制的某些服務(wù)用bind和redirect選項配置時,該網(wǎng)關(guān)機器可以被用作外部系統(tǒng)和某特定被配置好來
提供該服務(wù)的內(nèi)部機器之間的服務(wù)代理.另外,多種不同的xinetd訪問控制和日志選項也可以接受額外的保護(hù).
2.5.資源管理選項
xinetd守護(hù)進(jìn)程可以增加一層基本的不受DoS(服務(wù)拒絕)攻擊的保護(hù).
下面是一個可以幫助限制類似攻擊成效的命令列表:
cps=,限制外來連接的速度.這個命令有兩個參數(shù):
第一個參數(shù),每分鐘能夠處理的連接數(shù)目.如果處理外來連接的速度高于這個數(shù)目,該服務(wù)就會暫時中斷,默認(rèn)值是50.
第二個參數(shù),服務(wù)中斷幾秒中之后才能重新啟動該服務(wù),其默認(rèn)間隙是10秒鐘.
instances,指明一項服務(wù)所能允許的連接總數(shù).這項命令接受任何整數(shù)數(shù)值或UNLIMITED.
per_source,指明一臺主機所能允許的一項服務(wù)的連接總數(shù).這項命令接受任何整數(shù)數(shù)值或UNLIMITED.
rlimit_as,以千字節(jié)或MB為單位指明該服務(wù)所占用的內(nèi)存空間.這項命令接受任何整數(shù)數(shù)值或UNLIMITED.
rlimit_cpu,以秒為單位指明一項服務(wù)所占用 CPU 的時間總量.這項命令接受任何整數(shù)數(shù)值或UNLIMITED.
max_load,定義CPU用量或一項服務(wù)負(fù)載平均限量值.它接受一個非固定點的數(shù)值參數(shù).負(fù)載平均是對某一時間內(nèi)系統(tǒng)有多少進(jìn)程處于活動狀態(tài)的一個大
體測量.請參閱 uptime、who 和 procinfo 命令來獲取關(guān)于負(fù)載平均的更多信息.
還有很多可以使用的資源管理選項可以用來管理xinetd.可參閱xinetd.conf man page來獲取更多信息.
2.6.有用的網(wǎng)站
http://www.xinetd.org/,xinetd 的主頁,含有配置文件示例,配置文件特點的詳細(xì)列表和一個很有用的FAQ.
http://www.macsecurity.org/resources/xinetd/tutorial.shtml,一部詳細(xì)的學(xué)習(xí)指南,討論多種不同方式來優(yōu)化xinetd默認(rèn)配置文件以滿足特定的安全需要.