天天看點

基于Tcp Wrapper和Xinetd的服務通路控制

一、tcp wrapper

Tcp wrapper:又叫TCPD網絡資源通路控制器,工作在TCP層,通常情況下隻能對基于TCP協定的某些通路做控制的,其實它對應的是一個庫檔案,由glibc提供的,工作于使用者空間使用者請求之間。當一個應用程式在編譯時連接配接到該庫時,當使用者通過TCP協定連接配接本機去通路該服務時,其通路的流程就變成了以下流程:

<a target="_blank" href="http://blog.51cto.com/attachment/201204/233731280.png"></a>

當使用者通過基于TCP協定通路該應用程式時,首先進入TCP/IP協定棧,之後由tcp wrapper進行檢查通路是否被允許,如果允許則交送給APP,否則的話則直接拒絕通路。

是以可以将tcp wrapper了解為:一個工作在使用者請求和服務套接字之間的檢查過濾機制,攔截對于某種特定服務的符文請求并将其根據其定義的通路規則決定是否允許被通路的通路控制機制。

檢查一個服務是否受tcp wrapper控制

#ldd `which bin_name` | grep "libwrap.so"

如果可以查找到,就說明其受tcp wrapper控制

但是有些程式在編譯時是通過靜态的方式連結庫

如上面的那種就叫做動态連結庫,即是在需要使用時進行動态加載

是以使用另外以指令:

#strings `which bin_name` | grep hosts

可以看到/etc/hosts.allow、/etc/hosts.deny

而tcp wrapper正式根據這兩個檔案中所定義的規則進行通路控制的

文法格式:

daemon_list:    Client_list    [:options]

程序清單(可執行程式的檔案名):用戶端清單(client_list)

例:sshd: 192.168.0.

允許192.168.0.0網段允許或拒絕通路sshd服務

daemon_list:

vsftpd,sshd,in.telnetd   #用戶端清單

ALL(宏)                   #表示所有

[email protected]    #使用者通過172.16.4.1來通路vsftp服務則受tcp wrapper控制

Client_list:

IP

network address

    network/mask 隻接受長格式掩碼,不接受短格式掩碼

    172.16.  标準網絡位址,注意不要漏掉 " . "

HOSTNAME

    FQDN        www.coolinuz.com

    .DOMNAME    .coolinuz.com

MACRO(宏)

    ALL

    LOCAL(跟本地主機IP在同一個網段)

    KNOWN(主機名可以被正常解析的)

    UNKNOWN(主機名不要可以被正常解析的)

    PARANOID(主機名的正向解析和反向解析不比對)

    EXCEPT(除了,不包含)

spawn:記錄日志  

    %c:client infomation(user@host)  登入者的IP

    %s:service info(service@host)   通路的服務

    %h:client hostname  用戶端的主機名

    %p:server PID  

例如:以下規則均寫在/etc/hosts.allow,/etc/hosts.deny格式一樣,這裡不做具體的示範。

in.telnetd: 172.16. EXCEPT 172.16.100.200

允許172.16.0.0網段中除了172.16.100.200主機通路telnet服務

in.telnetd: 172.16. :spawn echo "connect `date`" &gt;&gt;/var/log/tcpwrapper.log

允許172.16.0.0網段中主機通路telnet服務,并将其通路之日記錄到/var/log/tcpwrapper.log

生效順序:

/etc/hosts.allow --&gt; /etc/hosts.deny --&gt; 預設規則(allow)

分割線

===============================================================================================

二、xinetd

在linux中服務有兩類:

standalone:獨立守護程序

    自己管理自己,不受其他的限制與影響,響應速度快

transient:非獨立守護程序:xinetd

    按需啟動,無需關閉,節省資源

【1】xinetd:超級守護程序:

extended internet daemon

xinetd是新一代的網絡守護程序服務程式,常用來管理多種輕量級Internet服務。

xinetd受tcpd控制,xinetd管理的所有服務都受tcpd控制

配置檔案:/etc/xinetd.conf

