linux小白学习之路-Tcp_wrappers

TCP_Wrappers 学习

一:为什么要学习TCP_Wrappers

tcp_Wrappers是一个简单的防火墙,它的全称是:Transmission Control Protocol(TCP)Wrappers。
它工作原理简单,方便易于上手,相当于我们手机的黑名单和白名单,对访问我们服务器的用户进行设置和管理。

1.1 TCP_Wrappers的特点

1)它工作在第四层数据链路层,可以对服务器的初始访问做筛查
2)它对有状态连接的特定服务进行安全检查,以库文件的形式实现访问控制
3)某一进程是否接受tcp_wrappers的控制,取决于它在编译的时候是否对libwrap库进行了编译

1.2 怎样判断一个进程是否能够实现tcp_wrappers管控

1)找到该服务的所在位置
如:我们分别对ssh和sshd这两个服务做检查
在这里插入图片描述
在这里插入图片描述
可以看到ssh服务的命令保存在/usr/bin/ssh
2)通过ldd命令查询出ssh和sshd命令中包含的所有库文件
在这里插入图片描述
在这里插入图片描述
3)里面的内容比较多,我们做一个筛查,找出里面的libwrap.so库文件
ssh
在这里插入图片描述
ssh的库文件中不包含libwrap.so库,说明ssh不受tcp_wrappers管理
sshd
在这里插入图片描述
我们可以看到sshd的库文件中包含libwrap库,所以sshd服务是可以被tcp_wrappers所管理的。

二、使用TCP_Wrappers

2.1 tcp_wrappers的工作原理

在这里插入图片描述
原理说明:
1)TCP_Wrappers有一个TCP协议的守护进程tcpd。用户访问服务器后,会监控到用户的访问。
2)当用户开始访问服务器后tcpd进程会截取用户的请求,通过/etc/hosts.allow「白名单」文件来核实,用户是否允许访问,允许则放行。
3)在/etc/hosts.allow文件中没有记录的转到/etc/hosts.deny「黑名单」文件,检查到访用户是否在本文件中有记录,有则拒绝服务,没有则开始提供服务

配置文件:

文件 理解意义
/etc/hosts.allow 可以理解为电话的白名单,只要在名单上的都可以通过
/etc/hosts.deny 可以理解为电话的黑名单,只要在名单上的都拒绝服务
2.2 配置规则说明

语法规则

daemon_list : client_list [ : shell_command ]

daemon_list  
        单个应用程序的二进制文件名,而不是服务名,如果有多个,用逗号或空格分隔。
        如:sshd
        可以绑定服务地址,如,[email protected]:ALL
        ALL表示所有接受tcp_wrapper控制的服务程序
        支持通配符

client_list
        客户端列表
         基于单个IP地址:192.168.10.1 
         基于网段IP地址:192.168.1. 注意,192.168.1.0这个写法是错误的。
         基于主机名:www.hunk.tech .hunk.tech较少用
         基于网络/掩码:192.168.0.0/255.255.255.0
         基于net/prefixlen: 192.168.1.0/24(仅CentOS7)
         基于网络组(NIS 域):@mynetwork
         内置ACL:
            ALL 所有(进程或者主机)
            LOCAL 名称中不带点的主机
            KNOWN 可以解析的主机名
            UNKNOWN 无法解析的主机名
            PARANOID 正、反向查询不匹配或无法解析
        支持通配符

shell_command
        执行指令
        如:sshd:all:spawn echo "`date +%%F-%%T` from %a pid=%p to %s" >> /app/sshd.log

EXCEPT是排除的意思,一行规则里可以有多个,后面的是对前面的结果集进行排除。 
        vsftpd:172.16. EXCEPT 172.16.100.0/24 EXCEPT 172.16.100.1
        匹配整个172.16网段,但是把172.16.100的网段排除,在排除172.16.100网段中又把172.16.100.1的IP给排除。

spawn 启动一个外部程序完成执行的操作,可以支持内置变量。内置变量请man ,找%的选项
        %a (%A) 客户端IP
        %c      客户端信息,可以是IP或主机名(如果能解析)
        %p      服务器进程信息 (PID)
        %s      连接的服务端的信息
        %%      当规则中包含%时,使用双%转义

