一、关于/etc/hosts.allow  /etc/hosts.deny

遇到一台服务器22端口正常,可是用SSH连接却有问题。

报错:ssh_exchange_identification: read: Connection reset by peer

排查了防火墙和端口,半天没发现问题,查询得知经过etc目录下hosts.deny和hosts.allow文件能够限制远程访问。

我们可以通过配置hosts.allow和hosts.deny来控制访问权限。

他们两个的关系为:/etc/hosts.allow 的设定优先于 /etc/hosts.deny

1. 当文件 /etc/hosts.allow 存在时,则先以此文件内之设定为准;

2. 而在 /etc/hosts.allow 没有规定到的事项,将在 /etc/hosts.deny 当中继续设定

也就是说, /etc/hosts.allow 设定优先是高于 /etc/hosts.deny 的,基本上,只要 hosts.allow 也就够了。

因为我们可以将allow 与 deny 都写在同一个文件中,只是这样一来似乎显得有点杂乱无章。

因此,通常我们都是:

1. 允许进入的写在 /etc/hosts.allow 当中;

2. 不许进入的则写在 /etc/hosts.deny 当中。

3 .一个IP请求连入,Linux的检查策略是先看/etc/hosts.allow中是否允许,如果允许直接放行;如果没有,则再看/etc/hosts.deny中是否禁止,如果禁止那么就禁止连入。

4 .实验发现对/etc/hosts.allow和/etc/hosts.deny的配置不用重启就立即生效,但不管重启不重启当前已有会话都不会受影响;也就是说对之前已经连入的,即便IP已配置为禁止登录会话仍不会强制断开。不过不知是否所有linux都一样,由此第四步标为可选。

5.网上发现有些教程写成不是sshd而是in.sshd不是in.telnetd而是telnetd的,个人觉得应该是独立启的不用加in.托管于xinetd的需要加in。

二、hosts.allow和hosts.deny支持哪些服务

hosts.allow和hosts.deny支持哪些服务

hosts.allow和hosts.deny规则的执行者为TCP wrappers,对应守护进程为tcpd,而tcpd执行依赖于程序使用了libwrap库。

也就是说:hosts.allow和hosts.deny支持且只支持使用了libwrap库的服务,一般这个是针对守护进程Daemon。

查看程序是否使用libwarp

方法一、查看hosts_access字段串

查看应用程序是否支持wrapper,可以使用strings程序然后grep字符串hosts_access:

#  strings  /usr/sbin/sshd |  grep hosts_access

方法二、使用ldd

#  ldd /usr/sbin/sshd | gre  libwrap

查测发现使用xinetd的都可以、sshd可以、vsftpd可以,httpd不可以,weblogic等java程序就不要想了。

理解 Linux 中的 /etc/services 文件

/etc/services 作用: /etc/services文件保存了服务和端口的对应关系。

但是通常服务的配置文件里会自行定义端口。那么两者间是什么关系呢?

事实上,服务最终采用的方案仍然是自己的端口定义配置文件。但是/etc/services的存在有几个意义:

1、如果每一个服务都能够严格遵循该机制,在此文件里标注自己所使用的端口信息,则主机上各服务间对端口的使用,将会非常清晰明了,易于管理。

2、在该文件中定义的服务名,可以作为配置文件中的参数使用。

例如:在配置路由策略时,使用"www"代替"80",即为调用了此文件中的条目“www  80”

3、且当有特殊情况,需要调整端口设置,只需要在/etc/services中修改www的定义,即可影响到服务。

例如:在文件中增加条目“privPort  55555”,在某个私有服务中多个配置文件里广泛应用,进行配置。

当有特殊需要,要将这些端口配置改为66666,则只需修改/etc/services文件中对应行即可。

基本上是个标准,但是不是强制的。

推荐的做法是在/etc/services里面加入新端口的定义或是使用已有的端口的定义,然后在监听的时候使用从/etc/servies里面得到的端口定义。这样和其他程序有没有冲突,一目了然,而且一旦需要调整和重新分配端口的时候也容易。

三、TCP Wrappers 语法以及选项规则

