js333 > 计算机互联网 > 简单的基于主机的访问控制工具

原标题:简单的基于主机的访问控制工具

浏览次数:79 时间:2019-11-07

一、常用的主机访问控制工具

 Linux中TCP wrapper的使用

tcpwrapper的目的是对那些访问控制功能较弱的服务提供访问控制功能要想了解访问控制就必须先知道服务监听的概念:

服务监听的两种方式:

listen     :        socket                  监听在套接字上提供服务

                   循环                   不停歇的查看某个端口来提供服务

 

 

有两种方式来判断一个服务是否支持tcp wrapper:

1.通过查找库文件看是否有libwrap

ldd `which command`

2.查看是否连接到/etc/hosts.allow|deny

strings `which command`                   # 查看静态链接库

         如果有/etc/hosts.allow

                              /etc/hosts.deny       就说明这个命令静态链接了tcpwrraper

 

tcpwrraper自身工作在内核,却可以通过这两个文件来提供访问控制

 

                   请求

           ↓              

        服务   --->/etc/hosts.allow     --->     如有有就放行

                                     ↓         没有

                           /etc/hosts.deny     ---->    如果没有就放行     

                                     ↓                    

                                                        如果有明确的匹配条目拒绝

/etc/hosts.allow|deny文件格式:damon_list: client_list [:option]

匹配服务列表:damon_list

vsftpd: 192.168.0.            

vsftpd,sshd,in.telnetd:

ALL                    

daemon@host

vsftpd@192.168.0.186                    

#可以简写192.168.0  代表192.168.0.0网段

#可以一次指定多个服务

#可以使用通配符ALL来指定所有的服务

#@只对某个主机来控制

 

匹配客户端列表clent_list

IP

network address

     network/mask:   mask不能使用长度格式 ,只能是有完全ip的格式

     172.16.0.0--->172.16.    也可以简写网段

HOSTNAME

           fqdn

           .a.rog            表示a.org域内的所有主机    

 

option  选项

spawn                     #可以通过spawn来实现日志定义

spawn echo ""     

#下面定义一个条件,只要用户通过telnet登录就记录到一个日志

vim /etc/hosts.deny

in.telnetd:ALL EXCEPT 172.16.0.1: spawnecho "Login attemp(`date`) %u from %a attemp to login %A, the deamon is%d." >> /var/log/telnet.log

##注意不能在echo后面用: 分号在这里有特殊意义。

##可以通过man 5 hosts_access 来查看上述%的含义

 

常用的宏定义 MACRO

ALL                                   #代表所有主机,或者所有服务

LOCAL                                   #表示本地主机,非FQDN主机

KNOWN                                      #表示可以被解析的主机

UNKNOWN                #反向可以被解析的主机

PARANOID                #正反向解析不匹配的主机

EXCEPT                                    #排除某个主机或某个网络 

 

-

怎么来控制vsftpd的访问

[cpp] view plain copy

  1. 1. which vsftpd                       # 确定文件路径          
  2. 2. vim /etc/hosts.deny                 # 改文件立即生效  
  3. vsftpd: 172.16.100.100  
  4.    
  5. #假设仅允许172.16网段访问  
  6. vim /etc/hosts.allow  
  7. vsftpd: 171.16                        # 只允许172.16.0.0/16网段  
  8. vim /etc/hosts.deny  
  9. ALL: ALL                                            # 拒绝其他的用户登陆  

这样就只有172.16.0.0网段可以访问了

 

 

控制SSH ,只允许192.168.0.32网段登陆,并且不允许192.168.0.32登陆

[cpp] view plain copy

  1. vim /etc/hosts.deny  
  2. ALL:ALL  
  3. vim /etc/hosts.allow  
  4. sshd: 192.168.0 EXCEPT 192.168.0.32  

效果:

金沙js333娱乐场 1

将/etc/hosts.deny 里面的ALL: ALL去掉就可以恢复登陆

金沙js333娱乐场 2

一、Tcp_wrapper简介

 

