Linux网络服务之SSH远程控制与TCP Wrappers访问控制

  • Post author:
  • Post category:linux



目录


SSH远程管理


SSH服务器


SSH优点


常见的SSH协议


ssh原理


公钥传输原理


登录


sshd服务支持登录验证方式


TCP Wrappers 访问控制


保护机制的两种实现方式


查看程序的 libwrap.so.* 链接库——ldd命令


TCP Wrappers 的访问策略


TCP Wrappers 机制的基本原则


SSH远程管理

SSH服务器

SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能;

SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令;

SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。

SSH客户端<————–网络—————->SSH服务端

SSH优点

  • 数据传输是加密的,可以防止信息泄漏

  • 数据传输是压缩的,可以提高传输速度

常见的SSH协议

客户端: Linux Client: ssh, scp, sftp,slogin Windows Client:xshell, MobaXterm,putty, securecrt, sshsecureshellclient

OpenSSH 是实现SSH协议的开源软件项目,适用于各种UNIX、 Linux 操作系统。

Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动。

执行”systemctl start sshd”命令即可启动sshd 服务

sshd 服务默认使用的是TCP的22端口,安全协议版本sshv2,出来2之外还有1(有漏洞)

sshd服务的默认配置文件是/etc/ssh/sshd_config ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于前者是针对客户端的配置文件,后者则是针对服务端的配置文件。

  • 服务名称:sshd
  • 服务端主程序:/usr/sbin/sshd
  • 服务端配置文件:/etc/ssh/sshd_config
  • 客户端配置文件:/etc/ssh/ssh_configan>


ssh原理


公钥传输原理

  • 客户端发起链接请求
  • 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
  • 客户端生成密钥对
  • 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
  • 客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
  • 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
  • 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯会被加密


登录



登录 方法一

ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port

当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是 root 的话,当连接另一台主机时也是用 root 用户登录时,可以直接使用 ssh   IP,端口默认即可,如果端口不是默认的情况下,需要使用-p 指定端口。


登录 方法二

ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port

-l :-l 选项,指定登录名称。

-p:-p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)

实例

配置OpenSSH服务端

配置文件常用设置选项


AllowUsers和DenyUsers


验证


sshd服务支持登录验证方式

密码验证: 以服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户机角度来看,正在连接的服务器有可能被假冒,从服务器角度来看,当遭遇密码暴力破解攻击时防御能力比较弱。

密钥对验证: 要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥和私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,增强了远程管理的安全性。

  • 公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密;
  • 不能根据一个密码来推算出另一个密钥;
  • 公钥对外公开,私钥只有私钥的持有人才知道。


基于密钥常用配置项

#生成密钥文件

[root@localhost ~]# ssh-keygen -t ecdsa

(如果设置免密登录,则重新设置,不设置密码,一路回车)

#将公钥文件导入对方用户的 注意路径

[root@localhost .ssh]# ssh-copy-id -i /root/.ssh/id_ecdsa.pub root@192.168.59.117

#登录客户机

生成密钥文件


将公钥文件导入对方用户的 注意路径

TCP Wrappers 访问控制

TCP Wrappers原理

  • TCP Wrappers 将TCP服务程序“包裹”起来,代为监听TCP服务程序的端口,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。
  • 大多数 Linux 发行版,TCP Wrappers 是默认提供的功能。

保护机制的两种实现方式

直接使用 tcpd 程序对其他服务程序进行保护,需要运行 tcpd程序。

由其他网络服务程序调用 libwrap.so.* 链接库,不需要运行 tcpd 程序。此方式的应用更加广泛,也更有效率

查看程序的 libwrap.so.* 链接库——ldd命令

ldd [参数] [文件名]

常用参数 说明
-v 详细信息模式,打印所有相关信息
-u 打印未使用的直接依赖
-d 执行重定位和报告任何丢失的对象
-r 执行数据对象和函数的重定位,并且报告任何丢失的对象和函数
– -help 显示帮助信息


文件需要写上绝对路径

  • 我们不是很清楚文件的绝对路径时,可以使用which命令查询
  • 也可以两条命令一起使用:ldd $(which sshd)

TCP Wrappers 的访问策略

TCP Wrappers 机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。

对应的两个策略文件为

/etc/hosts.allow



/etc/hosts.deny

,分别用来设置允许和拒绝的策略。

格式:

[服务程序列表] :[客户端地址列表]

服务程序列表 ALL 代表所有的服务
单个服务程序 如“vsftpd”
多个服务程序组成的列表 如“vsftpd,sshd”
客户端地址列表 ALL 代表任何客户端地址
LOCAL 代表本机地址
多个地址以逗号分隔
允许使用通配符 * 代表任意长度字符
仅代表一个字符

TCP Wrappers 机制的基本原则

首先检查/etc/hosts.allow文件,如果找到相匹配的策略,则允许访问;

否则继续检查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝访问;

如果检查上述两个文件都找不到相匹配的策略,则允许访问。


允许所有,拒绝个别


只需在/etc/hosts.deny文件中添加相应的拒绝策略


允许个别,拒绝所有


除了在/etc/hosts.allow中添加允许策略之外,还需要在/etc/hosts.deny文件中设置“ALL:ALL”的拒绝策略。



版权声明:本文为weixin_47062656原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。