1.1 wrap简介

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

1.2 查看是否支持wrapper

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

[root@mail ~]# ldd $(which sshd) | grep wrap
libwrap.so. => /lib64/libwrap.so. (0x00007f110efb7000)
[root@mail ~]# ldd  $(which vsftpd) | grep wrap
libwrap.so. => /lib64/libwrap.so. (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控制。

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过滤的更多相关文章

  1. Linux和Shell回炉复习系列文章总目录

    本页内容都是本人回炉Linux时整理出来的.这些文章中,绝大多数命令类内容都是翻译.整理man或info文档总结出来的,所以相对都比较完整. 本人的写作方式.风格也可能会让朋友一看就恶心到直接右上角叉 ...

  2. PowerShell过滤文件中的重复内容

    Get-Content -Path E:\test11\data.txt | Sort-Object | Get-Unique 源文件: AA0001 2014-06-30 15:27:13.073 ...

  3. 使用Expression实现数据的任意字段过滤(1)

    在项目常常要和数据表格打交道. 现在BS的通常做法都是前端用一个js的Grid控件, 然后通过ajax的方式从后台加载数据, 然后将数据和Grid绑定. 数据往往不是一页可以显示完的, 所以要加分页: ...

  4. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

  5. 纯JS打造比QQ空间更强大的图片浏览器-支持拖拽、缩放、过滤、缩略图等

    在线演示地址(打开网页后,点击商家图册): http://www.sport7.cn/cc/jiangnan/football5.html 先看一看效果图: 该图片浏览器实现的功能如下: 1. 鼠标滚 ...

  6. .NET深入实战系列--EF到底怎么写过滤条件

    本文唯一访问地址:http://www.cnblogs.com/yubaolee/p/DynamicLinq.html 对于系统开发来说,按不同字段进行过滤查询是一种常见的需求.在EF中通常的做法是: ...

  7. 在ASP.NET MVC5中实现具有服务器端过滤、排序和分页的GridView

    背景 在前一篇文章<[初学者指南]在ASP.NET MVC 5中创建GridView>中,我们学习了如何在 ASP.NET MVC 中实现 GridView,类似于 ASP.NET web ...

  8. ABP框架 - 数据过滤

    文档目录 本节内容: 简介 预定义过滤 ISoftDelete 何时可用? IMustHaveTenant 何时可用? IMayHaveTenant 何时可用? 禁用过滤 关于using声明 关于多租 ...

  9. Entity Framework 6 Recipes 2nd Edition(11-2)译 -> 用”模型定义”函数过滤实体集

    11-2. 用”模型定义”函数过滤实体集 问题 想要创建一个”模型定义”函数来过滤一个实体集 解决方案 假设我们已有一个客户(Customer)和票据Invoice)模型,如Figure 11-2所示 ...

随机推荐

  1. java跨域问题

    public class SimpleCORSFilter implements Filter{ @Override public void destroy() { } @Override publi ...

  2. python循环解压rar文件

    python循环解压rar文件 C:. │ main.py │ ├─1_STL_算法简介 │ STL_算法简介.rar │ └─2_STL_算法_填充新值 STL_算法_填充新值.rar 事情是这样的 ...

  3. 【翻译】从头开始写一个时间序列数据库-Writing a Time Series Database from Scratch

    本文来自: https://fabxc.org/tsdb/, 如翻译有误,请纠正. 我是从事监控工作的.特别是Prometheus, 一个包含自定义的时间序列库以及集成Kuberntes的监控系统. ...

  4. 20145232韩文浩《网络对抗》PC平台逆向破解

    shellcode注入 1.Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcode,nop+shellcode+retaddr.我们采用anything+retaddr ...

  5. hive 函数 nvl()

    首先用desc function,查看hive给出的函数解释 nvl(value,default_value) - Returns default value if value is null els ...

  6. Linux 常用分区方式

    1 分两个区 主目录:/ 交换分区:swap 2 常用分区方式,以使用100G空间安装linux为例 引导分区: 挂载点/boot,分区格式ext4,500M以内即可 交换分区: 无挂载点,分区格式选 ...

  7. Redis-09.慢查询

    慢查询指的是redis命令的执行时间,不包括网络传输和排队时间. Redis配置文件redis.conf中描述慢查询相关的选项在SLOW LOG部分 ######################### ...

  8. 前端框架本质之探究——以Vue.js为例

    问:我们在使用Vue时,实际上干了什么?   答:实际上只干了一件事——new了一个Vue对象.后面的事,都交由这个对象自动去做.就好像按了下开关,机器跑起来了,剩下的事就不用我们再操心了.   各位 ...

  9. Akka-CQRS(0)- 基于akka-cluster的读写分离框架,构建gRPC移动应用后端架构

    上一篇我们讨论了akka-cluster的分片(sharding)技术.在提供的例子中感觉到akka这样的分布式系统工具特别适合支持大量的带有内置状态的,相对独立完整的程序在集群节点上分布运算.这里重 ...

  10. 跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!

    背景 用 Python 做过爬虫的小伙伴可能接触过 Scrapy,GitHub:https://github.com/scrapy/scrapy.Scrapy 的确是一个非常强大的爬虫框架,爬取效率高 ...