Tcp_wrapper是Wietse Venema开发的一个免费软件。Tcp_wrapper的诞生有个小小的故事,大约1990年,作者所在大学的服务器屡屡受到一个外来黑客侵入,因为受害主机的硬盘数据屡次被rm -rf/命令整个抹掉,所以找寻线索极为困难,直到有一天晚上作者在工作的过程中无意中发现这个黑客在不断的finger 受害主机、偷窥受害者的工作。于是,一个想法诞生了:设计一个软件,使它可以截获发起finger请求的IP,用户名等资料。Venema很快投入了工作,而Tcp_wrapper也由此诞生!此后,Tcp_wrapper随着广泛的应用逐渐成为一种标准的安全工具。通过它,管理员实现了对inetd提供的各种服务进行监控和过滤。

Tcp_wrapper编译安装成功后,会生成一个tcpd程序,它可以在inetd.conf这个控制文件中取代in.telnetd的位置,这样,每当有telnet的连接请求时,tcpd即会截获请求,先读取管理员所设置的访问控制文件,合乎要求,则会把这次连接原封不动的转给真正的in.telnetd程序,由in.telnetd完成后续工作。如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供telnet服务。Tcp_wrapper访问控制的实现是依靠两个文件:hosts.allow,hosts.deny来实现的。

如果我们编辑/etc/syslog.conf文件,为Tcp wrapper加入了日志记录功能,即:

 #tcp wrapper loglocal3.info /var/log/tcplog

编辑结束后,保存文件,在/var/log下会生成tcplog文件,注意这个文件的读写属性,应该只对root有读写权限。然后ps -ef | grep syslogd,找出syslogd的进程号,kill -HUP 重启syslogd进程使改动生效。在这里,我们可以预先看一看以后生成的tcplog文件内容,如下:

    Jul 31 22:00:52 [url]www.test.org[/url] in.telnetd[4365]: connect from 10.68.32.1

Jul 31 22:02:10 [url]www.test.org[/url] in.telnetd[4389]: connect from 10.68.32.5

Jul 31 22:04:58 [url]www.test.org[/url] in.ftpd[4429]: connect from 10.68.32.3

Aug 2 02:11:07 [url]www.test.org[/url] in.rshd[13660]: connect from 10.68.32.5

Aug 2 02:11:07 [url]www.test.org[/url] in.rlogind[13659]: connect from 10.68.32.1

从上面我们可以看到,在安装了Tcp_wrapper的主机上,系统的每一次连接,Tcp_wrapper都做了记录,它的内容包括时间、服务、状态、ip等,对攻击这有很大的参考价值,不过,一定要记得清除日志了。

 

二、inetd服务介绍

 

最重要的网络服务进程,即inetd服务器程序,实际上,大部分请求不太频繁的服务都是由它启动的。

inetd程序在系统中是作为一个服务进程出现,它监听许多端口并且在得到客户请求时启动这个端口的服务程序。inetd程序可以由命令行来启动:inetd [-d]   -d选项用于打开调试信息。

    inetd的工作方式是由/etc/inetd.conf和/etc/services文件设定的,下面我们来解释一下这两个文件。

services文件的格式基本上是这样:

   netstat 15/tcp

qotd 17/tcpquote

msp 18/tcp# message send protocol

msp 18/udp# message send protocol

chargen19/tcpttytst source

chargen19/udpttytst source

ftp21/tcp

# 22 - unassigned

telnet23/tcp

每一行都是两栏或者三栏,第一栏是服务的名字,第二行是使用的端口和协议,例如这里的telnet 23/tcp是表示telnet服务应该使用端口23,协议类型为tcp。第三栏是服务的别名,通常可以省略。

inetd.conf是依赖于services文件的,它也是个文本文件,每行代表一种服务的工作方式,由"#"引导的行表示注释行,非注释行的格式大体是这样:

服务名  数据类型  协议  监听方式  用户身份  服务程序  参数

例如,要启动telnet的服务,应该加入这样一行:

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

