Linux运维笔记
我们一直在努力

tcp_wrapper(TCP包装器)

【 tcp_wrapper 】:TCP包装器

类似于iptables访问控制的工具,对基于TCP协议开发,并且基于TCP提供的应用程序,提供的一层访控制问工具。

iptables是工作在内核中的,所以只要是一个网络服务经由内核中的TCP/IP协议栈,他就能够受到iptables/netfilter的控制,tcp_wrapper也一样需要在用户请求报文所必经的路上设置访问控制机制,实现对某个协议或服务访问控制的功能

但是tcp_wrapper不像iptables/netfilter是在内核中实现,而是基于库调用实现其功能。

    iptables/netfilter: 在内核中实现

    tcp_wrapper:        基于库调用实现其功能

意味着,只有那些在开发时,不光是TCP协议,还必须是基于TCP协议开发提供服务,并且在开发时调用了tcp_wrapper相关  库的(库名 libwrap)应用,tcp_wrapper才可以生效,比起iptables适用范围要窄很多。

[ 如何知道应用是否调用了tcp_wrapper,并支持基于tcp_wrapper的控制呢? ]:

        (1)动态编译:    ldd命令,显示出libwrap就表示调用了tcp_wrapper

                比如:ldd `which sshd`

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

        (2)静态编译:    strings命令,查看应用成熟稳健,并且结果中如果出现下述2个文件,则表示tcp_wrapper库

                hosts.allow

                hosts.deny

【 tcp_wrapper 如何实现访问控制的 】:通过配置文件中为各服务器分别定义访问控制规则实现访问控制

配置文件位置:

    /etc/hosts.allow

    /etc/hosts.deny

    [ 检查次序 ]:

            客户端来了,先检查hosts.allow中与之匹配的规则,如果有,就放行了。

            如果allow没有,再检查hosts.deny,如果deny文件中有匹配的,就拒绝了。

            如果deny也没有,则取决于默认策略(如果allow和deny都没有匹配到,则允许)

            如果说仅放行某一个网络:

                    在ALLOW中ALLOW这个网络

                    在DENY中DENY ALL

配置文件语法:daemon_list: client_list [:options]

    daemon_list:可以是单个服务也可以是多个

            1、应用程序的文件名称(而非服务名),如果要控制DNS就要写named,而不是dns

            2、应用程序文件名称列表,彼此间用逗号分割,如:sshd,vsftpd

            3、ALL:所有能够受tcp_wrapper控制的服务

    client_list:允许哪些客户端主机

            1、IP地址:表示单个主机

            2、主机名:表示单个主机

            3、网络地址:必须使用完整格式的掩码,不能使用前缀格式掩码

                    只能使用 172.16.0.0/255.255.0.0

                    不能使用 /16 /24这样格式

            4、简短格式的网络地址:如172.16.0.0网段可以直接写成172.16.来表示(最后点不能省)

            5、ALL:表示所有来段主机

            6、KNOWN:表示所有可以解析到的主机

            7、UNKNOWN:表示所有无法解析到的主机

            8、PARANOID:表示主机名正反解析不匹配

    [:options]:选项

        1、EXCEPT:除了

            【 实验1 】:开放给172.16网段的主机访问,但是172.16.100.1无法访问

                # vim /etc/hosts.allow

                vsftpd: 172.16. EXCEPT 172.16.100.6 

            【 实验2 】:开放给172.16网段的主机访问,不过172.16.10.0网段主机无法访问

                但是单独开放给172.16.10.0网段中的172.16.10.1单个主机可以访问

                # vim /etc/hosts.allow

                vsftpd: 172.16. EXCEPT 172.16.10.0/255.255.255.0 EXCEPT 172.16.10.6

            【 实验3 】:仅允许172.16网段访问vsftpd

                # vim /etc/hosts.allow 去掉其中vsftpd规则                     

                # vim /etc/hosts.deny

                vsftpd: ALL EXCEPT 172.16.

        2、deny:拒绝,主要用于hosts.allow(在allow的文件中实现拒绝的功能)

            【 实验1 】:实现非172.16网络访问vsftpd

                # vim /etc/hosts.allow

                vsftpd: 172.16. :deny   只拒绝这个172.16网段访问,但其他网络可以访问(如果deny文件中没其他拒绝规则)

        3、allow:允许,主要用于hosts.deny(在deny的文件中实现允许的功能)

            【 实验1 】:实现只允许172.16网络访问vsftpd

                # vim /etc/hosts.deny

                vsftpd: 172.16. :allow  只允许这个172.16网段访问,但其他网络不可以访问(如果allow文件中没其他允许规则)

        4、spawn:启动,不做拒绝和允许,一旦被匹配到启动其他应用程序,可以完成一部分管理功能

            比如在定义某一服务时,如果不允许访问的主机访问了,都可以记录到日志中来

            本地开放telnet服务,但是不允许任何人访问

            【 实验1 】:vsftpd,如果有人访问了就记录到日志中

                # vim /etc/hosts.allow 清空vsftpd相关规则

                # vim /etc/hosts.deny

                vsftpd: ALL :spawn /bin/echo `date` login attempt from %c to %s, %d >> /tmp/vsftpd.deny.log

                    %c 客户端ip

                    %s 服务端ip

                    %d 访问的是哪个守护进程

【 实验1 】:实现vsftpd服务不允许172.16.100.1访问

    # vim /etc/hosts.deny

    vsftpd: 172.16.100.1

【 实验2 】:仅允许172.16网段访问vsftpd服务

    # vim /etc/hosts.allow

    vsftpd: 172.16.

    # vim /etc/hosts.deny

    vsftpd: ALL

【 实验3 】:控制telnet服务仅允许172.16网络访问(CentOS 6)

    安装telnet:yum install -y telnet-server

    启动telnet:

        vim /etc/xinetd.d/telnet

        disable = yes 改为 no

        service telnet start

        [root@Node-61 ~]# rpm -ql telnet-server
        /etc/xinetd.d/telnet
        /usr/sbin/in.telnetd
        /usr/share/man/man5/issue.net.5.gz
        /usr/share/man/man8/in.telnetd.8.gz
        /usr/share/man/man8/telnetd.8.gz

    # vim /etc/hosts.allow

    in.telnetd: 172.16.

    # vim /etc/hosts.deny

    in.telnetd: ALL

【 实验4 】:所有都不能访问!!!!

    # vim /etc/hosts.allow

    vsftpd: 172.16. EXCEPT 172.16.100.6 :deny

    # vim /etc/hosts.deny

    vsftpd: ALL

 

赞(0) 打赏

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址