Wrappers 首先在 hosts.allow 文件中查找规则匹配。如果找到匹配,那么 tcpd 会根据规则停下来,批准或拒绝访问。

如果在 hosts.allow 文件中未找到匹配,那么 tcpd 会读取 hosts.deny 文件直到找到匹配。如果找到匹配,就拒绝访问,否则批准访问。

在前面提到了两个文件 hosts.allow 和 deny,但根据规则的灵活性,可以只用一个文件,通常是 hosts.allow 来包含 wrappers 所有规则。

Wrappers 会查询 hosts.allow 和 hosts.deny 中的规则来确定访问。

规则的基本格式是:

daemon, daemon, ...: client, client, ...: option

要关闭 wrappers,只需将 hosts.allow 和 hosts.deny 文件改成其他文件名即可。

如果不存在允许或拒绝访问文件,wrappers 将不会使用访问控制,从而有效关闭 wrappers 。

将主机文件清空或清零,会有同样的效果。

当一行有多个守护进程或客户端时,用逗号分隔开来。

可以用 ALL 关键字来表示所有守护进程或所有客户端。

LOCAL 关键字表示匹配所有不包含点号(“.”)的主机;这表示所有与域不相关的主机。

如果规则允许的话,在每个规则末尾都加上允许或拒绝选项,这是一个好的做法、好的习惯(因为这可以清晰地描绘访问规则,尤其是在 hosts.allow 中有多个允许或拒绝规则时)。

对 hosts.allow 和 hosts.deny 的更改是动态的。一旦文件保存,更改就会生效。

一个好的起点是,仅仅允许您想要访问主机的客户端使用允许的守护进程,拒绝其他所有客户端。

所以,hosts.deny 可以使用以下规则拒绝所有客户端访问所有守护进程:

ALL:ALL

本节的其他示例都是只与 hosts.allow 文件有关。为了能让所有守护进程从本地主机(即,与域名不相关的主机)访问,可以使用:

ALL:LOCAL : allow

就我个人而言,我不喜欢使用在任何主机上匹配的 LOCAL 模式,因为网络中所有主机应该属于您的或是某个域。

如果原来不是,那么应该是的。尽管如此,在一些小型网络的情况下,却不是这样,LOCAL 允许这些主机访问。

我们假设仅仅允许属于 mydomain.com 域的主机使用 telnet 或 ssh。以下的 hosts.allow 条目能完成此任务:

telnetd,sshd:.mydomain.com :allow

请注意本例中 mydomain.com 之前的点号(“.”)。这是个通配符,表示所有主机以 mydomain.com 结尾。

我们还在规则结尾指定这是一条允许规则。

尽管这不是严格限制,但如前所述,这样做是一种好的做法。

现在进一步假设我们允许使用以下 IP 地址远程登录 ssh 和 telnet:192.168.4.10 和所有以 192.168.6 开头的 IP 地址。

请再次注意,在部分 IP 地址后使用点号;这相当于 192.168.6.*.,或者更精确一点,以 192.168.6 开头的所有 IP 地址。

另一种看待 192.168.6. 范围内 IP 地址的方法是等于 192.168.6/24 或所有 192.168.6.1 与 192.168.6.254 之间的 IP 地址。

另外,我们还想允许使用 telnet 和 ssh 访问以下域:mydomain.com 和 mydomain2.com 域。

以下命令能完成此任务:

telnetd,sshd:.mydomain.com, .mydomain2.com :allow

telnetd,sshd:192.168.4.10,192.168.6.: allow

现在,我们假设允许从 mydomain.com 域中的所有主机上进行 ftp 访问,除了 mydomain.com 中的两个主机:uktrip1 和 uktrip2 。

通过使用允许规则,我们可以利用 except 选项提供两个列表,让 “except” 左侧的主机允许访问,“except” 右侧列表中包含的主机拒绝访问。

telnetd,sshd:.mydomain.com :allow

telnetd,sshd:192.168.4.10,192.168.6.: allow

ftpd:.mydomain.com except uktrip1.mydomain.com, uktrip2.mydomain.com : allow

我们现在看看拒绝规则。要拒绝 192.168.8. 和 192.168.9. 的 telnet 访问,但允许 192.168.6. 的 telnet 访问,我可以使用:

