【tcpwrappers】关于/etc/hosts.allow/etc/hosts.deny

author author     2023-04-24     533

关键词:

参考技术A 遇到一台服务器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规则的执行者为TCP wrappers,对应守护进程为tcpd,而tcpd执行依赖于程序使用了libwrap库。

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

方法一、查看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程序就不要想了。

/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里面得到的端口定义。这样和其他程序有没有冲突,一目了然,而且一旦需要调整和重新分配端口的时候也容易。

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 可以使用以下规则拒绝所有客户端访问所有守护进程:

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

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

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

我们假设仅仅允许属于 mydomain.com 域的主机使用 telnet 或 ssh。以下的 hosts.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 域。

以下命令能完成此任务:

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

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

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

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

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:

(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

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

服务的防火墙管理xinted,tcpwrappers

 一般来说,系统的防火墙分析主要通过 数据包过滤 或者是通过 软件分析。防火墙:简单的来说,就是针对源IP或者域进行允许或拒绝的设置,以决定该连接是否能够正确成功实现连接的一种方式。Linux默认有提... 查看详情

关于linux开机自动启动服务uwsgi.nginx。我在/etc/rc.local中增加了

关于Linux开机自动启动服务uwsgi.nginx。我在/etc/rc.local中增加了/etc/init.d/nginxrestart和uwsgi-x/django.xml开机之后只有前面一个服务开启了,后面一个没有。求解啊。。。。参考技术A你需要写uwsgi命令的绝对路径,例如/usr/bin/uwsgi-x/django.x... 查看详情

关于vi/etc/fstab的问题

我在linux重新建立个分区/dev/sdb5,然后用mkfs格式化,然后挂载在/mnt/sdb5,用vi编辑器编辑/dec/sdb5/mnt/sdb5ext3defaults,usrquote,grpquote12wq保存后退出vi,但是我再用mount查看的时候,就少了usrquote,grpquote/dev/sdb5on/mnt/sdb5typeext3(rw)怎么解决?首... 查看详情

关于centos7下nginx配置多个server的问题?

centos7下nginx配置多个server,使多个域名或者同一个域名使用多个端口号或者多个ip访问同一个网页,我使用了多个域名或者多个ip都不能成功,但使用了同一个域名使用多个端口号使成功了,我就上网查为什么使用多个域名或者... 查看详情

tcpwrappers

TCPWrappers是RHEL7系统中默认启用的一款流量监控程序,它能够根据来访主机的地址与本机的目标服务程序作出允许或拒绝的操作。换句话说,Linux系统中其实有两个层面的防火墙,第一种是前面讲到的基于TCP/IP协议的流量过滤工具... 查看详情

linux下,/etc/hosts文件有啥用途

...查/etc/下的profile内容,而且在每行的结尾处附加$符号。关于linux中[root@localhostroot]#第一、二个root,分别表示的意思如下:root@localhostroot中第一个 查看详情

如何编辑suse/etc/hosts

1、关于/etc/host,主机名和IP配置文件Hosts-Thestatictablelookupforhostname(主机名查询静态表)hosts文件是Linux系统中一个负责IP地址与域名快速解析的文件,以ASCII格式保存在“/etc”目录下,文件名为“hosts”(不同的linux版本,这个配... 查看详情

linux配置文件之/etc/passwd详解

...常不需要或无法登录系统,并且伪用户可以没有宿主目录.关于用户组(GID)--每个用户都至少属于一个用户组--每个用户组可以包括多个用户--同一用户组的用户享有该组共有的权限注释性描述,主要是创建用户时,对这个用户进行的一... 查看详情

开机启动/etc/rc.local失效无效怎么办

参考技术A关于在/etc/rc.local下面加入脚本,开机后无法执行解决方法:1、使用runlevel或者who-r查看服务器的运行级别,根据运行级别查看/etc/rc.d/rcX.d/S99local->../rc.local,所指向的rc.local文件位置是否正确。一般是正确的默认在/etc/... 查看详情

2021-12-26/etc/rc.local和systemctl设置

参考技术A1、rc.local启动问题 关于/etc/rc.local不能启动问题,将/etc/profile添加不能启动的一项,即可完成开机自启动。   centos7 可将比如mysqldredis,nginx编写成nginxd.service,然后用于systemctl控。2、systemctl命令 ... 查看详情

linux如何进入系统文件/etc/profile修改内容

...本编辑软件打开/etc/profile进行编辑,最后保存退出即可。关于文本编辑软件:字符界面下使用vi或vim进行编辑,命令形式:vi/etc/profile图形界面下可用gedit进行编辑,命令形式:gedit/etc/profile扩展资料:Linux内核使用三种不同的版... 查看详情

linux如何进入系统文件/etc/profile修改内容

...本编辑软件打开/etc/profile进行编辑,最后保存退出即可。关于文本编辑软件:字符界面下使用vi或vim进行编辑,命令形式:vi/etc/profile图形界面下可用gedit进行编辑,命令形式:gedit/etc/profile扩展资料:Linux内核使用三种不同的版... 查看详情

使用tcpwrappers增强sshd安全性

简介:TCPWrappers是一个基于主机的ACL系统,他被用来过滤对Linux系统提供的网络服务的访问。他通过libwrap向daemon进程提供过滤功能。650)this.width=650;"style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;bor 查看详情

/etc/inittab是啥文件

参考技术A它是linux中启动时加载的文件,/etc/inittab中的内容告诉init进程将要为每个运行级别创建什么进程以及执行什么动作 查看详情

source/etc/profile怎么执行

参考技术A在Linux的终端中输入后回车执行 查看详情

linux中/etc/passwd与/etc/shadow文件权限设置多少最安全

设置成什么都不影响安全的,/etc/passwd下存的是用户名,所属组,用户ID等信息,/etc/shadow目录下存的是用户的密码,但是这些密码都是系统经过加密算法得出来的,你看不到真正的密码。别人看不见你的密码。所以不用担心这两... 查看详情

如何使/etc/profile文件修改后立即生效

方法1:让/etc/profile文件修改后立即生效,可以使用如下命令:#./etc/profile注意:.和/etc/profile有空格方法2:让/etc/profile文件修改后立即生效,可以使用如下命令:#source/etc/profile参考技术Asource/etc/profile这两个文件一般是linux系统中存在,... 查看详情

如何使/etc/profile文件修改后立即生效

方法1:让/etc/profile文件修改后立即生效,可以使用如下命令:#./etc/profile注意:.和/etc/profile有空格方法2:让/etc/profile文件修改后立即生效,可以使用如下命令:#source/etc/profile参考技术Asource/etc/profile这两个文件一般是linux系统中存在,... 查看详情