服务的名字就是telnet,这个名字按照/etc/services的定义将在23号端口提供服务;stream表示数据的发送和接收将使用简单的流式文件读写来完成(fscanf和fprintf);tcp表示使用tcp协议,监听方式这一栏可以由两个选项,即wait和nowait。简单地说,如果相应的服务程序是多进程的,那么要设置为nowait,这时inetd会每接受到一个请求之后启动一个服务程序进程,例如telnet就是这样工作的,每个独立的telnet对话都会启动一个telnet服务进程。相反,如果是单进程的,就可以设置为wait。

用户身份表示对应服务进程启动时所使用的uid/euid,因为telnet可以是任何用户发出,而且用户可以通过telnet执行任何命令,所以使用root用户身份。/usr/sbin/tcpd 是实际启动的程序,这个程序实际是一个通用的TCP连接处理程序,参数使用in.telnetd,连起来就是当有23端口的连接请求时,inetd去执行/usr/sbin/tcpd in.telnetd。

通常情况下,各种服务都已经写在inetd.conf中,不启用的服务使用注释#使之失效。如果需要打开这服务,只要把引导的#注释符号删除就可以了。值得一提的是/usr/sbin/tcpd程序,它是一个TCP连接过滤程序,通常大部分需要做连接验证的服务都应该通过tcpd程序启动,这个程序能够自动对客户机器的IP地址进行验证并且进行某些安全性过滤,其中最主要的功能是禁止某些地址来的连接。例如,按照

上面的形式,in.telnetd程序就是通过/usr/sbin/tcpd程序启动的,因此可以对telnet请求进行地址检验。

tcpd的地址检验是通过/etc/hosts.deny和/etc/hosts.allow文件完成的,如果不存在这样的文件,你可以自己建立一个,两者的语法几乎是一样的,只是hosts.allow是允许某个地址来的连接,而hosts.deny是禁止某个地方来的连接。基本的语法是:服务程序:客户地址(域名或主机名)

服务程序是指通过tcpd程序被启动的程序名字,客户地址是相关地址的一个列表,例如,/etc/hosts.allow文件中加入这样一行:in.telnetd:10.0.0.2  。将允许10.0.0.2处的机器使用本地的telnet服务,如果这一行加入到/etc/hosts.deny重将禁止10.0.0.2处的机器登录上来。

地址可以使用集合形式,常用的集合形式主要有下列几种:

以逗点开头的字符串定义一个域,例如.edu.cn表示所有域名后缀是.edu.cn的机器。

以逗点结束的字符串定义一串IP地址,如202.199.248.代表202.199.248.0到202.199.248.255。

以/分开的字符串解释为网络地址/子网掩码的形式,例如172.13.0.0/255.255.0.0代表172.13.0.0到172.13.255.255。

另外,地址和服务程序都可以使用通配符,通配符有下列几种:

ALL 代表所有,所有的服务程序或者所有的地址。经常和EXCEPT子句连用,EXCEPT代表“除了”。例如,在hosts.deny中写上ALL:ALL EXCEPT 202.199.248.将禁止除了202.199.248.*的机器之外的所有客户机器使用任何基于tcpd的服务。写上ALL EXPECT in.telnetd:ALL将使得除了telnet以外的所有基于tcpd的服务都被禁止。

LOCAL 指代所有没有名字后缀的机器。

KNOWN 所有IP地址和域名都知道的机器

UNKNOWN IP地址或者域名无法确定的机器

PARANOID IP地址和从域名服务返回的名字不匹配的机器。

 

 

 

 

 

 

 

 

 

 

 

tcp wrapper是一款访问控制的工具,很类似iptables的功能,但是要比iptables功能要小很多,一般只有在满足以下条件时才能使用tcp wrapper
       1),在编译的时候明确表示能接受tcp wrapper的控制
                        通过ldd `which sshd`来查看
                        通过strings `which portmap`| grep hosts查看
             
       2),必须是tcp协议
这个时候才能实现tcp wrapper的控制,虽然能功能范围少了一点,但是tcp wrapper配置起来要比iptables简单很多

 

能接受tcp wrapper控制的服务比如:telnet ,ssh ,vsftp

 

所谓的监听从编程角度来讲就是一段程序通过循环不停的对一个端口进行扫描

 

实际上tcp wrapper的实现就是主要是通过配置以下两个文件:

   /etc/hosts.allow
   /etc/hosts.deny