twist 特殊扩展
以指定的命令执行,执行后立即结束该连接。需在spawn之后使用。
2.3 实验使用

2.2.1 实验环境搭建
三台测试机需要可以互相联网通信。


服务器
服务器名称:studyLinux
ip地址:192.168.1.105
··········································
客户机01
客户机名称:client01
IP地址:192.168.1.107
·········································
客户机02
客户机名称:test-linuxStudy
IP地址:192.168.1.109
·········································
服务器端配置规则
准入规则配置文件:/etc/hosts.allow
拒绝规则配置文件:/etc/hosts.deny


实验一:对所有用户开放并记录用户登陆信息到tcpwrappers.log日志中

配置:
在服务器192.168.1.105中使用vim打开文件/etc/hosts.allow文件。加入如下代码

# 允许所有用户使用sshd服务,记录用户的信息到日志/var/log/tcpwrappers.log
[email protected]:ALL:spawn echo "`date +%%FF %%T` from %a to %s" >> /var/log/tcpwappers.log

代码说明:spawn启用外部程序,这里使用了数据重定向,把数据写入自定义的日志文件tcpwrappers.log中,保存在/var/log/目录下
查看当前服务器中是否已经创建了tcpwrappers.log文件
在这里插入图片描述
在这里插入图片描述
客户端测试
客户端一:192.168.1.107测试
在这里插入图片描述
登陆完成可以正常访问
客户端二:192.168.1.109测试
在这里插入图片描述
测试服务器系统日志记录
在这里插入图片描述

实验二:仅仅允许192.168.1.109登陆,禁止其他设备登陆,并给禁用用户发出提示“禁止连接”

服务器端配置文件
/etc/hosts.allow文件配置
在这里插入图片描述
/etc/hosts.deny文件配置
在这里插入图片描述
测试机开始测试配置规则
客户机1:(192.168.1.107)----需要的结果是访问被拒绝
测试使用ssh访问192.168.1.105
在这里插入图片描述
拒绝规则生效
客户机2(192.168.1.109)—需要的结果是 可以登陆到服务器
在这里插入图片描述
总结
通过上面的两个例子我们可以看到。
1)TCP_Wrappers是通过服务在编译时是否编译进去了libwrap库来实现是否允许TCP_Wrappers安全管理控制的。
2)TCP_Wrappers的安全控制是通过,白名单:/etc/hosts.allow 和 黑名单:/etc/hosts.deny 一起来控制的
3)/etc/hosts.allow文件的优先级高于/etc/hosts.deny

三、生产场景中的应用

在实际生产中,通常都是不允许直接连接服务器,服务器通常会指定一个或一个网段的设备可以登陆。通常指定的是同一局域网中的设备。如下图
在这里插入图片描述
服务器(服务器1、服务器2)是不会接受外部网络的ssh服务的,它们只会接受内部网络的访问(堡垒机或跳板机)。其中堡垒机会接受远程的ssh访问。运维人员通常都是先登陆堡垒机,然后通过堡垒机登陆服务器,对服务器进行管理。

这样做的原因

我们当前的网络环境,网上安全问题越来越严峻,很有可能你的服务器就正在被其他人在暴力破解,因为需要远程连接服务器,所以最有可能收到的就是ssh暴力破解。
我们可以使用命令lastb
lastb的作用是:列出登陆系统失败的全部用户信息。它会调用/var/log/btmp文件,该文件中记录了所有登陆失败的用户信息,如下图
在这里插入图片描述
当该命令显示出的一系列的错误时,很有可能您的服务器正在被不断的攻击中。
我们需要做的就是
1)更改sshd的端口
2)禁用所有对外的sshd服务,使用内网访问,
3)使用shell脚本,解析btmp日志,把同一IP多次登陆失败(notty)的。把它的ip地址写入/etc/hosts.deny中拒绝对它的服务。然后把脚本加入定时任务中,做不间断的检查。
后面会学到

发布了7 篇原创文章 · 获赞 0 · 访问量 56

猜你喜欢

转载自blog.csdn.net/qq_33318382/article/details/104352516