tcp wrapper 

  iptables/netfilter在定义访问控制的时候是相当麻烦的:要写很多的匹配条件,要指定跳转目标等等,下面介绍一种简单的方法--tcp wrapper,也是一种网络资源访问控制器,它工作在网络层,只对tcp相关服务控制,通过它,管理员实现了对inetd提供的各种服务进行监控和过滤。可以使用ldd命令查看一二应用程序是否受tcp wrapper的控制:ldd “which app” | grep libwrap  app为程序名字。或者将libwrap的库文编译进应用程序中,那么次应用程序也将受tcp wrapper的控制,这种方法叫静态编译,用命令#string `which app` | grep hosts  查看程序是否受tcp wrapper的控制。tcp wrapper实现对应用程序的控制基于两个文件--/etc/hosts.allow和/etc/hosts.deny
  Linux系统中的程序分为两类:standalone和transient.standalone叫独立守护进程,进程自我管理;transient是非独立守护进程,依赖于xinetd进行管理。xinetd是超级守护进程,它接受tcp wrapper的控制,所以凡是依赖于xinetd管理的进程都接受tcp wrapper的控制。
  当一个服务受tcp wrapper控制时,tcp wrapper先检查/etc/hosts.allow文件,如果服务定义为allow则通过,如果没有定义,则检查/etc/hosts.deny文件,如果服务被定义为deny则拒绝,如果这两个文件都没有定义则默认通过。这两个文件的语法格式为:
daemon_list: client_list [:options]
 #daemon_list进程列表(服务的可执行程序的二进制文件名字)
  client_list客户端列表
daemon_list:
  sshd:
  vsftpd,sshd,in.telnetd(服务的可执行程序的二进制文件名字)
  ALL(宏)
  daemon@host
    vsftpd@IP 只允许此地址接受控制
    
client_list:
   IP
   network address
     netword/mask 只接受长度格式
   HOSTNAME
     fqdn
   MACRO (宏)
     ALL 
     LOCAL,KNOWN(主机名可以解析),UNKNOWN(无法解析),PARANOID(主机名正向解析和反向解析不匹配) 
     EXCEPT(除了,不包含)
 
例子:设定telnet服务不允许172.16.0.0/16访问,但允许172.16.100.200访问;其它客户端不做控制。
方法1:
  先编辑/etc/hosts.allow
    in.telnetd:172.16.100.200
  在编辑/etc/hosts.deny
    in.telnetd:172.16.
方法2:
   编辑/etc/hosts.deny
    in.telnetd:172.16. EXCEPT 172.16.100.200
方法3:
   编辑/etc/hosts.allow
   in.telnetd: ALL EXCETP 172.16. EXCEPT 172.16.100.200
   在编辑/etc/hosts.deny
    in.telnetd:ALL
 
tcp wrapper 中的宏macro:(可以通过man 5 hosts_access来获取)
%c: client information(user@host)
%s: service info (server@host)
%h: client hostname
%p: server PID 
 
tcp wrapper具有日志功能:
在编辑allow和deny文件时追加:spawn。例如在上面的例子中:
in.telnetd:172.16. EXCEPT 172.16.100.200 :spawn echo"`date`,login attempt from %c to %s." >> /var/log/tcpwrapper.log
通过tellnet访问后就可以查看/var/log/tcpwrapper.log中的信息知道谁试图访问谁
 
 
 

xinetd

上面提到了xinetd超级守护进程,通过定义xinetd也可以实现访问控制。
 xinetd的主配置文件: /etc/xinetd.conf
而xinetd控制许多非独立守护进程,这些非独立守护进程片段的配置文件位于/etc/xinetd.d/*中
 
主配置文件/etc/xinetd.conf有两部分组成:
1.全局配置 (服务的默认配置)
2.服务配置。服务配置的格式如下:
  service <service_name>
          {
               <attribute> <assign_op> <value>...
               ...
           }
 
 
 
在非独立守护进程/etc/xinetd.d/*中可以定义很多属性,定义时服务的名字必须和*所对应的名字相同例如:
访问控制:
  only_from = 
      IP: 
      NETWORK:
      HOSTNAME: FQDN
      DOAMIN: 
  no_access =
      IP:
      NETWORK: 
      HOSTNAME: FQDN
      DOAMIN: 
 
 
时间控制:
  access_times = hh:mm-hh:mm
     hh: 0-23
     mm: 0-59
 
监听的地址(提供服务的地址):
  bind = 
  interface = 
 
资源访问控制:用于控制每秒钟入站连接的个数
  cps = 
     两个参数:
        每秒入站连接数的个数
        临时禁用的时长
        
一个IP地址(客户端)最多发起几个链接请求
  per_source = 
 
用于定义此服务最多允许多少用户链接进来
  instances = 
  
向启动的server传递参数:
  server_args = 
  
欢迎标语:
  banner = 
 
端口:
  port =