tcp wrapper的格式:

 

   daemon_list: client_list [:options]
   服务名     : 客户端名    [选项]

 

         daemon_list有以下几种格式:
                vsftpd: 192.168.0.
                vsftpd,sshd,telnetd: 192.168.0.
                All: 192.168.0.
                daemon@host                     #指定只在某个特定的地址上进行控制比如:
                vsftpd@192.168.0.186            #有多块网卡的情况下

         client_list有以下几种格式:
                IP
                network address/mask           #网络地址(只能使用类似255.255.完全ip地址 格                                                式,不能使用位长度表示)
                hostname                       #主机名称
                     .a.org                     #表示.a.org域内的所有主机                

以下是以vsftp为例进行演示(拒绝172.16.100.1访问ftp服务器):
 1),yum install vsftpd
 2),  service vsftpd start
 3),vim /etc/hosts.deny 里面写入
                        vsftpd: 172.16.100.1
 4),配置完立即生效,不需要重启服务
 5),通过windows客户端进行认证

只允许172.16.网段访问ftp:
 1),vim  /etc/hosts.allow 写入: vsftpd: 172.16.
 2), vim /etc/hsots.deny      :   vsftpd: ALL

 

以下是对telnet(监听23号端口)的介绍:

  telnet是一个非独立守护进程,由超级守护进程(xinetd)代为管理,它接受tcp wrapper的控制,但是     实际上不是telnet接受tcp wrapper的控制,而是xinetd接受tcp wrapper的控制
  telnet传输的过程是明文
  telnet一般不允许管理员直接登录(可以先以普通身份登进去,然后su - root)

 

 1),yum install telnet-server
 2),ls /etc/xinetd.d               #里面会有telnet,由此说明telnet是接受超级进程xinetd控制
 3),ldd `which xinetd`           #可以发现超级守护进程是接受tcp wrapper控制的
 4),chkconfig telnet on          #注意这里只是说明下一次开机会自动启动,不能立即生效
 5),service xinetd restart       #通过重启超级进程来重启telnet
 6),useradd gentoo
 7),passwd gentoo
 8),telnet 172.168.25.1测试

只允许172.16.0.1登录telnet:
 vim /etc/hosts.deny 写入:  in.telnetd:ALL EXCEPT 172.16.0.1

[:options] 介绍:

 spawn                              #发起一些额外的命令
vim /etc/hosts.deny         写入:
in.telnet: ALL EXCEPT 172.16.0.1 : spawn echo "%u from %a attempt to login %A ,the daemon is %d." >>/var/log/telnet.log                          

除了spawn还有allow 和 deny分别表示在/etc/hosts.allow中deny 和 /etc/hosts.deny中允许
 比如:
   vim /etc/hosts.deny中写入 :   in.telnetd: 172.16. :ALLOW
                                  ALL:ALL        #表示只允许172.16.网段使用telnet登录

 

 

 

 

 

 

