【转】TCP

    xiaoxiao2022-06-24  170

     

    TCP_Wrappers 简介

     https://www.cnblogs.com/duzhaoqi/p/7607801.html

    简介

    TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接的特定服务进行安全检测并实现访问控制,凡是包含有libwrap.so库文件的的程序就可以受TCP_Wrappers的安全控制。它的主要功能就是控制谁可以访问,常见的程序有rpcbind、vsftpd、sshd,telnet。

     

    工作原理

    TCP_Wrappers有一个TCP的守护进程叫作tcpd。以ssh为例,每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给真正的ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。

     

    TCP_Wrappers的使用

    TCP_Wrappers的使用主要是依靠两个配置文件/etc/hosts.allow, /etc/hosts.deny,用于拒绝和接受具有TCP_Wrappers控制全的程序,详细信息具体可以查看man帮助,这里我们就做简单的演示和使用(man 5 hosts_access, man 5 hosts_options)

    要说明的是当我们启动一个受控制的软件的时候,比如ssh,

    不过在刚开始的时候,/etc/hosts.allow,/etc/hosts.deny什么都没有添加,此时没有限制,是都可以连接的,现在我们来说如何设置,禁止和允许连接,配置文件格式遵循如下规则:

    daemon_list@host: client_list [:options :option…]

    daemon_list: 是程序的列表,可以是多个,是多个时,使用,隔开  @host:可以没有,是我们的限制的网卡访问接口(自己的),设置允许或禁止他人从自己的那个网口进入。这一项不写,就代表全部。  client_list:是访问者的地址,如果需要控制的用户较多,可以使用空格或,隔开,格式如下:

    基于IP地址: 192.168.10.1 192.168.1.基于主机名: www.magedu.com .magedu.com 较少用基于网络/掩码: 192.168.0.0/255.255.255.0基于net/prefixlen: 192.168.1.0/24(CentOS7)基于网络组(NIS 域): @mynetwork内置ACL: ALL, LOCAL, KNOWN, UNKNOWN,PARANOID  ALL:所有主机  LOCAL:本地主机  KNOWN:主机名可解析成ip的  UNKNOWN:主机名无法解析成IP的  PARANOID:正向解析与反向解析不对应的主机

     

    我以三台虚拟机作为示例:  centOS 7:192.168.111.120  centOS 6:192.168.111.110  centOS 5:192.168.111.130

    示例1:  现在,我的centOS 6想拒绝centOS 7 的ssh访问:  我在hosts.deny中写:

    sshd@192.168.111.110:192.168.111.120

    然后我使用centOS 7 连接,就无法连接:

    [root@CT73 ~]$ssh 192.168.111.110 ssh_exchange_identification: read:Connection reset by peer

    示例2:  或者我们还可以这样写(hosts.deny):

    in.telnetd,sshd: ALL

    这就意味着我们使用ssh,或者telnetd访问这个机器都是无法访问的,然后,我们就在hosts.allow中添加如下一行:

    sshd:192.168.111.120

    出现了下面的效果:

    [root@CT73 ~]$ssh 192.168.111.110 root@192.168.111.110's password: Last login: Thu Sep 28 14:51:57 2017 from 192.168.111.120 [root@CT691 ~]#

    我们就可以连接了,我们想要访问其他主机的资源,在连接过程中,对方的机器会按照顺序先检查/etc/hosts.allow,再检查/etc/hosts.deny。如果在allow中允许连接,就可以连接的上,即便是又在deny中添加了限制也没效果,但是在allow中没有添加你的机器,但是在deny中设置了你的主机无法连接,那你是无法连接上对方的主机的。

    示例3:  我们还可以禁止后允许某个网段进行连接,以禁止为例:

    in.telnetd,sshd@192.168.111.110:192.168.37.

    这样的话192.168.37.网段的所有机器都无法通过这连个程序访问到我的机器。

    示例4:  现在,我们使用一个关联词,EXCEPT,host.deny文件配置如下:

    in.telnetd,sshd: ALL

    hosts.allow文件配置如下:

    sshd:192.168.111. EXCEPT 192.168.111.120

    此时,centOS 7 能否访问centOS 6呢:

    [root@CT73 ~]$ssh 192.168.111.110 ssh_exchange_identification: read:Connection reset by peer

    实验证明,我们是无法连接的,这是由于,虽然我们在hosts.allow文件中设置了整个192.168.111.这个网段都可以访问,但是使用EXCEPT关键字将192.168.111.120排除, 所以我们还是不能连接。  然后,我们重写一下hosts.allow文件:

    sshd:192.168.111. EXCEPT 192.168.111.

    然后,我们使用centOS 5和centOS 7连接:

    [root@CT511 ~]#ssh 192.168.111.110 ssh_exchange_identification:Connection closed by remote host [root@CT73 ~]#ssh 192.168.111.110 ssh_exchange_identification:Connection closed by remote host

     

    一些选项

    上面还有 [ :options :option… ]选项,我们我们看看他们是咋用的  (更多使用方法查看 man 5 hosts_options)

    deny 主要用在/etc/hosts.allow定义“拒绝”规则  如: vsftpd: 172.16. :denyallow 主要用在/etc/hosts.deny定义“允许” 规则  如: vsftpd:172.16. :allowspawn 启动一个外部程序完成执行的操作twist 实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O和ERROR发送到客户端,默认至/dev/null

    示例1:  在hosts.allow拒绝连接:

    sshd:192.168.111.120:deny

    这样,虽然我们虽然在allow文件中添加可用规则,但是我们使用了:deny,生生的还是将该地址给拒绝了:

    [root@CT73 ~]$ssh 192.168.111.110 ssh_exchange_identification: read:Connection reset by peer

    实例2:  在hosts.deny拒绝连接:

    sshd:192.168.111.120:allow

    这样,虽然我们虽然在deny文件中添加不可用规则,但是我们使用了:allow,依旧允许该IP连接:

    [root@CT73 ~]$ssh 192.168.111.110 root@192.168.111.110's password: Last login: Thu Sep 28 15:44:27 2017 from 192.168.111.130 [root@CT691 ~]#

    实例3:  我们可以使用spawn启用外部命令,那么我们就能使用外部命令写日志文件:  在hosts.allow中:

    sshd,in.telnetd:192.168.111.:spawn echo "`date +'%%F %%T'` login from client\: %c to %d">>/var/log/tcpwrap.log

    我们在使用centOS 7 访问后,看一下日志:

    [root@CT691 ~]#tail /var/log/tcpwrap.log 2017-09-2816:27:28 login from client:192.168.111.120 to sshd

    在/etc/hosts.allow中添加,允许登录,并记录日志  在/etc/hosts.deny中添加,拒绝登录, 并记录日志  %c 客户端信息  %s 服务器端信息  %d 服务名  %p 守护进程的PID  %% 代表%  : 符号转译

    实例4:  我们可以使用twist拒绝用户访问,并返回一个信息:

    sshd,in.telnetd:192.168.111.:twist echo "Hello I am T_T !"

    然后我们进行连接,使用调试模式,因为默认ssh是看不到返回信息的,telnet可以: 

     

    最后我们再说一个调试工具:  tcpdmatch  [-d]  daemon[@host]  client  -d 测试当前目录下的 hosts.allow和hosts.deny

    这样,在别人没有连接的时候,我们就可以知道我们设置的那些IP是否可以连接我们的主机: (hosts.deny)

    sshd:192.168.111.120

     

    [root@CT691 ~]#tcpdmatch -d ssh 192.168.111.120 client: address 192.168.111.120 server: process ssh access: granted

    转载请标明出处:http://www.cnblogs.com/duzhaoqi/


    最新回复(0)