Tcp_Wrappers是一个用来分析TCP/IP封包的软件,类似的IP封包软件还有iptables,linux默认都安装了此软件,作为一个安全的系统,Linux本身有两层安全防火墙,通过IP过滤机制的iptables实现第一层防护,iptables防火墙通过直观地监视系统的运行状况,阻挡网络中的一些恶意攻击,保护整个系统正常运行,免遭攻击和破坏。如果通过了第一层防护,那么下一层防护就是tcp_wrappers了,通过Tcp_Wrappers可以实现对系统中提供的某些服务的开放与关闭、允许和禁止,从而更有效地保证系统安全运行。 



  Tcp_Wrappers的使用很简单,仅仅两个配置文件:/etc/hosts.allow和/etc/hosts.deny 



1. 查看系统是否安装了Tcp_Wrappers 



[root@localhost ~]#rpm -q tcp_wrappers  
  
 
  

    tcp_wrappers-7.6-40.7.el5  
  
 
  

    或者  
  
 
  

      [root@localhost ~]#rpm -qa | grep tcp  
  
 
  

      tcpdump-3.9.4-15.el5  
  
 
  

    tcp_wrappers-7.6-40.7.el5





如果有上面的类似输出,表示系统已经安装了tcp_wrappers模块。如果没有显示,可能是没有安装,可以从linux系统安装盘找到对应RPM包进行安装。 


   


2. tcp_wrappers设定的规则 


tcp_wrappers防火墙的实现是通过/etc/hosts.allow和/etc/hosts.deny两个文件来完成的 


 


文件格式是: 


服务列表 : 主机列表 : 选项 


 


1.服务列表是要支持的服务的名,例如:telnet、vsftpd等等。 


2.主机列表设定受控制的机器。这可以是机器名、主机IP,也可以使用通配符(*或?)或ALL及EXCEPT。 


3.选项是我们所要控制的动作。在服务与client都符合之后,那么真正所要进行的动作,就是选项在作。 


 


1)ALLOW 接受连接请求。2)DENY 拒绝连接请求。 


 


 


举例:只允许118.126.3.222中vsftp登录 


 


(这里要注意的是关于vsftp的配置文件vsftpd.conf中的 


tcp_wrappers=YES 


这样vsftp才允许通过tcp_wrappers的机制对vsftp服务器进行访问控制。) 


 


输入vim /etc/hosts.allow 


编辑 vsftpd:118.126.3.222:allow 


表示允许118.126.3.222vsftp连接 


 


输入vim /etc/hosts.deny 


编辑 vsftpd:all 


表示拒绝所有vsftp连接 


一般情况下,linux会首先判断/etc/hosts.allow这个文件,如果远程登录的计算机满足文件/etc/hosts.allow设定的话,就不会去使用/etc/hosts.deny文件了,相反,如果不满足hosts.allow文件设定的规则的话,就会去使用hosts.deny文件了,如果满足hosts.deny的规则,此主机就被限制为不可访问linux服务器,如果也不满足hosts.deny的设定,此主机默认是可以访问 linux服务器的. 


 


TCP Wrappers 封锁IP地址的方法 


 


1. Tcp Wapper基础知识介绍 


Tcp_Wapper是在 Solaris, HP_UX以及 Linux中广泛流行的免费软件。它被设计为一个介于外来服务请求和系统服务回应的中间处理软件。最常见的用法是与inetd一起使用。当Inetd接收到一个外来服务请求的时候,并不是直接调用,而是调用TCP Wrapper(可执行文件tcpd),TCP Wrapper根据这个所请求的服务和针对这个服务所定制的存取控制规则来判断对方是否有使用这个服务的权限,如果有,TCP Wrapper将该请求按照配置文件定义的规则转交给相应的守护进程去处理同时记录这个请求动作,然后自己就等待下一个请求的处理。 


TCP Wrapper机制的主要目的在于,来自客户端的请求只被允许同一个独立的守护进程(xinetd)直接通信,而它请求的目标服务被TCP Wrapper包裹起来,这样就提高了系统的安全性和系统管理的方便性。Tcp wrapper随着应用逐渐成为一种标准的Unix安全工具,成为unix守护程序inetd的一个插件。通过Tcp wrapper,管理员可以设置对inetd提供的各种服务进行监控和过滤,以保证系统的安全性。 


2. Tcp Wapper源码获取、编译与安装 


由于它已经在Solaris, HP_UX以及 Linux中泛使用,而在Tru 64上使用的很少,所以在这里给大家做一个详细介绍,我机器的操作系统版本为:tru 64 4.0F 


(1) 下载 源码地址:(附件1) 


(2)解压缩 


#gunzip tcp_wrappers_7.6.tar.gz 


#tar xvf tcp_wrappers_7.6.tar 


(3)编译源码程序 

# make REAL_DAEMON_DIR=/usr/sbin hpux  
  
   

    最后一个参数是hpux,你可以根据你的操作 
   系统来做调整,这里由于没有DEC的我就使用这个替代了。接着将生成的几个主要文件拷贝到相应的系统目录下。    
   

    #cp tcpd /usr/sbin  
  
   

    #cp safe_finger /usr/sbin  
  
   

    #cp tcpdchk /usr/sbin  
  
   

    #cp tcpdmatch /usr/sbin  
  
   

    #cp try-from /usr/sbin  
  
   

    #cp hosts_access.3 /usr/man/man3  
  
   

    #cp hosts_access.5 /usr/man/man5  
  
   

    #cp hosts_options.5 /usr/man/man5  
  
   

    #cp tcpd.8 /usr/man/man8  
  
   

    #cp tcpdchk.8 /usr/man/man8  
  
   

    #cp tcpdmatch.8 /usr/man/man8  
  
   

    #cp libwrap.a /usr/lib  
  
   

    #cp tcpd.h /usr/include


