一、tcp wrapper

tcp wrapper是一种访问控制工具,类似于iptables可以作访问控制。

tcp wrapper只能对基于tcp协议的服务作访问控制,但并不是所有基于tcp协议的服务都能实现用tcp wraper作访问控制。

1.tcp wrapper实现访问控制主要依靠两个文件,一个是/etc.hosts.allow文件,另一个是/etc/hosts.deny文件.从文件的名字上可以理解:一个是定义允许的,一个是定义拒绝的。那这两个文件生效的次序是怎样的呢?

 

说明:如图所示,N表示没有匹配的规则,Y表示有匹配的规则,OK表示允许访问,DENY表示拒绝访问。

首先检查hosts.allow文件中是否有匹配的规则。如果有匹配的规则,则允许访问;如果没有匹配的规则,则检查hosts.deny文件。

其次,检查hosts.deny文件中是否有匹配的规则。如果有匹配的规则,则拒绝访问;如果没有匹配的规则,则视为默认规则,默认规则则为允许,所以允许访问。

2.文件内容的书写规则:

Daemon_list:client_list[:options]

Daemon_list 要写的可执行程序的二进制文件名。例ssh的二进制文件名sshdhttp的二进制文件名为httpd

ALL 本机上所有接受tcp wrapper 访问控制的服务

client_list

IP 单独的ip地址  例:172.16.22.1

Network address 不能使用长度格式,只能使用完整长度格式。例:172.16. 172.16.0.1/255.255.0.0  但不能使用172.16.0.1/16

HOSTNAME 主机名 例:www.lihuan.com

[:options] 选项,可有可无

看个例子:

例:ssh仅允许172.16.0.0/16网段访问。

首先在/etc/hosts.allow中定义:

sshd:172.16.

然后在/etc/hosts.deny中定义:

sshd:ALL

即可实现要求了。

3.特殊用法

spaw  记录日志功能

DENY 拒绝

ALLOW 允许

例:ssh允许172.16.0.0/16网段访问。

可在/etc/hosts.deny中这样定义:

sshd:172.16. :ALLOW

例:ssh允许172.16.0.0/16网段访问,记录日志。

可在/etc/hosts.allow中这样定义:

sshd:172.16. :spawn echo ”someone login” >> /var/log/tcpwrapper.log

spawn中也可带上这几个选项:

%c  客户端信息

%s  服务端信息

%h  客户端主机名

%p  服务端的pid

例:ssh允许172.16.0.0/16网段访问,记录日志。

sshd:172.16. :spawn echo ”someone login attempt from%c to %s” >> /var/log/tcpwrapper.log

 

二、xinetd

xinetd是超级守护进程,xinetd提供类似于inetd+tcp wrapper的功能,但是更加强大和安全。

进程有独立守护进程和非独立守护进程。

独立守护进程响应速度快,消耗资源大;费独立守护进程响应速度慢,但消耗资源少,需要超级守护进程xinetd进行代理。

支持对tcpudprpc服务

* 基本访问控制

only_from 仅允许  例:only_from = 172.16.22.1  only_from = 172.16.22.1/16

no_access 不允许  例:no_access = 172.16.22.1  no_access = 172.16.22.1/16

备注:两者同时使用,一般谁的匹配范围小谁生效,但不建议同时使用。

* 基于时间段的访问控制

access_times  例:access_times = 10:00-16:00

* 基于资源的访问控制

cps  能限制每秒钟客户端能启动服务的个数(带两个参数:每秒连接数的最大值;超出最大连接数后临时禁用的时长例:cps = 50 5

per_source  能限制每个客户端能启动的最大服务器数目 例:per_source = 20

instances  能限制客户端能启动的最大服务器数目总数 例:instances = 200

* 功能完备的log功能,即可以记录连接成功也可以记录连接失败的行为

type_log  type_log=FILE /var/log/ftp.log

  * 将某个服务绑定在特定的系统接口上,从而能实现只允许私有网络访问某项服务
   bind 
例:bind = 172.16.22.1

这些访问控制规则在哪儿写呢?当然会有一个文件专门保存这些规则的:/etc/xinetd.conf

只要把规则写进这个文件就会生效!

service daytime
{
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = nobody
        server          = /usr/sbin/in.date
        instances       = 1
        nice            = 10
        only_from       = 0.0.0.0 

} 

 

 

defaults
	{
	     log_type		 = FILE /var/log/servicelog
	     log_on_success	 = PID
	     log_on_failure	 = HOST RECORD
	     only_from		 = 128.138.193.0 128.138.204.0
	     only_from		 = 128.138.252.1
	     instances		 = 10
	     disabled		 = rstatd
    }

 

看看上面这2个例子,相信你应该懂得什么意思了!