文档章节

hosts.allow, hosts.deny 文件的格式 具体请查询`man 5 host

永福
 永福
发布于 2015/07/31 13:57
字数 2900
阅读 411
收藏 4

hosts.allow, hosts.deny 文件的格式

具体请查询man 5 hosts_access

访问控制文件

访问控制软件查询两个文件,在遇到第一个匹配的时候停止匹配:

  • 当(daemon,client)匹配/etc/hosts.allow文件的一个规则后,访问被允许。
  • 否则,当(daemon,client)匹配到/etc/hosts.deny文件的一个规则后,访问被拒绝。
  • 当两个规则都不匹配时,访问被允许。

访问控制规则

访问控制文件中的条目按顺序进行处理,当查询到一个匹配时则结束查找。

  • 可以使用'\'对规则进行换行

  • 空行和以'#'开头的行将被忽略。

  • 所有其他的行需要满足如下的规则,[] 表示非必须

    daemon_list:client_list[:shell_command]

    daemon_list 是一个或多个daemon程序名称(argv[0]的值)或者通配符 client_list 是一个或多个主机名、主机地址、规则或者通配符等可以匹配客户端主机名或地址

    更复杂的形式如:daemon@hosts 和 user@host 将单独在服务端模式和客户用户名查找章节中解说。

    元素列表要用空格或者逗号分隔。

    除NIS(YP)网络组查找外,所有访问控制检查不区分大小写。

模式

  • 以'.'开始的字符串。当主机名的最后部分与规则相匹配,则匹配成功。如:模式为'.tue.nl'的规则将匹配主机名'wez.win.tue.nl'
  • 以'.'结束的字符串。当一个主机地址的开始部分与规则匹配,则匹配成功。如:模式'131.155.'将匹配所有的'131.155.x.x'的ip。
  • 以'@'开始的字符串。将被当做一个NIS(YP)网络组名。当主机名属于这个特定的网络组时则匹配。网络组匹配不支持daemon进程名和客户端用户名。
  • 表达式'n.n.n.n/m.m.m.m'将被解释为一个'net/mask'对。将匹配这个网络段的所有ipv4的ip地址,如:'131.155.72.0/255.255.254.0'将匹配所有从'131.155.72.0'到'131.155.73.255'的ip地址
  • 表达式'[n:n:n:n:n:n:n:n]/m'将被解释为一个'[net]/prefixlen'对。将匹配这个网络段的所有ipv6的ip地址,如:'[3ffe:505:2:1::]/64'将匹配所有从'3ffe:505:2:1::到3ffe:505.2:1:ffff:ffff:ffff:ffff'的ip地址。
  • 以'/'开头的字符串将被当做一个文件名。主机名或ip地址将于文件中的行进行匹配。文件中的内容可以为0行或多行,每行可以有0个或多个主机名或地址规则,以空格分隔。
  • 通配符'*'和'?'可以用于匹配主机名和ip地址。这个规则不能和前面的规则混合使用。

通配符

访问控制语言明确支持的通配符:

  • ALL 通用通配符,始终匹配
  • LOCAL 匹配任何不包含点的主机
  • UNKOWN 匹配任何未知的主机名/用户名/IP地址。这个规则应该被小心使用:主机名可能被暂时的不可解析。网络可能也暂时无法识别一个网络地址。
  • KOWN 匹配所有已知的用户名/主机名/IP地址。这个规则应该被小心使用:主机名可能被暂时的不可解析。网络可能也暂时无法识别一个网络地址。
  • PARANOID 匹配所有主机名和ip地址不匹配的客户端。当tcpd以 -DPARANOID 构建时,他将丢弃所有的不匹配的请求。

操作符 EXCEPT

使用方法为:'list_1 EXCEPT list_2'。此结构将匹配所有匹配list_1但是不在匹配list_2中的项。EXCEPT操作符可用于daemon_list和client_list中。EXCEPT操作符可以被嵌套:因访问控制语言不支持括号语法,所以'a EXCEPT (b EXCEPT c)'应该写成'a EXCEPT b EXCEPT c'.

shell 命令

如果第一个匹配到的访问控制规则包含有shell命令,这个命令将受制于%<字母>的替换(见下一章节)。结果将生成一个/bin/sh的子进程,标准输入和标准输入及错误输出都将链接到/dev/null。在命令结尾设置一个'&',将在后台运行。

注意:这些shell命令应该不依赖于PATH的设定。应该使用全路径或者明确执行 PATH=你的环境变量

扩展

  • %a(%A) 客户端(服务端)主机名
  • %c 客户信息:user@host, user@address, 主机名,ip地址,依赖于能获取到多少信息。
  • %d daemon进程名(argv[0]值)
  • %h(%H) 客户端(服务端)主机名,当主机名不可用时,ip地址
  • %n(%N) 客户端(服务端)的主机名(或者"unkown"或"paranoid")
  • %p daemon的进程号
  • %s 服务器信息:daemon@host, daemon@address, 或者仅仅daemon名,依赖于能获取到多少信息。
  • %u 客户的用户名(或者"unkown")
  • %% 输出一个"%"字符

服务端模式

为了分辨客户端所连接的服务,使用如下的模式:

process_name@host_parttern : client_list ...

这个模式可用于机器拥有多个网络地址和不同的网络主机名。服务提供商可以使用这个设施提供FTP, GOPHER和www服务,这些服务可能属于不同的组织。 当主机名和ip地址在client_list段中时,host_parttern遵从同样的语法规则。通常服务端信息仅仅适用于连接导向的服务。

客户端用户名查找

当客户主机支持RFC931协议或者其衍生协议(TAP, IDENT, RFC1413), 包装程序可以获取这个连接的属主的附加信息。当可用时,客户端用户名信息是和客户端的主机名一起被记录的。可以用如下规则匹配:

    daemon_list : ... user_pattern@host_parttern ...

这个守护包装程序可以在编译时配置用户名查找模式,或者是在开启客户端主机的查询模式。第一种情况,上面的规则将会在满足daemon_list和host_parttern匹配时使用用户名查找。

一个用户模式和daemon进程模式是一样的语法,拥有同样的通配符(网络组属组不支持)。虽然如此,我们应该尽量慎用用户名查找。

  • 客户端用户名信息不是可信的。
  • 用户名查找可能仅在基于tcp的服务,并且客户端主机运行了相适应的daemon程序才有用。其他情况下都会返回"unkown".
  • 一个很著名的unix内核bug可能使在用户名查找被防火墙阻挡时导致服务失效。这个包装程序的README文件描述了查看你的内核是否有这个bug的方法。
  • 用户名查找可能导致非unix用户信息延迟。默认的超时时间是10秒:对于慢速网络来说,太短了。但这个时间足以激怒pc用户。

如下的用户名查找可以缓解最后一个问题:

daemon_list : @pcnetgroup ALL@ALL

将会匹配所有的pc网络组的用户使其不做用户名查找,而在所有的其他系统上使用用户名查找。

侦测地址洪水攻击

在TCP/IP实现中序号生成器的一个缺陷是允许攻击者轻易地假冒被信任的主机从而侵入系统,比如远程shell服务。IDENT(RFC931等)服务可以用于侦测这样或那样的主机地址洪水攻击。

在接收一个客户请求时,包装程序可以使用IDENT服务找出那些客户端根本没有发的请求。当客户端提供了IDENT服务,一个负的IDENT查找结果(客户端匹配了'UNKNOWN@host')将会明显的证据表明一个洪水攻击。

一个正的IDENT查找结果是不可信的。很有可能攻击者伪装了客户端连接和IDENT查找,虽然这比仅仅伪造客户端连接难。也有可能客户端的IDENT服务在撒谎。

注意:IDENT查找对UDP服务不启作用。

例子

这里的访问控制语言非常灵活,可以轻易的写出各种类型的访问控制规则。虽然使用了两个访问控制表,在大多数情况下,可以让一个表很小甚至为空。

重要的是,允许表在拒绝表之前被扫描,当一个查询匹配时将结束查找,没有规则匹配时将被允许访问。

这些规则可以使用主机名或域名。他们可以被改进为使用ip地址或网络/掩码信息,从而减少临时的名称服务查找失败。

绝大多数关闭

在此情形下,默认禁止访问,仅允许被认证的主机访问。

/etc/hosts.deny:
    ALL: ALL

这将禁止任何主机访问这台机器的任何服务,匹配允许文件中的条目的访问除外。

明确认证的主机在允许文件中列出。例如:

/etc/hosts.allow:
    ALL: LOCAL @some_netgroup
    ALL: .foobar.edu EXCEPT terminalserver.foobar.edu

第一条规则允许本地主机和网络组some_netgroup的成员访问。第二个规则允许所有foobar.edu(注意开头的点'.')域名下的除了terminalserver.foobar.edu外的域名访问。

绝大多数开放

这里默认允许全部访问,仅拒绝明确指出的主机和服务。 默认的规则是允许访问的,所以重复,可被忽略。在拒绝文件中明确指出非授权用户。例如:

/etc/hosts.deny
    ALL: some.host.name, .some.domain
    ALL EXCEPT in.fingerd: other.host.name, .other.domain

第一条规则拒绝部分主机及some.domain域下的所有主机和服务。第二条规则仅允许other.host.name和other.domain域下的指纹请求(finger requests)。

一些陷阱

下面这个列子允许本地主机的tftp请求,其他主机的请求将被拒绝。对于被拒绝的主机,任何请求指纹探测的都将发送一封邮件给超级用户,而不是返回请求的文件。

/etc/hosts.allow:
    in.tftp: LOCAL, .my.domain

/etc/hosts.deny:
    in.tfptd: ALL: spawn(/some/where/safe_finger -l @%h | /usr/ucb/mail -s %d-%h root) &

safe_finger命令是来自tcpd包装程序,应该被安装在一个合适的地方。她可能会损坏远程指纹服务器传送的数据。她相对于标准的指纹命令提供更好的保护。

%h(客户主机)和%d(服务名)等的扩展在shell_command章节已经说明。

警告:不要让你的指纹守护进程进入陷阱,除非你准备让指纹命令无限执行。

在网络防火墙系统中,这个小设计可以被更加好的利用。经典的网络防火墙仅提供对外部世界开放有限的服务。所有其他的服务将像上面的tftp的例子被"陷阱"。产生的结果是一个非常优秀的预警系统。

诊断

在主机访问控制规则中遇到一个语法错误时;访问规则的长度超过内部缓存时;访问规则不是以新行结尾时;当%<字母>扩展超过内部缓存时;当发生一个不应存在的系统调用失败时。所有的错误都将通过syslog守护进程进行汇报。

文件

/etc/hosts.allow, (daemon, client)对将允许访问。 /etc/hosts.deny, (daemon, client)对将拒绝访问。

作者

Wietse Venema (wietse@wzv.win.tue.nl) Department of Mathematics and Computing Science Eindhoven University of Technology Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands

译者

廖永福 rickie622 at gmail dot com

© 著作权归作者所有

永福

永福

粉丝 32
博文 21
码字总数 24181
作品 0
长沙
技术主管
私信 提问
Linux服务器安全登录设置记录

在日常运维工作中,对加固服务器的安全设置是一个机器重要的环境。比较推荐的做法是: 1)严格限制ssh登陆(参考:Linux系统下的ssh使用(依据个人经验总结)): 修改ssh默认监听端口 禁用roo...

吞吞吐吐的
2017/09/13
0
0
通过host.allow和hosts.deny限制特定IP来ssh登陆服务器

通过host.allow和hosts.deny限制特定IP来ssh登陆服务器 [root@cacti vhost]# cat /etc/hosts.allow hosts.allow This file contains access rules which are used to allow or deny connect......

wjw555
2018/01/01
0
0
Linux中TCP wrapper的使用

tcpwrapper的目的是对那些访问控制功功能要想了解访问控制就必须先知道服务监听的概念:服务监听的两种方式:listen : socket 监听在套接字上提供服务 有两种方式来判断一个服务是否支持tcp...

chenzudao
2017/12/12
0
0
[网络相关]/etc/host.conf & /etc/hosts/ & /etc/resolv.conf等等

买了本自己一直期望的书《Linux系统架构与目录解析》,其实想要这样一本书很久了。虽然不是一个sa,但是也想对linux做到应用方面的熟练,而对linux整体把握,甚至细到有哪些目录,哪些文件,...

长平狐
2012/11/01
1K
0
利用tcp_wrappers 保护服务安全

网络并不比大多数操作系统更安全。虽然没有任何系统能保证100%安全,但一些安全措施可以增强系统的安全性,网络也是如此。当设计安全措施时,你需要从影响安全的两个方面考虑:用户的意外操作...

红烧土豆
2013/04/03
68
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL左连接问题,右表做筛选,左表列依然在

两张表,一张user表,一张user_log表 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFA......

bengozhong
10分钟前
2
0
重新开始学Java——多线程基础

多线程 进程 主流计算机操作系统都支持同时运行多个任务 , 每个任务通常就是一个程序 , 每个运行中的程序就是一个进程或者多个进程 。 进程的特点 独立性 进程是系统中独立存在的实体 可以...

大家都是低调来的
11分钟前
1
0
注解在Java中是如何工作的?

> 来一点咖啡,准备好进入注解的世界。 注解一直是 Java 的一个非常重要的部分,它从 J2SE 5.0 开始就已经存在了。在我们的应用程序代码中,经常看到 @Override 和 @Deprecated 这样的注解。...

liululee
13分钟前
3
0
Docker 容器连接

Docker 容器连接 容器间的链接有两种方法,你选择其一即可 网络端口映射 docker run -d -P docker run -d -p-P :是容器内部端口随机映射到主机的高端口。-p : 是容器内部端口绑定到指定...

测者陈磊
16分钟前
3
0
车载导航应用中基于Sketch UI主题定制方案的实现

1.导读 关于应用的主题定制,相信大家或多或少都有接触,基本上,实现思路可以分为两类: 内置主题(应用内自定义style) 外部加载方式(资源apk形式、压缩资源、插件等) 其实,针对不同的主题...

阿里云官方博客
21分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部