telnetd :192.168.8.,192.168.9.: deny

telnetd :192.168.6.: allow

前一个示例也可以用 except 选项来改写:

telnetd:192.168.6. except192.168.8.,192.168.9.: allow

Wrappers 会将消息记录到 /var/adm/messages 文件中。

消息文件中一个典型的名为 tardis 的被拒绝 telnent 连接会像这样:

Oct 23 15:50:55rs6000 auth|security|warning telnetd[270546]: refused connect from tardis

一个典型的名为 tardis 的失败的 ssh 连接像这样:

Oct 23 15:53:36rs6000 auth|security:infosshd[262252]: refused connect from tardis

如果打开 PARANOID,那么 wrappers 会通知您所有无法解析的主机与 IP 不匹配情况:

error ftpd[2605110]: warning:/etc/hosts.allow, line2: host name/address mismatch: 192.168.7.12!= uktrn004.mydomain.com

有时候能看到哪些主机 DNS 条目不正确也是好事,这样可以被负责 DNS 维护的人员纠正过来。

在公司内部网络尤其如此,与拒绝不匹配主机/IP 不同的是,只允许域用户进入(假设这是在安全的公司网络中)。

在以下示例中,所有属于 mydomain.com 域的用户都允许访问,请注意对所有守护进程都使用了 ALL:

ALL:PARANOID, mydomain:allow

(1)/etc/hosts.all & /etc/hosts.deny修改立即生效,对已经打开的SSH连接无效

(2)",",分隔多个IP或IP段

(3)all大小写都可以

(4)2.2.,2.2.2.2/29,2.2.2.*都可以匹配网段

四、参考

TCP Wrappers

http://shouce.jb51.net/vbird-linux-server-3/59.html

CentOS 7配置hosts.allow和hosts.deny文件

https://v2ex.cc/archives/327/

hosts.allow/howts.deny书写规则

https://blog.51cto.com/jschu/1694549

理解 Linux 中的 /etc/services 文件

https://zhuanlan.zhihu.com/p/55299614

HOWTO - Limiting Access to TCP-wrapped Services with hosts.allow

https://static.closedsrc.org/articles/dn-articles/hosts_allow.html

解决ssh_exchange_identification:read connection reset by peer

https://www.cnblogs.com/web-chuanfa/p/10265798.html

通过配置hosts.allow和hosts.deny文件允许或禁止ssh或telnet操作

https://www.cnblogs.com/lsdb/p/7095288.html

hosts.allow(5) - Linux man page

https://linux.die.net/man/5/hosts.allow

使用hosts.allow和hosts.deny实现简单的防火墙

https://www.cnblogs.com/EasonJim/p/8338931.html

第九章、防火墙与 NAT 服务器

http://cn.linux.vbird.org/linux_server/0250simple_firewall_2.php

限制連接上您 Linux 主機的電腦網域

http://linux.vbird.org/linux_security/old/04_2remove_services.php

第十七章、認識系統服務 (daemons)

http://linux.vbird.org/linux_basic/0560daemons.php#etc_services

