什么是xinetd?


大家对被称作超级服务器的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共存来解决这个问题


xinetd转向功能实例

这个功能可以将客户端的请求转发到另一台主机去处理。

如我这里内网192.168.18.204需要通过跳板172.26.184.240去调用邮件服务器172.26.10.12,可以这样实现:跳板172.26.184.240配置xinetd,监听在25端口,当客户端请求过来,将请求转发给邮件服务器172.26.10.12处理。配置方法如下:

    在跳板172.26.184.240配置

    vi /etc/xinetd.d/smtp-relay

service smtp-relay
{
    disable = no
    flags       = REUSE
    socket_type     = stream
    wait            = no
    user            = root
    bind            = 0.0.0.0
    port            = 2525
    only_from       = 192.168.18.0/24
    no_access       = 192.168.18.11
    access_time     = 00:00-23:59
    redirect        = 172.26.10.12 25
}

    vi /etc/services,找到2525端口所在行,改为如下行:

smtp-relay      2525/tcp                # smtp-relay
smtp-relay      2525/udp                # smtp-relay

    重启xinetd服务

    service xinetd restart

    这样,内网192.168.18.204可以通过调用跳板172.26.184.240上的2525端口发送邮件。