首页 > 代码库 > tcp_wrapper

tcp_wrapper


    在linux下实现基于主机访问控制的常用工具有三个:iptables、tcp_wrapper、xinetd(超级守护进程)。        

    独立守护进程(httpd,vsftpd)、瞬时守护进程(rsync,tftp,telnet),这两类守护进程都支持基于iptables进行控制。哪一端口运行客户端访问,哪一端口不允许客户端访问,基于主机做防火墙时,都能进行控制。有些瞬时守护进程,甚至是某些独立独立守护进程,还能够接受tcp_wrapper,来控制。   

 

    tcpwrapper本身是一个守护进程,工作于tcp协议上。iptables工作于内核的tcp/ip协议栈上,tcp_wrapper工作于内核的tcp/ip协议栈的tcp协议上,而且是在tcp的入口处启动一个进程,监视每一个tcp服务的相关请求,同时把这个报文本身跟tcp_wrapper的配置文件中的放行规则或拒绝规则中的规则进行对比。若果一旦匹配,则给予放行或拒绝访问。


工作进程为:tcpd

配置文件:/etc/hosts.allow,/etc/hosts.deny

并非所有服务都能接受tcp_wrapper的控制,事实上,tcp_wrapper与其说是一个服务,不如说是一个库更合适。因为所有的守护进程,都是工作在用户空间的。

所有的服务都能接受iptables控制,但并非所有都接受tcp_wrapper控制。只有用户在开发某个程序时,如果链接到这个库上,或者说依赖于这个库,就意味着他他是接受tcp_wrapper控制的。


使用tcp_wrapper控制

a).只需将受控制程序名写入配置文件即可实现控制:

允许访问:/etc/hosts.allow

拒绝访问:/etc/hosts.deny

b).控制原理

程序链接的库文件,会自动在用户访问服务时,基于tcpd检测

/etc/hosts.allow、/etc/hosts.deny两个配置文件,并判断某一主机是否能够访问服务。

c).匹配机制

1.先检查/etc/hosts.allow,如果被允许,则直接放行;

2.如果/etc/hosts.allow没有匹配项,则检查/etc/hosts.deny;如果有匹配项则禁止访问;

3.如果均无匹配,则默认放行。

d).配置文件语法格式

daemo_list:client_list [:options]

daemon_list:

一定是应用程序名,不是进程名;

如果有多个,则用逗号隔开;

如果匹配所有,则用ALL;



例: vim /etc/hosts.allow

in.telnetd: ALL EXCEPT 192.168.1.100 :deny

spawn发起执行一条命令,比如:如果有人访问访问服务器,别拒绝了,这通常是一种恶意访问,或非正常访问,就可以使用spawn echo一些命令保存至日志中

vim /etc/hosts.allow

in.telnetd: 192.168. EXCEPT 192.168.1.1

vim /etc/hosts.deny

in.telnetd: ALL : spawn echo `date` login attempt from %c to %s >> /var/log/tcp_wrapper.log

%c:user@host

%s:server@host

%h:客户端主机名

%p:服务器上的进程PID

获取完整帮助信息:man 5 hosts_access

注意:echo的信息无需加引号,否则命令替换不会进行


e).tcp_wrapper有几个内置的宏(Macro)

用于client_list的有:ALL,NONE,UNKNOW(主机名无法解析的地址),

PARANOID(正反向解析不匹配的地址)

用于daemon_list的有:ALL

两者都可以都可以用:EXCEPT (排除)

例: vim /etc/hosts.allow

in.telnetd: 192.168. EXCEPT 192.168.1.1


实例:

如果我们要定义仅放行某一网段,则定义/etc/hosts.allow放行网段,在/etc/hosts.deny定义拒绝所有主机。

演示控制:telnet

yum install telnet-server

ldd `which in.telnetd` 没有显示

ldd `which xinetd` 显示有,telnet自己本身不监听程序,而是由xinetd监听,所有它是接受tcp_wrapper控制的。

chkconfig telnet on

service xinetd start

netstat -tnlp | grep 23

仅放行192.168网段:

vim /etc/hosts.allow

in.telnetd: 192.168.

vim /etc/hosts.deny

in.telnetd: ALL

不用重启,立即生效,因为工作在内核中的,和iptables一样立即生效



本文出自 “ngames” 博客,请务必保留此出处http://ngames.blog.51cto.com/3187187/1573805

tcp_wrapper