天天看點

super daemon與tcp_wrappers結合應用小結(理論部分)

在linux下,主機常常會收到一些要求,比如來自本機系統要求或者是網絡用戶端的服務要求,隻要有要求來的時候,通常就是各式各樣的程序負責去喚起應該要工作的服務來工作!

守護程序目前有兩種基本的模式,分别是有獨立守護程序與和非獨立守護程序兩種方式,其中非獨立守護程序的各項工作由超級守護程序xinetd(一種特殊的獨立守護程序)代為管理。 換句話說,可以了解為超級守護程序可以代表全部的非獨立守護程序。

獨立守護程序(stand_alone):

獨立守護程序之後,就直接常駐在記憶體當中!他雖然會一直的占用系統的資源,但最大的優點就是,他會一直啟動!是以當有要求來的時候,他就會很快速的響應!常常用在這一種 程序的網絡服務如常見的 httpd、vsftpd 等。

超級守護程序(super daemon):

 相對于獨立守護程序的執行方式,這一種服務的啟動方式則是由統一的一個程序來負責喚起該服務!這一個統一負責的程序就是 xinetd!常用非獨立守護程序的網絡服務有telnet、tftp等。

   下面說說超級守護守護程序的相關資訊。

   超級守護程序的配置檔案位于/etc/xinetd.conf中,這個檔案相當于那些非獨立守護程序的配置檔案的模闆。在設定非獨立守護程序的配置檔案時可以參考這個檔案。

defaults

# The next two items are intended to be a quick access place to

# temporarily enable or disable services.

#       enabled         =

#       disabled        =

确定是否開啟本服務,如果enabled=yes,或者disabled=no就打開該項服務,反之enabled=no 或者disabled=yes就是關閉該項服務喽!在非獨立守護程序的配置文見中預設是   disable = yes

# Define general logging characteristics.

        log_type        = SYSLOG daemon info

        log_on_failure  = HOST

        log_on_success  = PID HOST DURATION EXIT

定義登陸特征的選項,log_type選項設定顯示登陸類型,如果登入失敗,顯示主機名,如果登陸成功,則顯示登陸使用者的PID,主機名,線上時間,出口。在非獨立守護程序的配置文見中預設是 log_on_failure  += USERID   “+=”的意思是在xinetd.conf的基礎上再加上 USERID

# Define access restriction defaults

#       no_access       =

#       only_from       =

#       max_load        = 0

        cps             = 50 10

        instances       = 50

        per_source      = 10

定義使用者登陸時的限制選項,“no_access = ”後跟不允許登入的主機,“only_from= ”後跟允許登陸的主機。表示主機的方法有四種。分别是:

1、以網段形式 例如:192.168.1.0

2、以網絡名形式 這些網絡名來自/etc/networks的配置檔案或者NIS域 例如:@mynetwork

3、以主機名形式(必須以.開頭,切記) 例如:.domain.com

4、以IP位址加上子網路遮罩 例如:192.168.0.0/255.255.255.0 或者192.168.0.0/24

【注】當在配置檔案中同時存在no_access 和 only_from時系統取最佳比對。也就是說以指定範圍小的那個選項為準。若兩個都不存在,則允許通路。

max_load  最大登陸的用戶端數

cps限制進入的數率。這一項有兩個值,前一個值代表每秒鐘處理的最大并發連結數,但是如果超過最大連結時,後面一個值就有用途了。在超過最大連結數的情況下,當有新的連結進來時需要等待一段時間後重新進行連結,後一個值就是來定義這個等待時間的。

per_source 允許一個IP發起的最大并發連結數。

# Address and networking defaults

#       bind            =

#       mdns           = yes

        v6only          = no

bind的作用是綁定監聽位址

v6only 定義是否支援IP v6位址協定

# setup environmental attributes

#       passenv         =

        groups          = yes

        umask           = 002

這是設定環境變量的一些參數,一般用預設值就行了,在非獨立守護程序中一般不會出現。

# Generally, banners are not used. This sets up their global defaults

#       banner          =

#       banner_fail     =

#       banner_success  =

一般來說,banners的用途不大。其作用是:當用戶端連結時回報給用戶端的歡迎資訊或者登入失敗資訊。

下面就以telnet服務為例來具體說明:

telnet服務的配置檔案在/etc/xinetd.d/telnet中,打開其配置檔案可以看到:

