专栏首页DBA随笔SSH之hosts.allow和hosts.deny文件

SSH之hosts.allow和hosts.deny文件

SSH之规则配置

1一个线上问题引发的思考

今天中午在搭建MHA的测试环境的时候,出现了一个问题,简单记录如下:

环境介绍:

主库IP:192.168.124.68

从库IP:192.168.124.128

主库--->从库:

ping 正常

telnet 正常

从库--->主库

ping 正常

telnet 正常

主从关系:

IO线程:yes

SQL线程:yes

防火墙:主从节点都开通了192.168.124.0/24段。

存在问题:

主库和从库之间的SSH不通。

解决方法:一开始以为是防火墙开通有问题,但是发现telnet是通的,防火墙应该没有问题,重新检查防火墙内容,添加对应的规则之后,发现问题还没有解决,这个时候查询网上资料,显示可能是hosts.allow文件没有添加相应的规则,于是查询hosts.allow文件,对比之前的正确测试环境,发现目前在建的这套环境里面没有配置相关的hosts.allow网段,重新配置之后,问题解决。这里,看到了hosts.allow和hosts.deny这两个文件,于是研究了一下这两个文件的差别。

2hosts.allow和hosts.deny

hosts.allow和hosts.deny是linux系统/etc/目录中的两个文件,hosts.allow和hosts.deny规则的执行者为TCP wrappers,对应守护进程为tcpd;而tcpd执行依赖于程序使用了libwrap库,也就是说,hosts.allow和hosts.deny支持且只支持使用了libwrap库的服务。 这里可以简单了解下tcp_wrappers,它是linux中一个安全机制[TCP_wrappers防火墙],一定程度上限制某种服务的访问权限,达到了保护系统的目的。

我们可以简单理解为:/etc/hosts.allow和/etc/hosts.deny两个文件是控制远程访问设置的,通过他可以允许或者拒绝某个ip或者ip段的客户访问linux的某项服务。

简单看下hosts.allow中的内容,大致如下:

#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
sshd:192.168.18.*:allow
sshd:192.168.224.*:allow

可以看到,上面的文件中写了两个IP地址段,IP地址段后面都跟着allow,顾名思义,这是允许访问的IP段,实际上,它的工作原理是这样的:

1. 当有请求从远程到达本机的时候

首先检查/etc/hosts.allow

如有匹配的,就默认允许访问,跳过 /etc/hosts.deny这个文件

没有匹配的,就去匹配/etc/hosts.deny 文件,如果有匹配的,那么就拒绝这个访问

2. 如果在这两个文件中,都没有匹配到,默认是允许访问的

上面的这种写法表示允许18和224两个ip段连接sshd服务(这必然需要hosts.deny这个文件配合使用),当然:allow完全可以省略的。

再来说说这两个文件中设置规则的具体格式

服务列表 :地址列表 :选项

也就是:

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

其中:

daemon    表示要监控的服务,如 telnetd、ftpd、sshd
client    表示主机名、IP 地址/IP 范围,或域名
option    具体选项

option的内容包括:

allow    允许对客户端的访问
deny     拒绝对客户端的访问
except   会匹配第一个列表中所有项,除非匹配第二个列表。例如,允许 domainA 中所有项,除了 hostX.domainA 和 hostY.domanA。

A. 服务列表格式:如果有多个服务,那么就用逗号隔开 B. 地址列表格式: 1. 标准IP地址:例如:192.168.0.254,192.168.0.56如果多于一个用,隔开 2. 主机名称:例如:www.baidu.com 3. 利用掩码:192.168.0.0/255.255.255.0指定整个网段 注意:tcp_wrappers的掩码只支持长格式,不能用:192.168.0.0/24这种模式 4. 网络名称:例如 @mynetwork

除此之外,还包含一些宏定义:

ALL :指代所有主机 LOCAL :指代本地主机 KNOWN :能够解析的 UNKNOWN :不能解析的