tcp wrapper  基于tcpd进程的访问控制
  这是一个比iptables要简单的设置访问控制的一种机制,他只需要
  在/etc/hosts.allow和/etc/hosts.deny两个文件中进行简单的设置
  就能实现一定的访问控制策略。
  这个访问控制使用有两个要求,首先编译的时候要接受tpc wrapper的
  控制,其次还要是tcp协议。
  查看服务依赖的库文件
  ldd  `which COMMAND`  如果依赖libwrap库文件就能解说tcp wrapper控制
  string `which COMMAND` 只要出现了/etc/hosts.allow、/etc/hosts.deny文件
  就说明连接到了libwrap库,这样也是接受了tcp wrapper 控制
  eg:[[email protected] ~]# ldd `which vsftpd` | grep libwrap
    libwrap.so.0 => /lib/libwrap.so.0 (0x00110000)
 首先要了解一下hosts.allow、hosts.deny两个文件了,规则在这两个文件中
 定义,一个是拒绝,另一个是允许,系统会在这两个文件中查找匹配的条目
 顺序如下:hosts.allow-->hosts.deny,如果都没有的话,默认是允许的。
  这两个文件的格式如下:
   daemon_list:client_list[:options]
   eg:vsftpd:192.168.1.100 //禁止1.100的主机使用ftp服务
      daemon_list常用的格式有下面的:
        vsftpd,sshd,in.tlenetd 有多个进程的话,就是用逗号隔开
        ALL  所有的
        [email protected] //指定地址的指定进程
     
      client_list格式如下:
        IP
        NETWORK
           eg:192.168.1.0/255.255.255.0 or 192.168.1.
        HOSTNAME
           FQDN eg:mail.luowe.com
           .a.org
        MACRO
           ALL  所有的
           LOCAL 本地的主机
           KNOWN 能解析的主机
           UNKNOWN 不能解析的
           PARANOID 可以解析就是不能匹配
           EXCEPT 除了
        options
           spawn
       综合例子:
        in.telnetd: ALL EXCEPT 172.16.100.1: spawn echo "Login attempt(`data`) %u from %a attempt to login %A, the daemon is %d" >>/var/log/telnet.log
 
 telnet的一点小知识:
    telnet是一个远程登录的服务,是一个非独立守护进程,接受超级守护进程的管理
    安装telnet服务
    #yum install telnet-server
    在/etc/xinted.d/telnet中有关于telnet的默认设置
    #vim /etc/xinted.d/telnet修改一下内容     
     disable = no      
    #service xinetd restart
    默认的情况下,telnet不允许root直接登录,而是使用普通用户su过去。
   
    
 
本文出自 “IT梦-齐-分享” 博客

1.1 wrap简介

wrap工作在内核空间和应用程序中间的库层次中。在内核接受到数据包准备传送到用户空间时都会经过库层次,对于部分(只是部分)应用程序会在经过库层次时会被wrap库文件阻挡下来检查一番,如果允许通过则交给应用程序。

独立(stand alone)守护进程(httpd,vsftpd)、瞬时(transient)守护进程(rsync,tftp,telnet), 这两类守护进程都支持基于iptables进行控制。哪一端口运行客户端访问,哪一端口不允许客户端访问,基于主机做防火墙时,都能进行控制。

wrapper 基于tcpd进程的访问控制 这是一个比iptables要简单的设置访问控制的一种机制,他只需要 在/etc/hosts.allow和/etc/hosts.deny两个文件中进...

1.2 查看是否支持wrapper

wrap只会检查tcp数据包,所以称为tcpwrapper。但还不是检查所有类型的tcp数据包,例如httpd就不支持。是否支持,可以通过查看应用程序是否依赖于libwrap.so库文件。(路径/lib64/libwrap.so)

[root@mail ~]# ldd $(which sshd) | grep wrap
        libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f110efb7000)

[root@mail ~]# ldd  $(which vsftpd) | grep wrap    
        libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f1e73185000)

[root@mail ~]# ldd  $(which httpd) | grep wrap

说明sshd和vsftpd都支持wrap机制,而apache的httpd不支持。

当然上面grep不出结果只能说明不支持这样的动态链接的方式,有些应用程序可能静态编译进程序中了,如旧版本的rpc应用程序portmap。

是否将wrap功能静态编译到应用程序中,可以通过以下方式查看。

strings $(which portmap) | grep hosts

如果筛选出的结果中有hosts_access或者/etc/hosts.allow和/etc/hosts.deny这两个文件,则说明是支持的。后两个文件正是wrap访问控制的文件。

要注意的是,如果超级守护进程xinetd被wrap控制了,则其下的瞬时守护进程都受wrap控制。

做主机防火墙时,有些瞬时守护进程,甚至是某些独立独立守护进程,还能够接受另一种方式,tcp_wrapper,来控制。

1.3 配置文件格式

hosts.allow和hosts.deny两个文件的语法格式是一样的,如下:

daemon_list:   client_list  [:options]

【"daemon_list:"的表示方法】:程序名必须是which查出来同名的名称,例如此处的in.telnetd

sshd:
sshd,vsftpd,in.telnetd:
ALL
daemon@host:

