tcp wrapper
基于tcpd进程来实现,能够对访问本机的基于tcp的服务,并且在编译的时候接受tcpd控制的服务进行访问控制的一款工具。它工作在稍底层,能够代为接收用户对于那些接受tcp wrapper控制的服务的请求,并检查其是否符合访问的要求,如果符合,就把请求转交给对应的服务,如果不符合就直接丢弃的一种机制。
那么怎么知道一个服务是否接受tcp wrapper的控制呢?
1、ldd `which postfix` //查看postfix是否接受控制
如果下面有libwrap.so.0 => /lib/libwrap.so.0 (0x003e2000) 的话就接受,否则不接受 2、strings `which command` | grep hosts也可以查看
里面有以hosts开头的文件
/etc/hosts.allow
/etc/hosts.deny
如果有,就接受访问控制,否则不接受控制。
用户访问过程
当用户发送访问请求的时候,先被tcpd进程接收,然后检查/etc/hosts.allow里面是否有相关的定义,如果有,则通过访问。如果没有则检查/etc/hosts.deny里面是否有相关定义,如果有则拒绝访问,如果没有默认情况下是被允许的。这就是tcp wrapper的访问控制过程。
里面定义的命令形式如下
daemon_list:client_list[:options]
其中第一段daemon_list有如下表现形式
vsftpd: //一个
vsftpd,ssh: //多个
ALL //宏定义,所有
vsftpd@192.168.0.100 //表示本机的通过此ip的访问
其中第二段client_list有如下表现形式
ip //直接使用ip地址
192.168.0.0/255.255.255.0 //使用一个网段,不能使用/24这种形式
直接使用主机名
.a.org //使用一个域,表示这个域中的所有
except除了,谁谁谁
如:在/etc/hosts.deny里面写入,表示拒绝信息
vsftpd:192.168.0. //表示对192.168.0.0网段进行控制ftp访问服务控制
vsftpd,sshd:192.168.0. //表示对此网段的ftp,sshd进行访问控制
ALL:192.168.0. //表示对此网段所有基于tcpd访问控制
vsftpd@192.168.0.186 //如果有两个ip表明只对这个ip访问的ftp控制
这里vsftpd不能写成ftp否则不能生效。如你想定义vsftpd则使用which vsftpd然后查看它的文件名就知道了。这里只能用可执行程序的文件名。如telnet的文件名叫in.telnet。
如果你定义一个网段拒绝访问vsftpd在/etc/hosts.allow中允许后,要在/etc/hosts.deny中拒绝所有
这里定义过后是立即生效的,不必重启
例如:这里拒绝本机使用telnet,除了172.16.0.1
vim /etc/hosts.deny
in.telnetd: ALL EXCEPT 172.16.0.1
转载于:https://blog.51cto.com/abliq/648976