简单看个宏定义的例子,我们分别在/etc/hosts.allow和/etc/hosts.deny中写下如下的规则:

 cat /etc/hosts.allow
 sshd:192.168.0.0

 cat /etc/hosts.deny
 sshd:ALL

这个规则表明,sshd服务只允许192.168.0.0网段的主机访问,其他拒绝。

上面的规则都需要根据两个文件进行规则匹配,根据规则的灵活性,我们也可以只用一个文件,通常是 hosts.allow 来包含 所有规则,在那些需要拒绝的ip后面跟上deny选项即可。如果在某些测试环境中这些规则我们暂时不想使用,以后的某个时候可能会重新启用,只需要将这两个文件的名称临时改掉,在需要使用的时候重新改回来即可。

最后我们看一个例子:

telnetd,sshd:.myweb.com :allow
ftpd:.myweb.com except user1.myweb.com, user2.myweb.com : allow
telnetd,sshd:192.168.6. , 192.168.7.: allow
telnetd :192.168.8., 192.168.9.: deny

这个例子中每一行规则的意思如下:

第1行:允许使用 telnet 和 ssh 访问以下域:myweb.com域

第2行:允许从 myweb.com 域中的所有主机上进行 ftp 访问,除了 myweb.com 中的两个主机:user1 和 user2

第3行:允许从 192.168.6.网段和192.168.7.网段的所有主机上进行telnet和ssh 访问

第4行:拒绝192.168.8.网段和192.168.9.网段所有主机进行telnet访问

本文分享自微信公众号 - DBA随笔(gh_acc2bbc0d447),作者:AsiaYe

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自增长列的一个小问题

    之前的文章中写了一个小问题,当我们使用自增长的方式限定了一个自增长字段id以后,如果删除id=7的一条记录,再重新插入新纪录的时候,这个新纪录的id值会...

    AsiaYe
  • 一种线上数据库清理数据的方法

    今天下午,开发的同事提来一个需求,需要在线上要删除一些数据记录,简单看了看数据的分布,大概是要删除数据表中的两千七百多万条记录,数据表的总记录是两千八百多万,...

    AsiaYe
  • Python和MySQL里面的两个知识点

    这里首先解释下:json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串)

    AsiaYe
  • 防攻击可以增加IP白名单/etc/hosts.allow和黑名单/etc/hosts.deny

    防攻击可以增加IP白名单/etc/hosts.allow和黑名单/etc/hosts.deny

    拓荒者
  • Linux 系统虚拟主机 .htaccess 限制 IP 访问的方法 Linux 转载 Apache

    这里列出的是一些可用的规则,目前虚拟主机的 Apache 配置是默认放开这个限制的,如果添加了这个规则(报错页面就403)

    奇梦
  • ARMv8架构特性总结

    ARMv8架构,引入了Execution State、Exception Level、Security State等新特性,是目前ARM架构变动最大的一次,具体...

    安智客
  • 云服务模型:控制与规模经济的博弈

    感谢支持ayqy个人订阅号,每周义务推送1篇(only unique one)原创精品博文,话题包括但不限于前端、Node、Android、数学...

    ayqy贾杰
  • 机器学习优化算法:梯度下降(Gradient Descent)

    优化算法 ( Optimization Algorithm ) 是机器学习理论中重要的组成部分,每年 ICML 会议中,总会有很多关于优化算法 Paper 以及...

    游遵文
  • 用Pandas从HTML网页中读取数据

    本文,我们将通过几步演示如何用Pandas的read_html函数从HTML页面中抓取数据。首先,一个简单的示例,我们将用Pandas从字符串中读入HTML;然...

    老齐
  • Swift学习之5.1和5.2新特性

    Swift 5.1 内置于 Xcode 11,新增了很多新特性,比较重要的有以下几个。

    YungFan

扫码关注云+社区

领取腾讯云代金券