TCP_Wrappers简介
转载自: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简介的更多相关文章
- TCP_Wrappers 简介
TCP_Wrappers 简介 TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接的特定服务进行安全检测并实现访问控制,凡是包含有libwrap.so库文件的的程序 ...
- TCP_Wrappers访问控制
一.TCP_Wrappers简介 对有状态连接的特定服务进行安全检测并实现访问控制,它以库文件形式实现,某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译的 ...
- 简介vsftpd及搭建配置
一.简介 FTP(文件传输协议)全称是:Very Secure FTP Server. Vsftpd是linux类操作系统上运行的ftp服务器软件. vsftp提供三种登陆方式:1.匿名登录 2 ...
- 简介vsftpd及搭建配置 关闭selinux 不能创建文件
简介vsftpd及搭建配置一.简介 FTP(文件传输协议)全称是:Very Secure FTP Server. Vsftpd是linux类操作系统上运行的ftp服务器软件. vsftp提供三种登陆方 ...
- AIDE,sudo,TCP_Wrappers,PAM认证等系统安全访问机制
AIDE 高级入侵检测环境:是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了. AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件.AIDE数 ...
- linux的安全--Selinux,tcp_wrappers,iptables使用
一.linux安全 安全主要是端口与服务的对应配置 1.1 linux安全主要通过下面三个进行加固 Selinux----主要是对内核的访问权限加以控制 tcp_wrappers---一定程度上限制某 ...
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
随机推荐
- 获取QQ状态接口开发示例
unit checkqqstatus; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Control ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-pause
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- Java For 循环
章节 Java 基础 Java 简介 Java 环境搭建 Java 基本语法 Java 注释 Java 变量 Java 数据类型 Java 字符串 Java 类型转换 Java 运算符 Java 字符 ...
- POJ2392:Space Elevator
Space Elevator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9244 Accepted: 4388 De ...
- JPA#ManyToMany
多对多,多个学生选了多个课程. 涉及到的注解(注解的使用看注释):ManyToManyJoinTableJsonIgnoreProperties @Entity @Table(name = " ...
- SQL语句对MySQL数据库的操作之对数据库层面的操作
一.数据库内部存储结构 字段->数据表->数据库->MySQL服务器 二.登录及退出数据库 mysql -h服务器地址 -u用户名 -p密码(这样的登录形式并不安全) mysql - ...
- 五、React事件方法(自写一个方法(函数),然后用按钮onClick触发它、自写方法改变this指向3种写法、
上接:https://www.cnblogs.com/chenxi188/p/11782349.html 项目目录: my-app/ README.md node_modules/ package.j ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 类 & 对象
C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计.类是 C++ 的核心特性,通常被称为用户定义的类型. 类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法.类中的 ...
- spring boot配置druid连接池连接mysql
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- spring监听器+定时任务
背景:在原SSM项目中,拟定在每晚的23:59:59执行一个批处理任务. 设计思路:用jdk自带的定时器触发任务执行,设置下次执行间隔为24小时.定时任务由spring的监听器去启动. jdk版本:1 ...