1.课程目标

 

  • 了解Linux过滤数据包的规则、顺序;

  • 了解TCP_Wrappers的过滤机制;

  • 掌握TCP_Wrappers的配置;

  • 学会判断服务是否能通过TCP_Wrappers过滤;

  • 能够熟练运用TCP_Wrappers

 

 

 

2.TCP_Wrappers简介

 

 

2.1.Linux中数据包的处理过程

 

当一个数据包到达一台Linux服务器之后,处理流程是这样的:

1)    首先经过Firewall的处理(RHEL6中为iptables)Firewall允许,则到达下一个步骤;Firewall拒绝,则直接拒绝访问请求;

2)    TCP_Wrappers检测,当此检测通过,无策略阻挡时,直接通过,有策略阻挡,拒绝请求;

3)    服务本身的策略,可以在服务本身的配置文件中设置策略;

4)    最后的一道防线就是SELinux的限制,当前面都通过之后,会经过SELinux的严格过滤,通过了SELinux的策略验证才能最终允许访问。

 

 

2.2.为什么需要TCP_Wrappers

 

Firewall包括iptables,大多数是基于IP和端口过滤,这对于很多服务是没有问题的。但是有些服务一开启,端口就是随机分发的,此时在使用firewalliptables的过滤机制就行不通了。而TCP_Wrappers可以基于服务名称来控制,不用管服务的端口是什么,怎么变都没关系。

 

 

 

3.配置文件

 

TCP_Wrappers有两个配置文件

  • /etc/hosts.allow

默认都是注释行,无配置。此文件为allow策略文件,一般所做配置为允许策略。

 

  • /etc/hosts.deny

默认全注释,无配置。此文件为deny策略文件,一般所做配置为拒绝策略。

 

注:

  • 当数据要经过TCP_Wrappers过滤时,先检查/etc/hosts.allow文件,如果文件中有匹配的话就放行;

  • 如果/etc/hosts.allow这个文件没有具体的匹配策略,则检测/etc/hosts.deny这个文件,有匹配策略,则拒绝访问请求;

  • 如果两个文件都没有匹配的策略,缺省放行;

  • 如果两个文件发生冲突,则允许优先(即按/etc/hosts.allow策略执行)

 

配置文件的语法格式

Daemon_list                         client_list                           [:option]

         |                                                   |                                       

进程列表:即那些服务(服务名)    客户端列表:那些客户端             

  • Daemon_list:如:vsftpd:、sshd:、in.telnetd:;

  • client_list:此处主要写IP地址(192.168.1.0&192.168.1.)、网络地址(1.1.1.0/255.255.255.0172.16.)、主机名(www.baidu.com.example.com)

  • 宏定义(MACRO)

  • ALL:匹配所有;

  • LOCAL:本地来宾,和本地网卡在同一个网段内的主机;

  • KNOWN:主机名可以正常解析;

  • UNKNOWN:主机名不可以正常解析;

  • PARANOID:主机名的正向解析和反向解析匹配不正常;

  • EXCEPT:除了,不包含。

  • [option]:此处可以填写[DENY][ALLOW][spawn]。如可以在hosts.allow文件里写拒绝策略,如下:

in.telnetd:  192.168.114.  :DENY

但是此方法很少使用,一般直接在hosts.deny里面写拒绝策略。

 

 

 

4.TCP_WrappersFirewall的关系

 

我们知道,在RHEL7中,Firewall缺省是拒绝所有(除了缺省选项,如:ssh)。所以,如果针对一个访问请求,要使用TCP_Wrappers进行验证,前提是Firewall放行了此访问请求,否则,根本不用TCP_Wrappers,直接在firewall阶段就过滤掉了。

 

 

 

5.TCP_Wrappers配置

 

 

1:缺省情况下,frirewall是放行ssh访问请求的,所以,此处可以用TCP_Wrappers来过滤,如:拒绝192.168.10.11访问本机:

