Linux运维第三阶段(十二)tcp wrapper

 

tcp wrapper

tcp wrapper(工作在TCP层的访问控制工具,通常只对TCP协议的应用做控制,它本身只是个库文件libwrap.so(由glibc提供))

当来自客户端的请求访问本机服务时,请求先到达本机网卡,再到内核TCP/IP协议栈,路由发现是访问本机的,转至用户空间服务所监听的套接字上,服务响应送至内核TCP/IP协议栈,再通过路由经网卡返回至客户端;有了tcp wrapper后,在这过程当中附加了一层访问控制机制,由tcp wrapper检查用户访问的请求是否允许,若允许则交至用户空间服务,否则在tcp wrapper上就拒绝无法到达用户空间服务,可理解为tcp wrapper工作在用户请求和服务所监听的套接字之间的一种检查过滤机制,可实现拦截对某种特定服务的访问请求,根据事先定义的规则决定是否允许访问指定服务

某一应用程序在开发时,开发者在程序里提供一个调用接口,从而能够调用libwrap.so这个库的话,那这个程序就受tcp wrapper访问控制,否则不受其控制

 

#ldd `which  sshd`  | grep  libwrapprint sharedlibrary dependencies,检查某一程序是否受tcp wrapper控制,查看是否有libwrap.so.0这个动态链接库文件)

libwrap.so.0 => /lib/libwrap.so.0(0x00c7a000)

注:编译某一程序时,可以将某些库文件直接编译进程序当中去(静态编译,静态链接),但这样会使得程序体积过于庞大,所以很多应用程序通常都是动态链接

 

#ldd `which  xinetd`  | grep  libwrap

 

#ldd `which  portmap`  | grep  libwrap(虽没查到,但它受tcpwrapper控制,因为它已将libwrap.so库文件静态编译进程序portmap里了)

#strings $(ldd  `which  portmap`) | grep  hosts

/etc/hosts.allow,/etc/hosts.deny(这两个文件至关重要,tcpwrapper就是根据这两个文件来定义某些特定服务能被哪些主机访问控制的)

 

检查顺序:先查/etc/hosts.allow,若有匹配则通过OK;若无匹配,则查/etc/hosts.deny,有匹配则禁止访问设定的服务,若仍无匹配则按默认法则通过allow

wKiom1Y7CAagdLjcAABPV3zmMZg915.jpg

文件语法格式:

daemon_list:  client_list[:options]

daemon@host:  client_list

 

daemon_list举例:

sshd: 192.168.0.daemon_list是可执行程序的名字,如sshd,vsftpd,in.telnetd,是#rpm  -ql telnet-server查询到的/usr/sbin/in.telnetd

ALL: 192.168.0.ALL是宏,表示tcp wrapper所有接受控制的服务)

vsftpd@192.168.0.11:  1.(表示在192.168.0.11主机上的vsftpd服务,仅允许1.0.0.0网段的主机访问

 

client_list举例:

IP

NETWORK ADDRESSNETWORK/MASK,注意MASK不能写成完整长度格式,如1.0.0.0/255.0.0.0;只能用短格式,简写如1.0.0.0/8

HOSTNAMEFQDN.magedu.com注意前面的点不能少表示是magedu.com这个域)

MACRO(宏,ALL表示所有,LOCAL表示与本地主机在同一网段的主机,KNOWS表示主机名可正常解析,UNKNOWN表示主机名不能解析,PARANOID表示正反向解析无法匹配)

 

#whatis hosts_access

#man 5  hosts_access(查看支持的宏)

%cclient information,格式user@host,user@address

%sserver information,格式daemon@host,daemon@address

%hclient hostname

%Hserver hostname

%pThe daemon processid

 

举例:sshd仅允许172.16.0.0/16访问

#vim /etc/hosts.allow

sshd: 172.16.

#vim /etc/hosts.deny

sshd: ALL

 

举例:telnet服务不允许172.16.0.0/16访问,但允许172.16.100.200访问,其它客户端不作控制

方法一:

#vim /etc/hosts.allow

in.telnetd: 172.16.100.200

#vim /etc/hosts.deny

in.telnetd: 172.16.

方法二:

#vim /etc/hosts.deny

in.telnetd: 172.16.  EXCEPT  172.16.100.200

方法三:

#vim /etc/hosts.allow

in.telnetd: ALL  EXCEPT  172.16. EXCEPT  172.16.100.200

#vim /etc/hosts.deny

in.telnetd: ALL

 

举例:client_list[:options]

#vim /etc/hosts.allow

in.telnetd: 172.16.  :DENY(禁止172.16.0.0/16访问telnet,在allow文件中写:DENY,也可在deny文件中写:ALLOW

#vim /etc/hosts.allow

in.telnetd: 172.16.  :SPAWN  echo  “`date`Login attempt from %c to %s” >>  /var/log/tcpwrapper.log

#vim /etc/hosts.deny

in.telnetd: ALL  :SPAWN  echo  “`date`  Login attempt from %h”  >> /var/log/tcpwrapper.log

 

 


 

以上是学习《马哥运维课程》做的笔记。