【TCP wrappers】关于/etc/hosts.allow /etc/hosts.deny相关推荐

  1. 王高利:TCP Wrappers访问控制(hosts.allow,hosts.deny)

    TCP Wrappers访问控制 在Linux系统中,许多网络服务针对客户机提供了某种访问控制机制,如Samba.BIND.HTTPD.OpenSSH等,而TCP Wrappers(TCP封套),以作 ...

  2. iptables tcp wrappers

    1.TCP Wrappers 1.1 tcp wrappers概述 tcp wrappers为由xinetd这支superdaemon管理的服务提供了安全性.由xinetd super daemon管 ...

  3. Linux远程访问及控制(SSH、TCP Wrappers 访问控制)

    Linux远程访问及控制 一.SSH远程管理 1.SSH定义 2.SSH数据传输优点 3.SSH客户端和服务端 二.OpenSSH 1.配置OpenSSH 服务端配置 2.scp远程复制 3.sftp ...

  4. 远程访问及控制(详解)——SSH远程管理及TCP Wrappers 访问控制

    远程访问及控制(详解)--SSH远程管理及TCP Wrappers 访问控制 一.SSH远程管理 1.定义 2.优点 3.客户端与服务端 4.SSH服务的开启.端口号和配置文件 二.配置 OpenSS ...

  5. 一周肝出Linux之远程服务详解(ssh远程登录、scp远程复制、sftp安全下载、TCP Wrappers访问控制)

    目录 一:理论 1:ssh概要 2:ssh协议与端口号 二:实验 实验环境 ssh用户登录控制 1:不允许对方远程root账户登录 2:禁止跳板登录 测试最大密码重试次数 设置黑白名单 远程配对密钥验 ...

  6. SSH远程访问与TCP Wrappers 访问控制(基础概述及配置操作)

    SSH远程访问及控制 OpenSSH服务器 基础概述 Windows远程桌面连接 配置OpenSSH 服务端 sshd_config配置文件的常用选项设置 使用SSH客户端程序进行黑白名单登录测试 使 ...

  7. centos 7.6 ——远程访问及控制——(ssh密钥登录、ssh客户端、TCP Wrappers)

    远程访问及控制 文章目录 远程访问及控制 一.ssh基本配置 1. 允许root登录 2. 禁止root远程登录 **注意 3. DenyUsers 黑名单的使用 4. AllowUsers 白名单使 ...

  8. Linux--远程访问及控制(SSH+TCP Wrappers配置各种机制验证)

    文章目录 前言 一.SSH远程管理 1.1配置Open SSH服务端 1.1OpenSSH服务器 1.2SSH各功能验证 1. 3scp命令-远程安全复制 1.4sftp命令-安全ftp上下载 二.T ...

  9. TCP Wrappers

    ​​​​​​​TCP Wrappers简介 TCP_Wrappers是一个工作在笫四层(传轮层)的的安全工具. 对有状态连接 (TCP) 的特定服务进行安全检测井实现访问控制. 界定方式是凡是调用 l ...

最新文章

  1. List嵌套List数据,全部List数组一起更新问题
  2. R语言plot函数可视化、ggplot2可视化把图像标题(title)的部分内容着色实战:标题的部分内容配置不同的色彩、副标题(subtitle)的内容配置不同的色彩
  3. Linux文本处理必杀技之awk应用详解
  4. python错误-Python错误和异常(error)处理技巧
  5. Fastjson批量检查及一键利用工具
  6. python selenium自动化测试面试题_selenium 自动化测试面试题及答案
  7. 认识什么是运维中的CI/CD---持续集成交付工作笔记001
  8. 史上最佳GAN被超越!生成人脸动物高清大图真假难辨,DeepMind发布二代VQ-VAE
  9. linux下启动tomcat出现“This file is needed to run this program ”
  10. Three.js贴图效果一览
  11. 物联网“智能水表”产品简要分析——从人民日报官微推送的NB-IoT应用谈起
  12. windows下使用XShell上传文件至服务器
  13. 太阳方位角 matlab,太阳天顶角与太阳方位角计算软件V4.1及源码
  14. RuntimeError: mat1 and mat2 shapes cannot be multiplied (1024x1 and 1024x3)
  15. 十一大排序算法的实现
  16. 如何把很多照片拼成一张照片_怎样用手机将多张照片拼成一张组合图?
  17. harmonyos1.0.1,华为正式发布鸿蒙系统HarmonyOS 1.0
  18. 1300:鸡蛋的硬度
  19. 记一次系统重装后电脑的优化设置
  20. 不应将商业行为政治化!

热门文章

  1. 工作中的高效工具推荐,职场人士必备便签小工具
  2. C语言程序——关系运算符的应用
  3. python爬取携程网旅游_爬虫之携程网旅游信息爬取
  4. [USA]办理美国签证,被Check
  5. 【转载】linux top命令及参数详解
  6. FileReader和FileWrite介绍
  7. VS2010 调试C++项目 fatal error LNK1123 错误解决办法
  8. tesseract 安装及使用
  9. Synaptics FP Sensors(WBF)(PID=0011)无法录入Windows Hello问题记录
  10. Windows XP 下安装SQL SERVER 2005问题汇总