最后一项daemon@host指定连接IP地址,针对多个IP的情况。如本机有192.168.100.8和172.16.100.1两个地址,但是只想控制从其中一个ip连接的vsftpd服务,可以写"vsftpd@192.168.100.8:"。

【"client_list"的表示方法】

单IP:192.168.100.8
网段:两种写法:"172.16."和10.0.0.0/255.0.0.0
主机名或域匹配:fqdn或".a.com"
宏:ALL、KNOWN、UNKNOWN、PARANOID、EXCEPT

ALL表示所有主机;LOCAL表示和主机在同一网段的主机;(UN)KNOWN表示DNS是否可以解析成功的;PARANOID表示正解反解不匹配的;EXCEPT表示“除了”。

它们的语法可以man hosts_access。

tcpwrapper的检查顺序:hosts.allow --> hosts.deny --> 允许(默认规则)

例如sshd仅允许172.16网段主机访问。

hosts.allow:
sshd: 172.16.
hosts.deny:
sshd: ALL

telnet服务不允许172.16网段访问但允许172.16.100.200访问。有几种表达方式:

表达方式一:

hosts.allow:
in.telnetd: 172.16.100.200
hosts.deny:
in.telnetd: 172.16.

表达方式二:

hosts.deny:
    in.telnetd: 172.16. EXCEPT 172.16.100.200

此法不能写入hosts.allow:"in.telnetd: 172.16.100.200 EXCEPT 172.16."

表达方式三:

hosts.allow:
    in.telnetd: ALL EXCEPT 172.16. EXCEPT 172.16.100.200
hosts.deny:
    in.telnetd: ALL

EXCEPT的最形象描述是“在其前面的范围内挖一个洞,在洞范围内的都不匹配”。所以hosts.allow中,ALL内有一个172.16的洞是不被allow的,在172.16中又有小洞172.16.100.200是被排除在172.16洞外的,所以172.16.100.200是被allow的。

注意:被EXCEPT匹配到的表示不经过此条规则的检查,而不是反意。例如在allows中指明一个EXCEPT,当有except中的主机被匹配到,表示的不是该主机被拒绝。而是跳过allow检测进入deny的检测。

【:options的表达方式】

:ALLOW
:DENY
:spawn

ALLOW和DENY可以分别写入deny文件和allow文件,表示在allow文件中拒绝在deny文件中接受。如allow文件中:

in.telnetd: 172.16. :DENY

spawn表示启动某程序的意思(/etc/inittab中的respawn表示重启指定程序)。例如启动一个echo程序。

in.telnetd: 172.16 :spawn echo "we are good $(date) >> /var/log/telnetd.log"

在众多的基于主机的安全访问控制中,tcp-wrapper是简单而易于配置的一种。

在linux下能实现基于主机访问控制的常用工具有三个:iptables、tcp_wrapper、xinetd(超级守护进程)。

二、tcp_wrapper简介

显而易见,只能控制tcp协议下的软件。

一般翻译为tcp包装器,能够实现监听在某一tcp服务上,对于进出某本主机区访问某一套接字的应用做检查,而且能够实现所谓授权访问。

简单来说,tcpwrapper本身是一个守护进程,工作于tcp协议上。iptables工作于内核的tcp/ip协议栈上,而tcp_wrapper工作于内核的tcp/ip协议栈的tcp协议上,而且是在tcp的入口处启动一个进程,监视每一个tcp服务的相关请求,同时把这个报文本身跟tcp_wrapper的配置文件中的放行规则或拒绝规则中的规则进行对比。若果一旦匹配,则给予放行或拒绝访问。

工作进程为:tcpd

工作在tcp包文所要经过的位置上,有且只有一个位置。工作于tcp协议层,比工作在网络层的iptables更高一层,因此可以和iptables结合使用。但tcp_wrapper的控制完成之后,iptables就无需控制了,同理,iptables控制完成之后,tcp_wrapper也就无需控制了。二者可以有一个能完成控制就可以了。

iptables既然能完成工作,为什么还需要tcp_wrapper呢?因为tcp_wrapper的配置非常简单。

配置文件:/etc/hosts.allow,/etc/hosts.deny

