2011年(42)
分类: LINUX
2011-09-01 22:25:00
tcp wrapper是一款简单易用的访问控制工具,基于tcpd进程来实现,能对基于tcp的服务进行访问控制,能接受tcp wrapper的服务有两个必要条件,一在编译的时候明确接受tcp wrapper的控制,二是基于tcp协议的服务!相比较于iptables来说tcp wrapper能共实现控制的范围要小的多,然而配置起来要简单的多!
下面我们简单了解下这个小工具:
首先看看tcp wrapper的工作机制:
实时上tcp wrapper是通过tcpd这个工作在稍底层的进程代为监听那些用户对于接受tcp wrapper管理的服务的请求进而对这些服务的请求实现访问控制的机制!稍微有点儿绕啊!举个例子说明下吧!
如我们的vsftp服务是接受tcp wrapper 的管理的,当我们启动vsftpd这个服务时就监听在21号端口,当用户发送ftp的请求的时候,就直接发往21号端口,我们的vsftpd服务给予响应即可,但是在接受tcp wrapper的访问控制后,tcpd这个进程会在稍底层的某个端口代替vsftpd来监听用户发送的ftp请求,来对其进行匹配和访问控制,简单的说就是当用户向服务器发起ftp服务的请求时首先会经过tcp wrapper的过滤,如果匹配规则通过则把请求转发给vsftpd服务,如果不通过则丢弃请求拒绝用户访问!
简单的了解了工作的机制后我们想要知道到底哪些进程时接受tcp wrapper的管理的呢?tcp wrapper究竟是靠什么实现访问控制的呢?下面我们就解决这些问题:
首先,怎么判断一个进程是否是接受tcp wrapper的管理的呢?
可以通过以下两种方法判断:
1、使用命令ldd来查看某个服务的动态链接库是否有libwrap.so.0 这个库文件ldd 'which command'
如:# ldd `which sshd` //注意有反引号
[root@server79 ~]# ldd `which sshd`
linux-gate.so.1 => (0x00e84000)
libwrap.so.0 => /lib/libwrap.so.0 (0x00e24000) //能看到这么一行的都是接受tcp wrapper控制的
2、通过静态库查看使用命令strings,strings 'which command'
如:root@server79 ~]# strings `which portmap` |grep hosts
hosts_access_verbose
hosts_allow_table
hosts_deny_table
/etc/hosts.allow //出现这两行即接受tcp wrapper控制
/etc/hosts.deny
配置文件/etc/hosts.{allow,deny},该配置文件修改后立即生效
1)格式
daemon:client.list[:options]
daemon是对应每个服务的可执行文件的文件名
telnet----in.telnetd
sshd ----- sshd
vsftpd--- vsftpd
client.list要过滤的列表
列表格式
ip 特定的主机ip 如192.168.1.1
networkip network/mask(mask 不能使用CIDR的格式)
networkip 可写成如 192.168.1. 表示1.0 的网段
hostname 基于主机名的过滤
.test.com 对整个test.com 域进行过滤
2)使用宏定义
ALL 所有主机或服务
LOCAL 本地主机
KNOWN 已知的主机
UNKNOWN 未知的主机
PARANOID 正反向解析不匹配
EXCEPT 除什么之外的 如 in.telnetd: All EXCEPT ip
3)options
spawn command spawn后接要执行的命令
ALLOW 在拒绝中允许,及用在hosts.deny表中
DENY 允许中拒绝,及用在hosts.allow表中
相对来说tcp warpper的应用还是比较简单易用的就不举例说明了!