• Linux之xinetd安装及实践


    一、xinetd简介

      xinetd托管服务也就是extended internet daemon简写,xinetd执行与inetd相同的功能:它启动提供互联网服务的程序。xinetd不是在系统初始化时启动此类服务器,并在连接请求到达之前处于休眠状态,而是唯一启动的守护进程,它在所有服务端口上侦听其配置文件中列出的服务。当请求传入时,xinetd启动相应的服务器。由于其操作方式,xinetd(以及inetd)也被称为超级服务器。
      xinetd配置文件中列出的服务可以分为两组。第一组中的服务称为多线程服务,它们需要为每个新的连接请求分叉一个新的服务器进程。然后,新服务器处理该连接。对于此类服务,xinetd会不断侦听新的请求,以便生成新的服务器。另一方面,第二组包括服务守护进程负责处理所有新连接请求的服务。这种服务称为单线程服务,xinetd将停止处理新的请求,直到服务器死亡。该组中的服务通常基于数据报。
      到目前为止,超级服务器存在的唯一原因是通过避免分叉许多可能在其生命周期的大部分时间处于休眠状态的进程来节省系统资源。在实现这一功能的同时,xinetd利用了超级服务器的思想来提供访问控制和日志记录等功能。xinetd服务的主配置文件/etc/xinetd.conf,用于存放被托管的服务的目录:/etc/xinetd.d 。

    二、xinetd安装

      此博文是以centos7.6操作系统环境为例进行介绍,centos7.6自身是没有安装xinetd的,需要我们手动安装,我们可以使用yum方式进行安装。安装完成后可以使用systemctl管理xinetd服务。

    [root@s152 ~]# yum install -y xinetd

    已安装:
    xinetd.x86_64 2:2.3.15-14.el7

    完毕!

      xinetd不限于/etc/services中列出的服务。因此,任何人都可以使用xinetd启动专用服务器。我们可以查看/etc/services了解xinetd支持的服务:

    [root@s153 ~]# cat /etc/services |wc -l
    11176
    [root@s153 ~]# cat /etc/services |grep telnet
    telnet 23/tcp
    telnet 23/udp

    三、xinetd实践举例

      配置xinetd服务的时候,注意配置文件格式,“项 =值”,这个=号前要求空格。如果发现配置的服务托管不起来,可以使用xinetd -d命令检查,如果配置文件语法错误都会有相关提示,根据提示修正即可。
    在这里插入图片描述

    1、安装telnet-server服务

    [root@s152 ~]# yum install -y telnet telnet-server
    已安装:
    telnet.x86_64 1:0.17-66.el7 telnet-server.x86_64 1:0.17-66.el7

    完毕

    2、在xinetd.d目录下创建telnet-stream文件

    [root@s152 xinetd.d]# cd /etc/xinetd.d/
    [root@s152 xinetd.d]# cat telnet-stream

    service telnet
    {
    disable =no
    flags =REUSE
    wait =no
    socket_type =stream
    user =root
    server =/usr/sbin/in.telnetd
    log_on_failure +=USERID
    log_type =file /var/log/xinetd_telnet.log
    }

    3、重启xinetd服务

    [root@s152 xinetd.d]# systemctl restart xinetd

    4、检查监听端口

    在这里插入图片描述

    5、登录测试

    在这里插入图片描述

    6、增加访问控制IP限制参数

    [root@s152 xinetd.d]# cat telnet-stream
    service telnet
    {
    disable =no
    flags =REUSE
    wait =no
    socket_type =stream
    user =root
    server =/usr/sbin/in.telnetd
    log_on_failure +=USERID
    log_type =file /var/log/xinetd_telnet.log
    only_from =192.168.0.0/24
    no_access =192.168.0.32
    }

    7、再次登录测试

      从源地址192.168.0.32登录直接被拒绝了,从153主机登录成功。
    在这里插入图片描述

    四、xinetd主要配置参数说明

    1、配置文件样式

    service 
    {
               ...
           ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • service_name:服务名称
    • attribute:服务工作属性
    • assign_op:赋值操作符,=或者+=,+=表示在默认配置基础上增加一个选项
    • value:值

    2、基本参数

    参数参数说明示例
    socket_type套接字类型stream(TCP),dgram(UDP)socket_type =stream
    wait是否需要等待一个请求完成以后才能继续接入请求,取值yes或者no,yes表示多线程,no表示单线程wait =no
    user运行服务的用户user =root
    server以哪个二进制程序启动服务server =/usr/sbin/in.telnetd
    log_on_failure失败日志格式,+=表示在默认配置基础上增加一个选项log_on_failure
    disable是否启用服务disable =no
    log_typelog日志路径log_type =file /var/log/xinetd_telnet.log

    3、访问控制参数

    参数参数说明示例
    only_from仅允许来自哪些客户机的请求访问,取值可以是IP、地址段、主机名、域名only_from = 192.168.1.1 192.168.0.0/24
    no_access禁止哪些客户机访问,取值同上no_access = 192.168.1.1 192.168.0.0/24
    access_times在哪个时间段内可以被访问access_times = hh:mm-hh:mm
    bind监听地址bind = value
    port监听端口port = value
    cps每秒钟入站连接的个数cps = count time
    count每秒钟接受请求数的最大值,当超过这个值时服务会暂时禁用一段时间count =1000
    time暂时禁用的时长time 30
    per_source单个IP最多允许并发发起多少个请求per_source = 20
    instances服务最大并发连接数instances = 20000

    五、QA

    1、配置好telnet服务后无法启动

    • 报错信息:无,重启xinetd后,无任何输出,查看xinetd服务状态正常,就是无法启动telnet服务。
    • 问题分析:xinetd没有正式托管telnet服务,使用xinetd -d命令可以对服务进行debug日志输出,发现是telnet服务配置文件检查后报错,所以没有启用该服务。
    • 解决方案:根据xinetd -d输出中的报错系统修改配置文件,然后重启xinetd服务。

    2、使用root密码telnet登录服务器失败

    • 报错信息:Login incorrect
    • 报错原因:为了安全,禁止使用root账户telnet登录
    • 解决方案:切换普通用户登录,登录正常。
  • 相关阅读:
    【教程】 iOS混淆加固原理篇
    棱镜七彩受邀参加“数字政府建设暨数字安全技术研讨会”
    MySQL 8.0 Clone 备份恢复演练
    Java面向对象进阶
    七月集训(第26天) —— 并查集
    springboot 发布tomcat(war包)
    这是什么代码 你能看懂吗
    OSI与TCP/IP与的体系结构的比较
    适合个人请假的理由
    深度神经网络训练
  • 原文地址:https://blog.csdn.net/carefree2005/article/details/125893157