service telnet{

        disable = no

        flags           = REUSE

        socket_type     = stream

        wait            = no

        user            = root

        server          = /usr/sbin/in.telnetd

        only_from       =192.168.0.0/24

        log_on_failure  += USERID

        access_times     =8:00-18:00

}

其中:

flags  表示服務運作标志

socket_type 表示套接字類型,他有兩個選項。 stream 表示使用的是TCP協定,dgram 表示使用的是UDP協定。

server 表示用戶端使用telnet登入伺服器時,伺服器要調用的系統程序。

wait 有yes 和no 兩個選項,yes 表示單線程,由非獨立守護程序自己來管理使用者的登入情況,no 表示多線程,由xinetd代為管理使用者登入情況。

user 以某個使用者的身份來運作該程式。

access_times 設定使用者可以通路的時間段。

下面說一下tcp_warpper的一些設定:

事實上,除了使用 xinetd來設定安全機制之外, 我們還可以利用額外的機制來抵擋某些不受歡迎的主機! 那就是/etc/hosts.allow 以及 /etc/hosts.deny 這兩個檔案的功能啦!

tcp_warpper的工作原理圖為:

當有外界通路請求時,tcp_warpper就去/etc/hosts.allow檔案中尋找對應條目,如果在該檔案中尋找到就允許通路,如果尋找不到就接着去/etc/hosts.deny檔案中尋找,如果找到,就拒絕通路,如果尋找不到,則允許通路。

這兩個檔案内容基本的文法是:

<service(program_name)> : <IP, name,netmask,network name> : <action>

第一項<service(program_name)>

服務程序名:即可執行二進制程式名,不是服務名。

如是獨立守護程序,則直接寫程序名,例如 vsftpd

如果是非獨立守護程序,要在程序名前加”in.”,例如 in.tenletd

另外,如果伺服器端有兩塊以上的網卡,還可以對網卡進行綁定,即設定用戶端是基于那塊網卡來進行通路的。例如:[email protected] : 192.168.0.

第二項<IP, host name,netmask,network name>

IP 即單個具體的IP位址,例如 :192.168.0.82

還有一個特殊之處是IP位址可以寫成 192.168.0.  意思是192.168.0.網段内的所有主機。

host name 即某個域名,必須以“.”開頭,例如  .example.com  意思是包括example.com域中所有主機。

netmask 即包括某個網段, 例如:192.168.0.0/255.255.255.0

【注:】與非獨立守護程序配置檔案不同,該檔案不支援無類域間路由,是以不能寫成192.168.0.0/24 必須寫成子網路遮罩形式192.168.0.0/255.255.255.0

network name 即這些網絡名來自/etc/networks的配置檔案或者NIS域 例如:@mynetwork

此外,我們還可以使用一些特殊參數(即宏定義)在第二項!内容有:

* ALL:代表全部的 program_name 或者是 IP 都接受的意思,

例如 ALL: ALL: deny

    * LOCAL:比對來自本地主機;例如: ALL: LOCAL: allow

    * UNKNOWN:表示不可被解析的 IP,domain 等主機;

    * KNOWN:表示為可解析的 IP, domain等主機;

* PARANOID:表示正反向解析不比對的位址;

* EXCEPT:表示不包含後面的主機;

例如:in.telnetd:192.168.0. EXCEPT 192.168.0.82

【注:】這些特殊參數必須要大些。

第三項<action>

主要的内容有:

*spawn

可以利用後續接的 shell 來進行額外的工作,且具有變數功能,主要的變數内容為: %h, %a, %d等等;

          %a 表示用戶端位址

%A 表示伺服器端位址

%h 表示用戶端主機名(如果名字不存在,則用IP來表示)%H 表示伺服器端主機名

%d 表示該項服務的可執行檔案名

%c 表示用戶端資訊(以user@host格式來表示)

 %s 表示伺服器短資訊(以server@host格式來表示)

%p 表示PID

%% 表示轉義字元%

* twist

立刻執行後面的指令,且執行完後終止該次連線的要求 (DENY)

*banners

讀取/var/banners/servicename下的的檔案,将檔案内的歡迎資訊顯示給登陸使用者 切記servicename必須要與第一項service名字相同。否則就讀取不到這些資訊。有關具體實驗步驟,請參閱實驗部分。

本文轉自 linuxtro 51CTO部落格,原文連結:http://blog.51cto.com/linuxtro/278641,如需轉載請自行聯系原作者

繼續閱讀