[root@freeit etc]# echo sshd:  192.168.10.11 >> /etc/hosts.deny

cat: /etc/host: No such file or directory

[root@freeit etc]# cat /etc/hosts.deny

#

# hosts.deny    This file contains access rules which are used to

#               deny connections to network services that either use

#               the tcp_wrappers library or that have been

#               started through a tcp_wrappers-enabled xinetd.

#

#               The rules in this file can also be set up in

#               /etc/hosts.allow with a 'deny' option instead.

#

#               See 'man 5 hosts_options' and 'man 5 hosts_access'

#               for information on rule syntax.

#               See 'man tcpd' for information on tcp_wrappers

#

sshd: 192.168.10.11

----------------------------------------------------登录主机11验证--------------------------------------------

[root@freeit ~]# ifconfig eth0 |grep "netmask" | cut -d " " -f10

192.168.10.11

[root@freeit ~]# ssh -o StrictHostKeyChecking=no [email protected]

ssh_exchange_identification: read: Connection reset by peer

//连接失败。

 

2:在hosts.allow重做上个策略(做之前删除hosts.deny的配置)

[root@freeit etc]# cat /etc/hosts.deny

#

# hosts.deny    This file contains access rules which are used to

#               deny connections to network services that either use

#               the tcp_wrappers library or that have been

#               started through a tcp_wrappers-enabled xinetd.

#

#               The rules in this file can also be set up in

#               /etc/hosts.allow with a 'deny' option instead.

#

#               See 'man 5 hosts_options' and 'man 5 hosts_access'

#               for information on rule syntax.

#               See 'man tcpd' for information on tcp_wrappers

#

--------------------------------------------------/etc/hosts.allow拒绝策略­-------------------------------------

[root@freeit etc]# echo sshd:   192.168.10.11    :DENY >> /etc/hosts.allow

[root@freeit etc]# cat /etc/hosts.allow

#

# hosts.allow   This file contains access rules which are used to

#               allow or deny connections to network services that

#               either use the tcp_wrappers library or that have been

#               started through a tcp_wrappers-enabled xinetd.

#

#               See 'man 5 hosts_options' and 'man 5 hosts_access'

#               for information on rule syntax.

#               See 'man tcpd' for information on tcp_wrappers

#

sshd: 192.168.10.11 :DENY

--------------------------------------------------访问测试----------------------------------------------------

[root@freeit ~]# ifconfig eth0 |grep "netmask" | cut -d " " -f10

192.168.10.11

[root@freeit ~]# ssh -o StrictHostKeyChecking=no [email protected]

ssh_exchange_identification: read: Connection reset by peer

//连接失败。策略同样失效。

但是,在/etc/hosts.allow里面写拒绝策略,一般很少写。如果要做拒绝策略,建议直接在/etc/hosts.deny文件里面做。

 

 

 

6.TCP_Wrappers支持那些服务

 

TCP_Wrappers并不是所有的服务都支持,一些服务是不支持的。常用的有:sshdvsftpdin.telnetd等,这些服务都支持TCP_Wrappers。那么,如何验证一个服务是否支持TCP_Wrappers呢?

一个服务能不能通过TCP_Wrappers来过滤,要看此服务是否支持libwrap.so动态连接库。

 

例:查看sshdvsftpdhttpd服务是否支持libwrap.so动态连接库(需要先安装服务)

[root@freeit etc]# ldd /usr/sbin/sshd |grep libwr  

        libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fe2f5d6f000)

[root@freeit etc]# ldd /usr/sbin/vsftpd |grep libwr

        libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fd9d2dc5000)

[root@freeit etc]# ldd /usr/sbin/httpd |grep libwr  

[root@freeit etc]#

//无动态连接库文件

如上:sshdvsftpd都有动态连接库文件,但是httpd服务没有。也就是说,httpd服务不支持TCP_Wrappers