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"

最新文章

  1. C#枚举类型
  2. sell -- 解码16进制unicode
  3. Java-马士兵设计模式学习笔记-命令模式
  4. c# 使用hook来监控鼠标键盘事件的示例代码
  5. win8连接蓝牙听歌
  6. PHP 文字,图片水印,缩略图,裁切成小图(大小变小)
  7. Docker集群实验环境布署--swarm【3 注册服务监控与自动发现组件--consul】
  8. Openlayers 3 图层探查功能
  9. 【HighCharts系列教程】九、语言属性——Lang
  10. USB_4大描述符
  11. linux操作命令,批量注释#方法
  12. 爬虫处理网站的bug---小于号未转化为实体符
  13. pytest九:使用自定义标记 mark
  14. eclipse,import,导入项目显示红色叹号
  15. .Net实现Windows服务安装完成后自动启动的两种方法
  16. 20155217《网络对抗》Exp09 Web安全基础实践
  17. Luogu P1983 车站分级
  18. 设置文字小于12px
  19. Java如何显示不同格式的日期?
  20. 查看linux服务器状态常用命令

热门文章

  1. mybatis注解SQL
  2. tarjan算法总结
  3. 冒泡排序 cpp实现
  4. 一窍懂PID
  5. C#关于xml文件和TreeView之间的转换解析
  6. Gson centos日期转换失败
  7. 在windows上安装wamp时遇到apache无法启动,图标为橙色
  8. 双十一福利,阿里云1核2G一年最低只要99
  9. Android精通之Handler讲解
  10. java实操之使用jcraft进行sftp上传下载文件