片段:/etc/xinetd.d/*

【2】xinetd所管理的服務:

1. 标準Internet服務:telnet、ftp。

2. 資訊服務:finger、netstat、systat。

3. 郵件服務:imap、imaps、pop2、pop3、pops。

4. RPC服務:rquotad、rstatd、rusersd、sprayd、walld。

5. BSD服務:comsat、exec、login、ntalk、shell、talk。

6. 内部服務:chargen、daytime、echo、servers、services、time。

7. 安全服務:irc。

8. 其他服務:name、tftp、uucp。

具體可以使用xinetd的服務在/etc/services檔案中指出。

【3】配置檔案/etc/xinetd.conf:

xinetd的配置檔案是/etc/xinetd.conf,但是它隻包括幾個預設值及/etc/xinetd.d目錄中的配置檔案。如果要啟用或禁用某項xinetd服務,編輯位于/etc/xinetd.d目錄中的配置檔案。/etc/xinetd.conf有許多選項,下面是RHEL 5.4的/etc/xinetd.conf。

# This is the master xinetd configuration file. Settings in the 

# default section will be inherited by all service configurations 

# unless explicitly overridden in the service configuration. See 

# xinetd.conf in the man pages for a more detailed explanation of 

# these attributes. 

defaults 

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

# temporarily enable or disable services. 

#       enabled         =            

#       disabled        = 

# Define general logging characteristics. 

        log_type        = SYSLOG daemon info        日志類型:交給SYSLOG 

        log_on_failure  = HOST 

        log_on_success  = PID HOST DURATION EXIT 

# Define access restriction defaults 

#       no_access       = 

#       only_from       = 

#       max_load        = 0 

        cps             = 50 10 

        instances       = 50 

        per_source      = 10 

# Address and networking defaults 

#       bind            = 

#       mdns            = yes 

        v6only          = no 

# setup environmental attributes 

#       passenv         = 

        groups          = yes 

        umask           = 002 

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

#       banner          = 

#       banner_fail     = 

#       banner_success  = 

includedir /etc/xinetd.d 

對應的各項意義:

— enabled|disabled:對應的服務是否啟用

— log_type = SYSLOG daemon info:表示使用syslog進行記錄日志,日志類型info

— log_on_failure = HOST:表示通路失敗後記錄客戶機的IP位址。

— log_on_success  = PID HOST DURATION EXIT:記錄通路成功後的日志,并且記錄下通路的服務的PID,用戶端IP,連接配接持續時間,退出時間

— includedir /etc/xinetd.d:表示告訴xinetd要包含的檔案或目錄是/etc/xinetd.d

其他的選項意義在後面介紹

【4】服務配置:

下面以/etc/xinetd.d/中的一個檔案(telnet)為例。

# default: on 

# description: The telnet server serves telnet sessions; it uses \ 

#       unencrypted username/password pairs for authentication. 

service telnet 

     disable         = yes 

        flags           = REUSE 

        socket_type     = stream 

        wait            = no 

        user            = root 

        server          = /usr/sbin/in.telnetd 

        log_on_failure  += USERID 

下面說明每一行選項的含義。

— disable = yes:表示禁用這個服務。

— flags = REUSE:表示其标志位,表示可被重用,即可以被多次啟動連接配接

— socket_type = stream:表示服務的資料包類型為stream即TCP。

— wait = no:表示不需等待,即服務将以多線程的方式運作。

— user = root:表示執行此服務程序的使用者是root。

— server = /usr/bin/rsync:啟動腳本的位置。

— log_on_failure += USERID:表示設定失敗時,UID添加到系統登記表

【5】配置檔案格式:

service SERVICENAME

{

    &lt;attribute服務屬性&gt; &lt;assign_op指派操作符&gt; &lt;value服務值&gt;

}

根據習慣,一般将對應的某個服務配置,在/etc/xinetd.d/下建立一個與服務同名的一個檔案

&lt;attribute屬性&gt;:

通路控制:

    only_from =    僅允許哪些通路

        IP:172.16.100.200

        NETMASK:172.16.0.0/16 172.16.0.0/255.255.0.0

        HOSTNAME:www.coolinuz.com

        DOAMIN:.coolinuz.com

    no_access =    不允許哪些通路,其定義方式和only_from一樣,如果同時定義了,則比對範圍最小的生效

    access_times =    基于時間的通路控制,在什麼時間内允許通路

        hh:mm-hh:mm

    bind = 監聽本機的某個IP,提供服務的位址

資源通路控制:

    cps = 50 10

        每秒中允許最多連接配接進來的個數,當超過時的臨時禁用多久

    per_source = 同一個IP最多允許并發的個數

    instances = 本服務最多被請求多少次,最大連接配接數

向啟動的Server傳遞參數:

    server_args = 

    banner = file

&lt;assign_op指派操作符&gt;

=:直接使用并覆寫預設值

+=:在預設配置基礎上增加某個選項

-=:在預設配置基礎上減去某個選項

當定義完一個服務後,使用xinetd重新載入即可

#service xinetd reload

筆者了解的還不夠全,不夠深,有錯誤或不清楚的,還請博友們指出。

本文轉自 向陽草米奇 51CTO部落格,原文連結:http://blog.51cto.com/grass51/833640,如需轉載請自行聯系原作者

繼續閱讀