基于Tcp Wrapper和Xinetd的服务访问控制

简介:

一、tcp wrapper

Tcp wrapper:又叫TCPD网络资源访问控制器,工作在TCP层,通常情况下只能对基于TCP协议的某些访问做控制的,其实它对应的是一个库文件,由glibc提供的,工作于用户空间用户请求之间。当一个应用程序在编译时连接到该库时,当用户通过TCP协议连接本机去访问该服务时,其访问的流程就变成了以下流程:


当用户通过基于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(宏)                   #表示所有
vsftpd@172.16.4.1    #用户通过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`" >>/var/log/tcpwrapper.log
允许172.16.0.0网段中主机访问telnet服务,并将其访问之日记录到/var/log/tcpwrapper.log

生效顺序:
/etc/hosts.allow --> /etc/hosts.deny --> 默认规则(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。

 
 
  1. # This is the master xinetd configuration file. Settings in the 
  2. default section will be inherited by all service configurations 
  3. # unless explicitly overridden in the service configuration. See 
  4. # xinetd.conf in the man pages for a more detailed explanation of 
  5. # these attributes. 
  6.  
  7. defaults 
  8. # The next two items are intended to be a quick access place to 
  9. # temporarily enable or disable services. 
  10. #       enabled         =            
  11. #       disabled        = 
  12.  
  13. # Define general logging characteristics. 
  14.         log_type        = SYSLOG daemon info        日志类型:交给SYSLOG 
  15.         log_on_failure  = HOST 
  16.         log_on_success  = PID HOST DURATION EXIT 
  17.  
  18. # Define access restriction defaults 
  19. #       no_access       = 
  20. #       only_from       = 
  21. #       max_load        = 0 
  22.         cps             = 50 10 
  23.         instances       = 50 
  24.         per_source      = 10 
  25.  
  26. # Address and networking defaults 
  27. #       bind            = 
  28. #       mdns            = yes 
  29.         v6only          = no 
  30.  
  31. # setup environmental attributes 
  32. #       passenv         = 
  33.         groups          = yes 
  34.         umask           = 002 
  35.  
  36. # Generally, banners are not used. This sets up their global defaults 
  37. #       banner          = 
  38. #       banner_fail     = 
  39. #       banner_success  = 
  40.  
  41. 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)为例。

 
 
  1. defaulton 
  2. # description: The telnet server serves telnet sessions; it uses \ 
  3. #       unencrypted username/password pairs for authentication. 
  4. service telnet 
  5.      disable         = yes 
  6.         flags           = REUSE 
  7.         socket_type     = stream 
  8.         wait            = no 
  9.         user            = root 
  10.         server          = /usr/sbin/in.telnetd 
  11.         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
{
    <attribute服务属性> <assign_op赋值操作符> <value服务值>
}

根据习惯,一般将对应的某个服务配置,在/etc/xinetd.d/下新建一个与服务同名的一个文件


<attribute属性>:
访问控制:
    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

<assign_op赋值操作符>
=:直接使用并覆盖默认值
+=:在默认配置基础上增加某个选项
-=:在默认配置基础上减去某个选项



当定义完一个服务后,使用xinetd重新载入即可
#service xinetd reload




笔者了解的还不够全,不够深,有错误或不清楚的,还请博友们指出。








本文转自 向阳草米奇 51CTO博客,原文链接:http://blog.51cto.com/grass51/833640,如需转载请自行联系原作者
相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
目录
相关文章
|
安全 调度 数据安全/隐私保护
PCIe访问控制服务(ACS)
PCIe访问控制服务(ACS)
3046 0
PCIe访问控制服务(ACS)
|
1月前
|
Web App开发 存储 Linux
Linux Apache服务详解——Apache服务访问控制
Linux Apache服务详解——Apache服务访问控制
328 7
|
域名解析 网络协议
IP协议, TCP协议 和DNS 服务分别是干什么的?
大家好,我是阿萨。昨天讲解了网络四层协议[TCP/IP协议族分为哪4层?]今天我们学习下IP 协议, TCP 协议和DNS 协议分别是干什么的。
210 0
IP协议, TCP协议 和DNS 服务分别是干什么的?
|
网络协议 搜索推荐 Linux
SUSE12 SP5系统使用TCP Wrappers实现限制SSH访问控制
SUSE12 SP5系统使用TCP Wrappers实现限制SSH访问控制
272 0
SUSE12 SP5系统使用TCP Wrappers实现限制SSH访问控制
|
网络协议 网络架构
1.2.1计算机网络(分层结构、协议、接口、服务、ISO/OSI、TCP/IP)
分层结构、协议、接口、服务 1.为什么要分层? 2.怎么分层? 3.正式认识分层结构 4.概况总结 参考模型 ISO/OSI参考模型--怎么 来的? IS0/OSI参考模型 1.应用层 2.表示层​ 3.会话层 4.传输层 5.网络层 6.数据链路层 7.物理层 OSI参考模型与TCP/IP参考模型 OSI参考模型与TCP/IP参考模型相同点 OSI参考模型与TCP/IP参考模型不同点 5层参考模型
1.2.1计算机网络(分层结构、协议、接口、服务、ISO/OSI、TCP/IP)
|
网络协议 Java Maven
Netty第一个入门实例-TCP服务
本文我们来写第一个Netty的入门实例,一个TCP服务案例。
Netty第一个入门实例-TCP服务
|
Cloud Native 关系型数据库 Java
PolarDB-X 1.0-用户指南-访问控制-激活PolarDB-X访问RDS服务授权
PolarDB-X的部分操作会调用RDS的OpenAPI,因此在使用RAM之前,需要先激活PolarDB-X访问RDS服务的授权,创建一个供PolarDB-X访问RDS的RAM服务角色。本文将介绍如何通过控制台和OpenAPI激活授权。
169 0
PolarDB-X 1.0-用户指南-访问控制-激活PolarDB-X访问RDS服务授权
|
存储 运维 网络协议
阿里云SMB协议文件存储服务支持基于AD域的用户身份认证及权限访问控制介绍
在本文中,我们首先简单介绍文件系统的用户认证和访问权限控制的概念,然后介绍阿里云SMB协议文件存储服务支持基于AD域系统的用户身份认证及访问权限控制的设计实现。
3797 0
阿里云SMB协议文件存储服务支持基于AD域的用户身份认证及权限访问控制介绍
|
Shell API 数据安全/隐私保护
kubernetes API 访问控制在阿里云容器服务(ACK)上的实践
提起K8s API的访问控制,很多同学应该都会想到RBAC,这是K8s用来做权限控制的方法,但是K8s对API的访问控制却不止于此,今天我们就来简单介绍下K8s的访问控制以及ACK如何利用这套方法提供便捷的访问控制管理 访问控制简要说明 控制流程如上图所示,我们今天关注点在前两步,也就是图中的Au.
8538 0