但是并非所有服务都能接受tcp_wrapper的控制,事实上,tcp_wrapper与其说是一个服务,不如说是一个库更合适。因为所有的守护进程,都是工作在用户空间的,所以与其说tcp_wrapper是一个守护进程,不如说是一个库更合适。

所有的服务都能接受iptables控制,但并非所有都接受tcp_wrapper控制。只有用户在开发某个程序时,如果链接到这个库上,或者说依赖于这个库,就意味着他他是接受tcp_wrapper控制的。

三、使用tcp_wrapper控制

a).只需将受控制程序名写入配置文件即可实现控制:

允许访问:/etc/hosts.allow

拒绝访问:/etc/hosts.deny

b).控制原理

程序链接的库文件,会自动在用户访问服务时,基于tcpd检测

/etc/hosts.allow、/etc/hosts.deny两个配置文件,并判断某一主机是否能够访问服务。

c).匹配机制

1.先检查/etc/hosts.allow,如果被允许,则直接放行;

2.如果/etc/hosts.allow没有匹配项,则检查/etc/hosts.deny;如果有匹配项则禁止访问;

3.如果均无匹配,则默认放行。

d).配置文件语法格式

daemo_list:client_list [:options]

daemon_list:

一定是应用程序名,不是进程名;

如果有多个,则用逗号隔开;

如果匹配所有,则用ALL;

client_list:

IP地址:172.16.100.100

主机名称:www.linuxmi.com

网络地址/子网掩码:(子网掩码只能使用长格式)

简短格式:

如:172.16. 表示 172.16.0.0/255.255.0.0

[:options]

deny 使在hosts.allow中选项deny

allow 使在hosts.deny中选项allow

这样的机制可以让我们只需写一个配置文件就可以将所有配置搞定

例: vim /etc/hosts.allow

in.telnetd: ALL EXCEPT 172.16.251.105 :deny

spawn 发起执行一条命令,比如:如果有人访问访问服务器,别拒绝了,这通常是一种恶意访问,或非正常访问,就可以使用spawn echo一些命令保存至日志中

vim /etc/hosts.allow

in.telnetd: 172.16 EXCEPT 172.16.251.105

vim /etc/hosts.deny

in.telnetd: ALL : spawn echo `date` login attempt from %c to %s >> /var/log/tcp_wrapper.log

%c:user@host

%s:server@host

%h:客户端主机名

%p:服务器上的进程PID

获取完整帮助信息:man 5 hosts_access

注意:echo的信息无需加引号,否则命令替换不会进行

e).tcp_wrapper有几个内置的宏(Macro)

用于client_金沙js333娱乐场,list的有:ALL,NONE,UNKNOW(主机名无法解析的地址),

PARANOID(正反向解析不匹配的地址)

用于daemon_list的有:ALL

两者都可以都可以用:EXCEPT (排除)

例: vim /etc/hosts.allow

in.telnetd: 172.16. EXCEPT 172.16.251.105

f).事例

如果我们要定义仅放行某一网段,则定义/etc/hosts.allow放行网段,在/etc/hosts.deny定义拒绝所有主机。

演示控制:telnet

yum install telnet-server

ldd `which in.telnetd` 没有显示

ldd `which xinetd` 显示有,telnet自己本身不监听程序,而是由xinetd监听,所有它是接受tcp_wrapper控制的。

chkconfig telnet on

service xinetd start

ss -tnl | grep 23

仅放行172.16网段:

vim /etc/hosts.allow

in.telnetd: 172.16.

vim /etc/hosts.deny

in.telnetd: ALL

不用重启,立即生效,因为工作在内核中的,和iptables一样立即生效

总结:

tcp_wrapper确实非常简单而又易于配置。尤其是控制ftp服务时,强烈推荐,因为基于iptables的访问控制与tcp_wrapper相比,真的太复杂了。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-05/101085.htm

金沙js333娱乐场 3

本文由js333发布于计算机互联网,转载请注明出处:简单的基于主机的访问控制工具

关键词:

上一篇:0中使用JQuery的fancybox实现便签式留言板,js表情转

下一篇:游戏之路