转载自:http://www.cnblogs.com/duzhaoqi/

TCP_Wrappers

 


 

简介

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. :deny
  • allow 主要用在/etc/hosts.deny定义“允许” 规则
    如: vsftpd:172.16. :allow
  • spawn 启动一个外部程序完成执行的操作
  • 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

TCP_Wrappers简介的更多相关文章

  1. TCP_Wrappers 简介

    TCP_Wrappers     简介 TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接的特定服务进行安全检测并实现访问控制,凡是包含有libwrap.so库文件的的程序 ...

  2. TCP_Wrappers访问控制

    一.TCP_Wrappers简介 对有状态连接的特定服务进行安全检测并实现访问控制,它以库文件形式实现,某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译的 ...

  3. 简介vsftpd及搭建配置

    一.简介 FTP(文件传输协议)全称是:Very Secure FTP Server.   Vsftpd是linux类操作系统上运行的ftp服务器软件. vsftp提供三种登陆方式:1.匿名登录  2 ...

  4. 简介vsftpd及搭建配置 关闭selinux 不能创建文件

    简介vsftpd及搭建配置一.简介 FTP(文件传输协议)全称是:Very Secure FTP Server. Vsftpd是linux类操作系统上运行的ftp服务器软件. vsftp提供三种登陆方 ...

  5. AIDE,sudo,TCP_Wrappers,PAM认证等系统安全访问机制

    AIDE 高级入侵检测环境:是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了. AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件.AIDE数 ...

  6. linux的安全--Selinux,tcp_wrappers,iptables使用

    一.linux安全 安全主要是端口与服务的对应配置 1.1 linux安全主要通过下面三个进行加固 Selinux----主要是对内核的访问权限加以控制 tcp_wrappers---一定程度上限制某 ...

  7. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  8. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  9. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

随机推荐

  1. 获取QQ状态接口开发示例

    unit checkqqstatus; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Control ...

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-pause

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  3. Java For 循环

    章节 Java 基础 Java 简介 Java 环境搭建 Java 基本语法 Java 注释 Java 变量 Java 数据类型 Java 字符串 Java 类型转换 Java 运算符 Java 字符 ...

  4. POJ2392:Space Elevator

    Space Elevator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9244   Accepted: 4388 De ...

  5. JPA#ManyToMany

    多对多,多个学生选了多个课程. 涉及到的注解(注解的使用看注释):ManyToManyJoinTableJsonIgnoreProperties @Entity @Table(name = " ...

  6. SQL语句对MySQL数据库的操作之对数据库层面的操作

    一.数据库内部存储结构 字段->数据表->数据库->MySQL服务器 二.登录及退出数据库 mysql -h服务器地址 -u用户名 -p密码(这样的登录形式并不安全) mysql - ...

  7. 五、React事件方法(自写一个方法(函数),然后用按钮onClick触发它、自写方法改变this指向3种写法、

    上接:https://www.cnblogs.com/chenxi188/p/11782349.html 项目目录: my-app/ README.md node_modules/ package.j ...

  8. 吴裕雄--天生自然C++语言学习笔记:C++ 类 & 对象

    C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计.类是 C++ 的核心特性,通常被称为用户定义的类型. 类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法.类中的 ...

  9. spring boot配置druid连接池连接mysql

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  10. spring监听器+定时任务

    背景:在原SSM项目中,拟定在每晚的23:59:59执行一个批处理任务. 设计思路:用jdk自带的定时器触发任务执行,设置下次执行间隔为24小时.定时任务由spring的监听器去启动. jdk版本:1 ...