红联Linux门户
Linux帮助

Linux的另一个访问控制:TCP Wrapper

发布时间:2014-12-14 16:08:05来源:linux网站作者:wei2856059

1.Tcp Wrapper是一个基于tcpd访问实现的访问控制工具,它能够访问大部分基于tcp的服务,一般来讲,它只能实现那些在编译的时候明确定义接受tcpd管理才行。

他们的工作原理类似于这样的情况:一般来讲,所谓服务监听在某个套接字上进行监听的服务,其实都是通过一个循环来实现的,这个循环就是不停的查看在某个端口上有客户端的请求到来。然后根据客户端的请求完成不同的任务。受tcpd管理的服务,可以是独立的,也可以是非独立的。当客户端的请求到来的时候,先由tcpd来检查,之后才交由端口。


2.如何知道我们的哪些程序可以被tcpd来控制呢?

一个程序到底接受不接受控制,可以用两种方式来查看

1.ldd `which command` | grep wrap  :只要编译的时候,动态链接到wrap这个库上就可以决定是接受控制的

2.strings `which command` | grep hosts  :也能够查看是否接收控制。不过它的显示是这样子的。里面应该有以 hosts开头的文件。

只要出现了/etc/hosts.allow和/etc/hosts.deny则表明它支持tcp wrapper来实现访问控制。

其实,tcp wrapper的控制,正是基于这样的方式实现的。

只要写在/etc/hosts.allow里,一般都是允许访问的,写在/etc/hosts.deny里,就是拒绝访问的。


3.当一个客户端到来的时候,是如何检查的呢?

首先去检查我们的/etc/hosts.allow看这个文件有没有跟这个完全匹配到的条目,如果有,则直接通过访问,如果没有则进而检查deny这个文件,如果deny文件中有,则明确拒绝访问,否则,当两个文件都没有匹配的时候,默认是允许的。


4.如何去定义访问控制:

格式:daemon_list: client_list <:options}

进程:客户端列表 <:选项>

4.1进程如何表示:这里不能指定进程名,必须指定进程的那个可执行文件的文件名

4.1.1.可以是单个的可执行文件的名字

vsftpd: 192.168.0.

4.1.2.可以是多个服务的列表

vsftpd,sshd,in.telnetd:

4.1.3.可以使用通配符ALL,表示所有

ALL:

4.1.4.只在某个特定的地址上的某个服务限定

vsftpd@192.168.0.186

在实现控制某个特定服务服务的时候,要实现依赖于这个服务的其他服务也能够服务。

4.2客户端列表如何定义

4.2.1.可以使用单个的IP

IP

4.2.2.也可以使用网络地址

4.2.2.1:使用网络地址加掩码的方式来实现,这个掩码必须是长格式的。network/mask :不能使用长度格式,只能使用完全ip地址的格式

4.2.2.2:完全可以使用网络地址的类似于172.16.则它会自动识别成172.16.0.0/255.255.0.0

4.2.3:可以使用主机名,比如 hostname

4.2.3.1:可以使用单个主机名 fqdn

4.2.3.2:可以使用域名,比如 .a.org 这表示a.org域内的所有主机

4.2.4:可以使用常用的宏定义:

ALL:表示所有主机/所有服务

LOCAL:本地主机,没有域名的主机,非FQDN的主机名称格式

KNOWN,UNKNOWN所有可解析的主机、不能被解析的主机

PARANOID:正向反向解析不匹配的主机

EXCEPT:除了XX主机

4.3例子:

如何控制vsftpd的访问:

定义拒绝172.16.100.100来访问vsftpd

vim /etc/hosts.deny

vsfptd: 172.16.100.100

注意,它是立即生效的

仅允许172.16网段访问

vim /etc/hosts.allow

vsftpd: 172.16.

vim /etc/hosts.deny

vsftpd: ALL

4.4:EXCEPT的使用:除开……

定义仅允许172.16.0.1来访问

vim /etc/hosts.deny

in.delnetd:ALL EXCEPT 172.16.0.1

4.5:定义之后的选项:

:spawn:发起一个命令

%u:用户名

%a:客户端名

%A:表示服务器端名

%d :服务的名字

用spawn实现日志定义:

任何一个用户来试图登录telnet的时候都记录

in.delnetd:ALL EXCEPT 172.16.0.1: spawn /bin/echo “Login attempt(`date`) %u from %a attempt to login %A, the daemon is %d” >> /var/log/telnet.log

:ALLOW:在拒绝中允许

仅允许172.16.0.0网段访问

vim /etc/hosts.deny

in.telnetd: 172.16. :ALLOW

ALL: ALL

:DENY:在允许中拒绝

vim /etc/hosts.allow

in.delnetd: 172.16. :DENY

本机的telnet决绝所有人访问。但是允许172.16.网段,但是还要拒绝172.16.100.100访问。

在拒绝中:

ALL: ALL EXCEPT 172.16. EXCEPT 172.16.100.100