用TCP Wrappers和xinetd使系统安全

用TCP Wrappers和xinetd使系统安全

当一个系统被用作公开网络的服务器时,这个系统就成为被攻击的目标.对网络服务进行访问控制 是一个服务器管理员面临的最重要的安全任务之一.红帽企业Linux为这种访问控制提供了一些工具.例如,内核使用一个基于iptables的防火墙来将 不受欢迎的网络数据包过滤在内核网络之外.对于使用这种防火墙的网络服务,TCP Wrappers又增加了一层保护,这层保护通过定义哪些主机允许或不允许连接到"wrapped"网络服务上来实现.TCP Wrappers为多种不同的服务提供访问把关的功能.大多数现代网络服务系统,像SSH,Telnet和FTP,都利用TCP Wrappers在外来进入系统的请求和被请求的服务器之间设立防范.

        xinetd超级服务器就是这样的一个wrapped network(会绕网络)服务.这项服务被称为一个超级服务器,是因为它可以控制连接到网络服务的一个子集的连接,还能进一步精致地进行访问控制.如果 TCP Wrappers和xinetd一起联合使用,TCP Wrappers的功能就会增强,因为xinetd作为超级服务器可以为系统就访问,登录,捆绑,重定向和资源利用方面提供额外的服务享有权控制.

        1.TCP Wrappers

        在默认情况下会安装TCP Wrappers软件包(tcp_wrappers),该软件包提供基于主机的,到网络服务的访问控制.这个软件包中最重要的组成部分是/usr/lib /libwrap.a库.通常来说,使用libwrap.a库进行编译的服务就是一个TCP Wrappers.

        当一个客户试图与一个TCP-wrapped服务进行连接时,这个服务首先会检查主机的访问文件(/etc/hosts.allow和 /etc/hosts.deny)来决定这个客户是否被允许连接到这个服务.在大多数情况下,这个服务还会使用syslog守护进程(syslogd)把 这个发出请求的客户用户名以及所要求访问的服务写入/var/log/secure或/var/log/messages文件中.如果一个客户被允许进行 连接,TCP Wrappers会释放它对所请求服务的连接控制权,然后将不再在这个客户与服务器间的通信过程中起任何作用.除了可以控制访问和记录日志信息外,TCP Wrappers还可以在允许或拒绝到网络服务的连接请求之前来执行相关的命令与客户进行交流.

        因为TCP Wrappers是系统管理员所使用的安全工具库的一个很有价值的补充,红帽企业Linux中的多数网络服务都与libwrap.a库相连.这样的应用程序包括/usr/sbin/sshd,/usr/sbin/sendmail等.

       

        1.1.TCP Wrappers的优势

        TCP Wrappers拥有以下其它网络控制技术不具备的优势:

                A.对客户和wrapped(会绕的)网络服务的透明性.连接的客户和wrapped网络服务都不需要知道TCP Wrappers在使用中.合法用户会被记录到日志中,并获得所需要的服务,而非法用户则无法获得要求的服务.

                B.中央化管理多项协议.TCP Wrappers独立运行于它们所保护的网络服务,这就允许多个服务器应用程序共享一组通用的访问控制配置文件,从而简化了管理任务.

 

        1.2.TCP Wrappers配置文件

        要决定一个客户是否被允许连接一项服务,TCP Wrappers会参考以下两个文件,这两个文件通常被称为主机访问文件:

                /etc/hosts.allow

                /etc/hosts.deny

        当一个TCP Wrappers接收到一个客户请求时,它会运行以下几个步骤:

                A.检查/etc/hosts.allow.TCP会绕服务会循序地解释/etc/hosts.allow文件并应用第一个为这个服务所指定的规则.如果找到了一个匹配的规则,则允许连接.如果找不到匹配的规则,就会进行下一个步骤.

                B.检查/etc/hosts.deny.TCP会绕的服务会循序地来解释/etc/hosts.deny文件.如果找到一个匹配的规则,则拒绝这个连接.如果找不到匹配的规则,则允许连接到这个服务.

        在使用TCP Wrappers保护网络服务时应该考虑以下几个要点:

                A.因为hosts.allow中的规则会首先被应用,所以比hosts.deny中指定的规则有优先权.因此,如果访问一项服务在hosts.allow中设置为允许,那么在hosts.deny中同一项服务的拒绝访问设置则被忽略.

                B.每个文件中的各项规则是由上到下被读取的,第一个匹配的规则是唯一被应用的规则.因此,规则的排列顺序极其重要.

                C.如果在这两个文件中都没有找到匹配的规则,或这两个文件都不存在,那么就授予访问这项服务的权限.

                D.TCP会绕的服务并不缓存主机访问文件中的规则,因此对hosts.allow或hosts.deny的配置改变都无需重新启动网络服务便会马上起作用.

 

        1.3.格式化访问规则

        /etc/hosts.allow和/etc/hosts.deny文件的格式是完全相同的.每个规则都必须位于其正确的行位.空行或以井字号(#)开始的行会被忽略.

        每条规则都使用以下基本格式来对网络服务的访问进行控制:

                <daemon list>: <client list> [: <option>: <option>: ...]

        字段解释如下:

                <daemon list>,一个由逗号分隔的进程名(不是服务名)列表,或ALL通配符.守护进程列表也接受运算符来提供更大的灵活性.

                <client list>,一个由逗号分隔的主机名,主机IP地址,特殊模式或通配符列表,该列表用来识别受这项规则影响的主机.客户列表也接受运算符来允许更大的灵活性.

                <option>,这项规则被触发时要运行一个动作选项或由冒号分隔开动作列表.选项领域支持扩展式,发布shell命令,允许或拒绝访问以及修改日志记录.

        下面是一个基本的主机访问规则示例:

                vsftpd : .example.com

        这条规则指示TCP Wrappers监测在example.com域内的任何主机向FTP守护进程(vsftpd)发出的连接.如果这条规则出现在hosts.allow 中,连接则被接受.如果这条规则出现在hosts.deny中,连接则被拒绝.

        下面的主机访问规则比较复杂,而且使用两个选项领域:

                sshd : .example.com  \ :spawn /bin/echo `/bin/date` access denied>>/var/log/sshd.log \ :deny

        请注意每个选项领域前面都有反斜线(\).使用反斜线可以防止由于规则太长而造成失败.

        这个范例规定如果example.com中的某个主机试图向SSH守护进程(sshd)发出连接请求,那么执行echo命令来将这次尝试添加到一个专用日 志文件里,并且拒绝该连接.因为使用了命令选项 deny,这一行拒绝访问,即使它出现在 hosts.allow 文件里.

 

        1.4.通配符

        通配符使TCP Wrappers更容易匹配各种守护进程或主机.使用通配符最频繁的是在访问规则的客户列表领域内.

        以下是可以被使用的通配符:

                ALL,完全匹配,可以用在守护进程列表和客户列表中.

                LOCAL,与任何不包括圆点(.)的主机匹配,如localhost.

                KNOWN,与任何带有已知主机名和主机地址或已知用户的主机匹配.

                UNKNOWN,与任何带有未知主机名和主机地址或未知用户的主机匹配.

                PARANOID,与任何带有主机名和主机地址不相匹配的主机匹配.

 

        1.5.模式

        模式可以用在访问规则的客户领域里,从而更准确地给客户主机指定分组.

        下面是一个常用模式列表:

                A.主机名以圆点(.)开始,如果在一个主机名的开始放置一个圆点,那么就与所有共享这个主机名中列出的相同组成部分的主机匹配.如:.example.com适用于example.com域内的任何主机.

                B.IP地址以圆点(.)结束,如果在一个IP地址的末尾放置一个圆点,那么就与所有共享一个IP地址的起始数值组的主机匹配.如:192.168.适用于192.168.x.x网络内的任何主机.

                C.IP地址/网络掩码对,网络掩码表达式也可以作为一个模式用来控制对某一组特定的IP地址的访问.如:192.168.0.0 /255.255.254.0适用于地址区间从192.168.0.0到192.168.1.255的任何主机.

                D.[IPv6地址]/前缀长度对,[网]/前缀长度对也可以作为一种模式用来控制对某一组特定的IPv6地址的访问.如: [3ffe:505:2:1::]/64适用于地址区间从3ffe:505:2:1::到 3ffe:505:2:1:ffff:ffff:ffff:ffff的任何主机.

                E.星号(*),星号可以用来匹配整个不同组别的主机名或IP地址,只要在含有其它模式类型的客户列表中这些组不混杂在一起的话.如:*.example.com适用于example.com域内的任何主机.

                F.斜线(/),如果一个客户列表以斜线开始,这个列表就被当作一个文件名对待.若是需要指定很大数量主机的各种规则的话,这一点就很有用处.

        更多TCP Wrappers所接受的其它用到的模式.可参阅hosts_access man 5 page.

        1.6.Portmap(端口映射器)和TCP Wrappers

        实施TCP Wrappers的Portmap不支持主机查找,也就是说portmap命令不能用主机名来识别相应的主机.因此,在hosts.allow或 hosts.deny中对portmap的访问控制规则必须使用IP地址来特指某主机,或用关键词ALL.

        对portmap访问控制规则的修改可能不会立即起作用.可能得重新启动portmap服务.

        像NIS和NFS一样的被广泛使用的服务都有赖于portmap来进行运作,所以要了解这些局限性.

 

        1.7.算子(Operators)

        目前,访问控制规则接受一个算子EXCEPT,这个算子可以用在一个规则的守护程序列表中,也可以用在客户列表中.

        这个EXCEPT算子允许特定的例外以用来在同一个规则中拓宽匹配的范围.

        下面的例子来自一个hosts.allow文件,除cracker.example.com之外,允许所有example.com主机连接所有的服务

                ALL: .example.com EXCEPT cracker.example.com

        hosts.allow文件内的另一个例子中,来自192.168.0.x网络的所有客户都可以使用除FTP之外的所有服务

                ALL EXCEPT vsftpd: 192.168.0.

        从组织结构上来说,避免使用EXCEPT算子更简易一些.因为这样可以让其他的系统管理员能很快地扫描相关的文件以便查看哪些主机被允许或被拒绝访问服务,而无须通过EXCEPT算子来进行排序.

 

        1.8.选项领域

        除了允许和拒绝访问的基本规则外,红帽企业Linux对TCP Wrappers的实施支持通过option fields对访问控制语言的扩展式.通过在主机访问规则中使用选项领域,系统管理员可以完成多种不同的任务,比如像修改日志动作,加强访问控制以及发出 shell命令.

 

        1.9.记录日志

        通过使用severity命令,其选项领域让系统管理员能够很容易地改变一个规则的日志设施和优先级别.

        在下面的例子中,example.com域内的任何主机向SSH守护进程发出的各种连接会登录到默认的authprivsyslog设施内(因为没有具体指明设施参数值),并且以emerg优先:

                sshd : .example.com : severity emerg

        使用severity选项也可以指定某个设施.下面的例子将来自example.com 主机的任何SSH连接意图登录到local0设施,并以alert优先.

                sshd : .example.com : severity local0.alert

        实际操作中,这个例子直到syslog守护进程(syslogd)被配置为登录到local0设施才会起作用.

 

        1.10.访问控制

        选项领域也允许系统管理员通过添加allow或deny作为命令的最后选项来明确地以单个规则方式允许或拒绝主机.

        例如,下面的两个规则允许来自client-1.example.com的SSH连接但却拒绝来自client-2.example.com的连接

                sshd : client-1.example.com : allow

                sshd : client-2.example.com : deny

        访问控制以每个规则为基础,这样选项领域就允许系统管理员把所有访问规则写成一个单一文件,要么是hosts.allow,要么是hosts.deny.有些系统管理员认为这样组织访问规则更容易一些.

 

        1.11.Shell命令

        选项领域允许访问规则通过下面两个指令发出shell命令:

                spawn,作为子进程发出一个shell命令.这个命令可以使用/usr/sbin/safe_finger来获取发出请求客户的更多信息,或使用 echo命令来创建专用日志文件.在下面的例子中,试图访问来自example.com 域的Telnet服务的客户被俏俏地登录到一个专用文件.

                        in.telnetd : .example.com \

                                : spawn /bin/echo `/bin/date` from %h>>/var/log/telnet.log \

                                : allow

                twist,把要求进行的服务转换成特定的命令.这个命令经常用来给外侵者设立陷阱(也叫"蜜罐儿").也可以用来向预连接的客户发送信息.这个 twist命令必须出现在该规则命令行的末尾.在下面的例子中,试图访问来自example.com域的FTP服务的客户接收到用echo命令发送的一个 讯息.

                        vsftpd : .example.com \

                                : twist /bin/echo "421 This domain has been black-listed. Access denied!"

 

        1.12.扩展式

        扩展式命令与spawn和twist命令一起使用时,可以提供关于客户/服务器以及相关进程的信息.

        下面是一个支持扩展式的命令列表:

                %a,返回用户的IP地址.

                %A,返回服务器的IP地址.

                %c,返回大量的客户信息,比如用户名和主机名,或用户名和IP地址.

                %d,返回守护进程的名称.

                %h,返回客户的主机名(或IP地址,如果主机名没有提供的话).

                %H,返回服务器的主机名(或IP地址,如果主机名没有提供的话).

                %n,返回客户的主机名.如果主机名没有提供的话,屏幕上会显示unknown.如果客户的主机名和主机地址不匹配的话,屏幕上会显示paranoid.

                %N,返回服务器的主机名.如果主机名没有提供的话,屏幕上会显示unknown.如果服务器的主机名和主机地址不匹配的话,屏幕上会显示paranoid.

                %p,返回守护进程的进程ID.

                %s,返回各种不同类型的服务器信息,比如守护进程的进程和服务器的主机或IP地址.

                %u,返回客户的用户名.如果没有提供的话,屏幕上会显示unknown.

        下面用来示范的规则与spawn命令一起使用了一个扩展式来在一个定制的日志文件中确认客户主机.

        当来自example.com域的一个主机向SSH守护进程(sshd)发出连接意图时,执行echo命令来把这次包括客户主机名(通过使用%h扩展式)的连接尝试信息记录到一个专用文件中.

                sshd : .example.com  \

                        : spawn /bin/echo `/bin/date` access denied to %h>>/var/log/sshd.log \

                        : deny

        同样的,扩展式也可以用来把个性化的讯息返回给客户.在下面的例子中,试图访问来自example.com域的FTP服务的客户们得到通知,他们的访问被服务器取缔了.

                vsftpd : .example.com \

                        : twist /bin/echo "421 %h has been banned from this server!"

        有关可用扩展式的更完全的解释,以及对附加的访问控制选项的更完全的解释,可参阅man page的第五部分,查看hosts_access(man 5 hosts_access)和hosts_options.

 

        1.13.连接旗帜(Connection Banners)

        当用户连接到服务器时,用合适的旗帜标示显示其连接是一种很好的方式,可以让潜在的袭击者知道本系统管理员很有警惕性.同时也可以控制关于系统什么样的信 息可以呈现给用户.要想为一项服务设置一个TCP Wrappers旗帜标示,可使用banner选项。

        这个例子为vsftpd设置一个旗帜标示.首先,创建一个旗帜标示文件,可以储存在系统的任何地方,但必须与其守护进程同名.例如,该文件命名为/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权标可提供客户的多种信息,比如用户名和主机名,或用户名和IP地址,也许这样会使该连接更让人觉得有胁迫感。

        要想使该旗帜在有外来连接进入时显示,可在/etc/hosts.allow文件上加上下面一行:

                vsftpd : ALL : banners /etc/banners/

        2.xinetd

        xinetd控制对一个流行网络服务子集的访问,该子集包括FTP,IMAP和Telnet.同时这种服务还对访问控制,增强的日志记录功能,捆绑,重定向以及资源使用控制提供特定化服务配置选项.

        当一个用户试图连接由xinetd控制的一个网络服务时,这种超级服务会接到请求并且查看是否有任何相匹配的TCP Wrappers访问控制规则存在.如果连接被允许,xinetd则检验该连接在其个性化的规则下对那项服务来说是被允许的.同时也检查该项服务是否还有 足够的资源份额以及这项服务是否与任何定义好的规则相冲突.如果所有条件都得到满足,(也就是:访问这项服务的请求被允许,这项服务还有足够的资源份额, 以及这项服务不与任何定义好的规则相冲突),那么xinetd就开始进行被请求的服务并且让其通过对连接的访问控制.连接建立后,xinetd就不再参与 客户和服务器之间的通讯交流.

 

        2.1.xinetd的配置文件

        xinetd的配置文件如下:

                /etc/xinetd.conf,全局xinetd配置文件.

                /etc/xinetd.d/,包含所有具体化服务文件的目录.

        /etc/xinetd.conf文件包含一般的配置设定,这种设定影响xinetd控制下的每一项服务.当xinetd服务第一次启动时,其设定信息就 被读取,所以要想使改变后的配置起作用,你需要重新启动xinetd服务.下面是一个/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可以处理同时间进入系统的请求的最大数值.

                log_type,配置xinetd来使用authpriv日志设施,该设施将日志条目写入/var/log/secure文件.如果加上一个像FILE /var/log/xinetdlog一样的命令,就会在/var/log/目录下创建一个叫作xinetdlog的定制日志文件.

                log_on_success,配置xinetd来记录成功的连接尝试.默认情况下,远程主机的IP地址和服务器处理这个请求的处理ID都要被记录.

                log_on_failure,配置xinetd来记录失败的连接尝试,或被拒绝的连接尝试.

                cps,配置xinetd来设定对任何一项服务来说每秒钟最多允许25个连接.如果超过这个限制,该服务就会隐退30秒.

                includedir/etc/xinetd.d/,包含位于/etc/xinetd.d/目录下的并且在具体化特定服务配置文件中声明的各种选项.

        /etc/xinetd.d/目录含有xinetd管理下的每一项服务的配置文件以及与该服务相关连的各文件的名称.就xinetd.conf来说,该目 录只有当xinetd服务启动时才被读取.要使改变的配置起作用,系统管理员必须重新启动xinetd服务.

        /etc/xinetd.d/目录下的文件格式使用与/etc/xinetd.conf相同的常规格式.各项服务的配置都储存在一个独立的文件中,其主要原因是这样做使得个性化定制更容易一些,一项服务影响其它服务的可能性也更小一些.

        要想了解这些文件是如何组构在一起的,可参考以下/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服务的多个不同侧面:

                service,指定服务名称,通常是/etc/services文件中服务列表中的一项.

                flags,设定连接的一系列属性中任何一个属性.REUSE指示xinetd来重新使用这个插座进行Telnet连接.

                socket_type,设定该网络插座类型为stream.

                wait,指定这项服务是单线程(yes)还是多线程(no).

                user,指定该进程运行在哪个用户 ID 下.

                server,指定要发射哪个二进制可执行文件.

                log_on_failure,为log_on_failure指定登录参数,在xinetd.conf中已经定义好的除外.

                disable,指定这项服务是要被中止(yes)还是不被中止(no).

        可参阅xinetd.conf man page来获取关于这些选项及其用途的更多信息.

 

        2.2.日志记录选项

        下面的日志记录选项可用于/etc/xinetd.d/目录下的/etc/xinetd.conf和各种具体化特定服务配置文件.

                ATTEMPT,日志记录每次连接尝试失败的事实(log_on_failure).

                DURATION,日志记录这项服务被远程系统使用的时间长度(log_on_success).

                EXIT,日志记录退出状态或这项服务的中止信号(log_on_success).

                HOST,日志记录远程主机的IP地址(log_on_failure 和 log_on_success).

                PID,日志记录该服务器接到连接请求时进行处理的处理ID(log_on_success).

                USERID,日志记录远程用户使用为所有多线程主流服务而在RFC 1413中规定的方法(log_on_failure andlog_on_success).

                如果需要一个日志记录的完整列表,可参阅xinetd.conf man page.

 

        2.3.访问控制选项

        xinetd服务的用户们可以选择使用TCP Wrappers主机访问规则,也可以通过xinetd配置文件提供访问控制,或二者混合使用.

        下面是一些xinetd支持的主机访问控制选项:

                only_from,只允许特别指定的主机使用这项服务.

                no_access,阻断列出的主机使用这项服务.

                access_times,指定某一特定服务可能需要的时间段.该时间段的表达必须用24时的符号格式,即:HH:MM-HH:MM.

        only_from和no_access选项可以使用很多IP地址或主机名,或者可以指定整个网络.与TCP Wrappers类似,将xinetd访问控制与增强的日志记录配置相结合可以提高安全性,这样可以阻断被禁止主机的请求同时又详细记录每一次的连接尝 试.

        例如,下面的/etc/xinetd.d/telnet文件可以用来阻断来自某特定网络群体的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

                }

        在这个例子中,当一个来自10.0.1.0/24网络的用户系统,比如10.0.1.2,试图访问Telnet服务时,连接由外连主机关闭.

        另外,他们的登录试图会记录在/var/log/messages中.

        当TCP Wrappers和xinetd连用来进行访问控制时,了解这两种访问控制机制之间的关系是很重要的.

        当一个客户请求连接时, xinetd控制下的事件发生顺序如下:

                1.xinetd守护进程通过使用libwrap.a库呼叫来访问TCP Wrappers主机访问规则.如果一个拒绝规则匹配这个客户,那么连接就被放弃.如果一个允许规则匹配这个客户的话,该连接就被传递给xinetd.

                2.xinetd守护进程检查其本身的访问控制规则,这种检查既为xinetd服务,也为被请求的服务.如果一个拒绝规则匹配这个客户,那么连接就被放弃.否则,xinetd 就启动这项被请求的服务,并让连接连到那项服务上.

       

        2.4.捆绑和重定向选项

        xinetd服务配置文件支持将这项服务捆绑到一个IP地址上,并且把那项服务的外来请求重定向到另外一个IP地址,主机名或端口.

        捆绑服务用特定化服务配置文件中的bind选项来控制,并把该服务链接到系统上的一个IP地址.捆绑配置好后,bind选项只允许到合法IP地址的请求来访问该服务.你可以使用这种方法把不同服务根据要求捆绑到不同的网络接口.

        这对拥有多重网络适配器或多个IP地址的系统尤其有用.在这样的系统内,不安全的服务(比如Telnet)可以配置成只用来侦听连接到某专用网的接口而不侦听连接到互联网(Telnet)的接口.

        redirect选项接受后面带有端口号的IP地址或主机名,并配置这项服务来把连接到这项服务的任何请求都重定向到指定的主机和端口号.重定向的这一特 征可以用来把请求改向到同一个系统上的另一个端口,重定向到同一台机器上的一个不同IP地址,或转移到一个完全不同的系统和端口号,以及这些选项的任何结 合.因此,一个系统上要连接到某项服务的用户可能会被路由到另外一个系统,而无须中断目前的系统.

        xinetd守护进程要完成这样的重定向需要不断复制这样一个过程:发出请求的客户主机和实际提供这项服务的主机在连接期间要保持活动状态并且两个系统之间不断要有数据的传输转移.

        bind和redirect选项一起使用时,其优势最为明显.如果把一项服务捆绑到一个系统的某特定的IP地址,然后再把对该服务的请求重定向到只有第一 个机器可以看见的第二个机器上,那么可以使用内部系统来为一个完全不同的网络提供这些服务.还有其它用途,比如这些选项可以用来限制在一个多处为家的机器 上某特定服务与一个已知IP地址的连接时间,也可以用来把对那项服务的任何请求重定向到另外一台专门为那项服务配置的机器.

        例如,考虑这样一个系统,一个为其Telnet服务而设定的被用作防火墙的系统:

                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服务被捆绑到外部IP地址(123.123.123.123),面向互联网的那 个地址.另外,任何发送到123.123.123.123的Telnet服务请求都会通过第二个网络适配器重定向到一个内部IP地址 (10.0.1.13),这个地址只有防火墙和内部系统可以访问.这个防火墙就传输这两个系统之间的通讯交流,可是该连接系统却认为连接的是 123.123.123.123,而实际上连接的是一个不同的机器.

        这一特征对使用宽带连接又只有一个固定的IP地址的用户尤其有用.使用NAT(网络地址转换)时,网关机器背后的使用内部专用IP地址的各系统在该网关系 统以外是不能被使用的.然而,当由xinetd控制的某些服务用bind和redirect选项配置时,该网关机器可以被用作外部系统和某特定被配置好来 提供该服务的内部机器之间的服务代理.另外,多种不同的xinetd访问控制和日志选项也可以接受额外的保护.

 

        2.5.资源管理选项

        xinetd守护进程可以增加一层基本的不受DoS(服务拒绝)攻击的保护.

        下面是一个可以帮助限制类似攻击成效的命令列表:

                cps=,限制外来连接的速度.这个命令有两个参数:

                        第一个参数,每分钟能够处理的连接数目.如果处理外来连接的速度高于这个数目,该服务就会暂时中断,默认值是50.

                        第二个参数,服务中断几秒中之后才能重新启动该服务,其默认间隙是10秒钟.

                instances,指明一项服务所能允许的连接总数.这项命令接受任何整数数值或UNLIMITED.

                per_source,指明一台主机所能允许的一项服务的连接总数.这项命令接受任何整数数值或UNLIMITED.

                rlimit_as,以千字节或MB为单位指明该服务所占用的内存空间.这项命令接受任何整数数值或UNLIMITED.

                rlimit_cpu,以秒为单位指明一项服务所占用 CPU 的时间总量.这项命令接受任何整数数值或UNLIMITED.

                max_load,定义CPU用量或一项服务负载平均限量值.它接受一个非固定点的数值参数.负载平均是对某一时间内系统有多少进程处于活动状态的一个大 体测量.请参阅 uptime、who 和 procinfo 命令来获取关于负载平均的更多信息.

        还有很多可以使用的资源管理选项可以用来管理xinetd.可参阅xinetd.conf man page来获取更多信息.

 

        2.6.有用的网站

                http://www.xinetd.org/,xinetd 的主页,含有配置文件示例,配置文件特点的详细列表和一个很有用的FAQ.

                http://www.macsecurity.org/resources/xinetd/tutorial.shtml,一部详细的学习指南,讨论多种不同方式来优化xinetd默认配置文件以满足特定的安全需要.

你可能感兴趣的:(用TCP Wrappers和xinetd使系统安全)