其中: 


(1)tcpd是所有internet服务的主要访问控制守护进程,运行 inetd 或 xinetd 而不是运行单独的服务守护进程时要用到它。 


(2)tcpdchk 一个检查 tcpd wrapper 设置和提供错误信息。 


(3)tcpdmatch 用来预知 tcp wrapper 如何控制一个服务的特殊请求。 


(4)try-from可以通过远程shell命令找出主机名字和地址是不是正确的。 


(5)safe_finger 是finger工具的 wrapper ,提供自动的主机名反向查找。 


 


3、如何将服务纳入管控状态 


大家知道inetd,也叫作“超级服务器”,就是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求。inetd.conf则是inetd的配置文件。inetd.conf文件告诉inetd监听哪些网络端口,为每个端口启动哪个服务。如果我们要想将telnet、ftp 交由tcpd管控,需要修改/etc/inetd.conf。 


修改前为:  
  
   

    ftp stream tcp nowait root /usr/sbin/ftpd ftpd  
  
   

    telnet stream tcp nowait root /usr/sbin/telnetd telnetd  
  
   

    修改后为:  
  
   

    ftp stream tcp nowait root /usr/sbin/tcpd ftpd  
  
   

    telnet stream tcp nowait root /usr/sbin/tcpd telnetd  
  
   

      
  
   

    请记着修改完后要重新启动process  
  
   

    # vi /etc/inetd.conf  
  
   

    # ps -ef|grep inetd  
  
   

    root 53872 1 0.0 10:37:52 ?? 0:00.00 /usr/sbin/inetd  
  
   

    root 53873 53872 0.0 10:37:52 ?? 0:00.01 -child (inetd)  
  
   

    root 54243 53896 0.3 11:04:58 pts/0 0:00.02 grep inetd  
  
   

    # kill 53872 53873  
  
   

    # /usr/sbin/inetd4、使用TCP Wrappers限制访问的配置


为了配置TCP wrappers,用户需要在两个文件里接受或拒绝连接的标准:/etc/hosts.allow和/etc/hosts.deny。前一个文件定义计算机允许的访问,后一个文件指定应该拒绝的连接。如果某个系统同时出现在两个文件里,hosts.allow是优先的。如果某个系统没有出现在任何一个文件里,TCP Wrappers会允许它进行连接。另外,如果运行最严格的TCP Wrappers安全,用户可以在/etc/hosts.deny文件力包含一行“ALL:ALL”,它会禁止所有由TCP Wrappers处理的输入访问。然后用户就可以在/etc/hosts.allow里为特定客户程序打开服务程序的端口。 


/etc/hosts.allow和/etc/hosts.deny的格式是完全一样的,当然同样的项目在两个文件中具有相反的作用。这些项目的基本格式是: 

Service-names :client-list [:shell-command]  
  
   

    请看如下两个文件  
  
   

    # vi /etc/hosts.deny  
  
   

    all:all  
  
   

    (注:禁止所有TCP Wrappers处理的输入访问)  
  
   

    # vi /etc/hosts.allow  
  
   

    telnetd:10.65.69.157 10.65.70.  
  
   

    ftpd: 10.65.69. EXCEPT 10.65.69.1  
  
   

    (注: Telnet telnetd行告诉TCP wrappers接受来自于10.65.69.157机器及10.65.70 网段的telnet连接.  
  
   

    Ftp ftpd告诉TCP wrappers接受来自于10.65.69 网段中除10.65.69.1之外的所有计算机的FTP连接。也许10.65.69.1是路游器或其他不应该做FTP客户端的主机),修改这两个文件不用重新启动xinetd进程的,会直接生效的。)  
  
   

    5、检测的方法  
  
   

    检测tcp_wrapper 是否正常work  
  
   

    ----我自己的设置----# tcpdchk -v  
  
   

    Using network configuration file: /etc/inetd.conf>>> Rule /etc/hosts.allow line 1:  
  
   

    daemons: ftpd  
  
   

    clients: 10.1.20.76  
  
   

    access: granted>>> Rule /etc/hosts.allow line 2:  
  
   

    daemons: telnetd  
  
   

    clients: 10.1.20.76 10.1.20.  
  
   

    access: granted>>> Rule /etc/hosts.deny line 1:  
  
   

    daemons: telnetd  
  
   

    clients: 10.1.20.100  
  
   

    warning: /etc/hosts.deny, line 1: host address 135.129.24.100->name lookup failed  
  
   

    access: denied>>> Rule /etc/hosts.deny line 2:  
  
   

    daemons: ftpd  
  
   

    clients: 10.1.20.100  
  
   

    warning: /etc/hosts.deny, line 2: host address 135.129.24.100->name lookup failed  
  
   

    access: denied>>> Rule /etc/hosts.deny line 3:  
  
   

    daemons: all  
  
   

    clients: all  
  
   

    access: denied


# 6、结束语 


上面介绍只是TCP Wrapper一些简单功能,它还提供了有许多其它特性,有些特性能够实现十分精细的效果,因此,有这方面需求的网友,应该仔细查看关于TCP Wappers控制文件格式的官方文档来实现自己的功能,以保证系统的安全