感谢支持
我们一直在努力

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

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

赞(0) 打赏
转载请注明出处:服务器评测 » Linux的另一个访问控制:TCP Wrapper
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