TCP 包装器 是一个开源的基于主机的ACL(访问控制列表)系统,用于根据主机名、IP地址、网络地址等来限制TCP网络服务。 它决定应该允许哪个主机访问特定的网络服务。 TCP Wrapper 由荷兰程序员和物理学家开发 维策茨韦策维尼玛 1990年在埃因霍温科技大学。 他一直维护到 1995 年,然后在 2001 年在 BSD 许可下发布它。在这个简短的指南中,我将解释如何使用 TCP Wrappers 限制对 Linux 服务器的访问。
请注意 TCP Wrapper 不能完全替代正确配置的防火墙. 它只是增强 Linux 服务器安全性的重要补充。 建议将它与完全配置的防火墙和其他安全机制和工具结合使用。
安装 TCP 包装器
TCP Wrappers 在大多数 Linux 操作系统的官方存储库中都可用。
根据您使用的 Linux 发行版,它可以安装如下所示。
在基于 Arch 的系统上:
$ sudo pacman -S tcp_wrappers
在基于 YUM 的系统上:
$ sudo yum install tcp_wrappers
在基于 APT 的系统上:
$ sudo apt-get install tcp_wrappers
在 SUSE/openSUSE 系统上:
$ sudo zypper in tcp_wrappers
使用 TCP Wrappers 限制对 Linux 服务器的访问
配置
TCP Wrappers 借助两个配置文件实现访问控制: /etc/hosts.allow 和 /etc/hosts.deny. 这两个访问控制列表文件决定是否允许特定客户端访问您的 Linux 服务器。
/etc/hosts.allow 文件
此文件包含允许或不允许的主机或网络的列表。 这意味着我们可以通过在此文件中定义访问规则来允许或拒绝与网络服务的连接。
/etc/hosts.deny 文件
此文件包含不允许访问您的 Linux 服务器的主机或网络的列表。 此文件中的访问规则也可以在 /etc/hosts.allow 中设置 ‘否定’ 选项。
定义访问规则的典型语法是:
daemon_list : client_list : option : option ...
在哪里,
- 守护进程列表 – 网络服务的名称,例如 SSH、FTP、Portmap 等。
- 客户列表 – 有效主机名、IP 地址或网络地址的逗号分隔列表。
- 选项 – 一个可选操作,指定匹配规则时要执行的操作。
两个文件的语法相同。
要记住的规则
在使用 TCP Wrappers 之前,您需要了解以下重要规则。 请注意 TCP Wrapper 只参考这两个文件(hosts.allow 和 hosts.deny)。
- 首先应用 /etc/hosts.allow 文件中的访问规则。 它们优先于 /etc/hosts.deny 文件中的规则。 因此,如果允许访问服务 /etc/hosts.allow 文件,以及拒绝访问同一服务的规则 /etc/hosts.deny 被忽略。
- 两个文件(hosts.allow 和 hosts.deny)中每个服务只允许一个规则。
- 规则的顺序非常重要。 只考虑给定服务的第一个匹配规则。 这同样适用于两个文件。
- 如果两个文件中没有匹配的服务规则,或者两个文件都不存在,那么所有远程主机都可以访问该服务。
- 任何一个文件中的任何更改都将立即生效,而无需重新启动网络服务。
保护服务器的推荐方法
通常,保护 Linux 服务器的最佳实践是阻止所有传入连接,并仅允许少数特定主机或网络。 为此,请编辑 /etc/hosts.deny 文件:
$ sudo vi /etc/hosts.deny
添加以下行。 此行拒绝连接到所有服务和所有网络。
ALL: ALL
然后,编辑 /etc/hosts.allow 文件:
$ sudo vi /etc/hosts.allow
并允许您选择的特定主机或网络。
sshd: 192.168.43.192 192.168.43.193
此外,您可以指定有效的主机名而不是 IP 地址,如下所示。
sshd: server1.ostechnix.lan server2.ostechnx.lan
或者,您可以通过在 /etc/hosts.allow 文件本身中定义所有规则(允许和拒绝)来执行相同操作。
编辑 /etc/hosts.allow 文件并添加以下行。
sshd: 192.168.43.192 192.168.43.193 sshd: ALL: DENY
您无需指定任何规则 /etc/hosts.deny 文件。
根据上述规则,除了两个主机 192.168.43.192、192.168.43.193 之外,所有主机的所有传入连接都将被拒绝。
现在,尝试从除上述主机之外的任何主机 SSH 到您的 Linux 服务器,您将收到以下错误。
ssh_exchange_identification: read: Connection reset by peer
您可以从 Linux 服务器的日志文件中验证这一点,如下所示。
$ cat /var/log/secure
样本输出:
Jun 16 19:40:17 server sshd[15782]: refused connect from 192.168.43.150 (192.168.43.150)
同样,您可以为其他服务定义规则,例如 example vsftpd,在 /etc/hosts.allow 文件如下图。
vsftpd: 192.168.43.192 vsftpd: ALL: DENY
同样,您不需要在 /etc/hosts.deny 文件。 根据上述规则,IP 地址为 192.168.43.192 的远程主机可以通过 FTP 访问 Linux 服务器。 所有其他主机将被拒绝。
此外,您可以在 /etc/hosts.allow 文件中定义不同格式的访问规则,如下所示。
sshd: 192.168.43.192 #Allow a single host for SSH service sshd: 192.168.43.0/255.255.255.0 #Allow a /24 prefix for SSH vsftpd: 192.168.43.192 #Allow a single host for FTP vsftpd: 192.168.43.0/255.255.255.0 #Allow a /24 prefix for FTP vsftpd: server1.ostechnix.lan #Allow a single host for FTP
允许除特定主机之外的所有主机
您可以允许来自所有主机的传入连接,但不允许来自特定主机的传入连接。 说为 example以允许来自所有主机的传入连接 192.168.43 子网,但不是来自主机 192.168.43.192加入下面一行 /etc/hosts.allow 文件。
ALL: 192.168.43. EXCEPT 192.168.43.192
在上述情况下,您不需要在 /etc/hosts.deny 文件中添加任何规则。
或者您可以指定主机名而不是 IP 地址,如下所示。
ALL: .ostechnix.lan EXCEPT badhost.ostechnix.lan
有关更多详细信息,请参阅手册页。
$ man tcpd
- 在 Linux 中允许或拒绝对特定用户或组的 SSH 访问
- 限制每个用户/组/系统的 SSH 登录次数
同样,我们不要忘记,TCP Wrapper 不是防火墙的替代品。 它应该与防火墙和其他安全工具一起使用。
资源:
感谢您的光临!
帮助我们帮助您:
- 订阅我们的电子邮件通讯: 立即注册
- 支持 OSTechNix: 通过贝宝捐款
- 下载免费的电子书和视频: TradePub 上的 OSTechNix
- 联系我们: 红迪网 | Facebook | Twitter | 领英 | RSS订阅
祝你有美好的一天!!