Linux中TCP wrapper的使用

 Linux中TCP wrapper的使用

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

服务监听的两种方式:vim

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

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

 

 

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

1.经过查找库文件看是否有libwrap网络

ldd `which command`app

2.查看是否链接到/etc/hosts.allow|denyssh

strings `which command`                   # 查看静态连接库socket

         若是有/etc/hosts.allowtcp

                              /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的访问

  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登录

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

效果:


将/etc/hosts.deny 里面的ALL: ALL去掉就能够恢复登录



1、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等,对攻击这有很大的参考价值,不过,必定要记得清除日志了。
 
2、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登陆
相关文章
相关标签/搜索