Linux的SSH远程管理及安全配置

  • 课程知识点
  1. OpenSSH远程管理
  2. TCP Wrappers访问控制
  • 技术目标
  1. 掌握OpenSSH远程管理
  2. 掌握TCP Wrappers访问控制的应用与配置
  • 课程内容

1、OpenSSH远程管理

1.1 配置OpenSSH服务端

1.1.1 配置OpenSSH配置文件

openssh服务器由openssh、openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。执行"systemctl status sshd.service"即可按默认配置启动sshd服务,包括root在内的大部份用户(只要拥有合法的登录shell)都可以远程登录系统。

sshd服务的配置文件是:/etc/ssh/sshd_config,正确调整相关配置项,可以进一步提高sshd远程登录的安全性。下面介绍一些最常用的配置项,关于sshd_config文件的更多配置可参考man手册。

1.1.2 服务监听选项

sshd服务使用的默认端口号为22,必要时建议修改此端口号,并指定监听服务的具体IP地址,以提高在网络中的隐蔽性。SSH协议的版本选用V2比V1的安全性要更好,禁用DNS反向解析可以提高服务器的响应速度。

复制代码
 # vim /etc/ssh/sshd_config

 Port 22                              监听端口为22

 ListenAddress 192.168.10.1           监听地址为192.168.10.1

.......                             省略内容

 UseDNS yes                           禁用DNS反向解析

......                              省略内容

 # systemctl restart sshd

1.1.3 用户登录控制

sshd服务默认允许root用户登录,当在Internet中使用时这是非常不安全的。普遍的做法是:先以普通用户远程登录,进入安全shell环境后,根据实际需要使用su命令切换为root用户。关于sshd服务的用户登录控制,通常就禁止root用户或密码为空的用户登录。另外,可以限制登录验证的时间(默认为2分钟)及最大重次数,若超过限制后仍未登录则断开连接。

复制代码
 # vim /etc/ssh/sshd_config

LoginGraceTime 2m         //登录验证时间   

PermitRootLogin no        //禁止root用户登录

MaxAuthTries 3            //最大重试次数

MaxSessions 10            //最大连接数

PermitEmptyPasswords no   //禁止空密码用户登录

.....                     //省略内容

 # systemctl restart sshd

如果只允许或禁止某些用户登录时,可以使用AllowUsers或DenyUsers配置,两者用法类似(不能同时使用)。

【举例】 只允许stu1和stu2用户录,其中stu2用户仅能从IP地址为192.168.10.100的主机远程登录,配置如下:

vim /etc/ssh/sshd_config

..... //省略内容

AllowUsers stu1 stu2@192.168.10.100 //多个用户用空格隔开

systemctl restart sshd

1.1.4登录验证方式

对于服务器的管理,除了用户帐号的安全控制外,登录验证试也非常重要。sshd服务支持两种验证方式:密码验证和密钥对验证,可以设置只使用其中一种,也可以两种都用。

密码验证

以服务器中本地系统用户的登录名称、密码进行验证。从客户机角度来看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破解)攻击时防御能力较弱。

密钥对验证

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

公钥与私钥是成对生成,这两个密钥互不相同,可以互相加密与解密。

不能根据一个密钥来推算出另一个密钥。

公钥对外公开,私钥只有私钥的持有人才知道。

公钥与私钥要配对使用,如果用公钥对数据进行加密,只有用相对就的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。

当密码验证与密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用, 只允许启用密钥对验证方式;若没有特殊要求,则两种方式都可启用。

其中,公钥库文件用来保存各客户机上传的公钥文本,以便与客户机本地的私钥文件进行匹配。如果要禁用密码验证,启用密钥对验证,修改配置文件如下:

复制代码
# vim /etc/ssh/sshd_config

PasswordAuthentication no                      禁用密码验证

PubkeyAuthentication yes                       启用密钥对验证

AuthorizedKeysFile     .ssh/authorized_keys    指定公钥库数据文件

.....                                          省略内容

# systemctl restart sshd

1.2 使用SSH客户端程序

在CentOS7系统中,OpenSSH客户端由openssh-clients软件包提供(默认已安装),其中包括ssh远程登录命令,以及scp、sftp远程复制和文件传输命令等。实际上,任何支持SSH协议的客户端程序都可以与OpenSSH服务器进行通信,如windows平台中的Xshell、SecureCRT、Putty等图形工具。

1.2.1 命令程序ssh、scp、sftp

(1)ssh远程登录

通过ssh命令可以远程登录sshd服务,为用户提供一个安全的shell环境,以便对服务器进行管理和维护。使用时应指定登录用户、目标主机地址作为参数。

【举例】 以student用户远程登录到主机192.168.75.158

ssh student@192.168.75.158

Are you sure you want to continue connecting (yes/no)? yes 接受密钥

student@192.168.75.158's password: 输入密码

当用户第一次登录SSH服务器时,必须接受服务器发来的RSA密钥(根据提示输入"yes")后才能继续验证。接收的密钥信息将保存到~/.ssh/known_hosts文件中。密码验证成功以后,就登录到目标服务器的命令行环境中了,就好像把客户机的显示器、键盘连接到服务器一样。

如果sshd服务器使用了非默认的端口号(如2345),则在登录时必须通过"-p"选项指定端口号。

【举例】 以student用户远程登录到主机192.168.75.158的2345端口

ssh -p 2345 student@192.168.75.158

(2)scp远程复制

使用scp命令可以利用SSH安全连接与远程主机相互复制文件。使用scp命令时,除了必须指定复制源、目标外,还应指定目标主机地址、登录用户,执行后提示验证口令即可。

【举例】将远程主机的/etc/passwd文件复制到本机,

将本机的/var/log/复制到远程主机。

scp root@192.168.75.158:/etc/passwd /root/pwd11.txt

scp -r /var/log root@192.168.75.158:/logbak

(3)sftp介绍

sftp也叫安全ftp,通过sftp命令可以利用SSH安全连接与远程主机上传、下载文件 ,采用了与FTP类似的登录过程和交互环境,以更加安全的方式进行目录资源管理。

【举例】使用sftp远程登录,并进行文件上传与下载。

sftp student@192.168.75.158

1.2.2图形工具MobaXterm

MobaXterm是windows下一款功能非常强大的安全终端模拟软件,支持Telnet、SSH、SFTP等协议,可以方便地对Linux主机进行远程管理。

安装并运行MobaXterm后,在Session Settings对话框中指定相关协议,并指定远程主机的IP地址、端口号等相关信息,然后单击OK,根据提示输入密码验证后即可成功登录目标主机。

1.2.3 配置SSH密钥对验证登录

方法一:在Linux客户端使用密钥对登录服务器

(1)在客户端创建密钥对

student@localhost log]$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/student/.ssh/id_rsa): //指定私钥位置

Enter passphrase (empty for no passphrase): //设置私钥短语

Enter same passphrase again: //确认所设置的短语

将公钥上传至服务器

student@localhost \~\]$ scp \~/.ssh/id_rsa.pub root@192.168.75.158:/tmp/ 在服务器中导入公钥文本 # mkdir -p /home/stu1/.ssh # cat /tmp/id_rsa.pub \>\> /home/stu1/.ssh/authorized_keys # ll -rw-r--r--. 1 root root 411 12月 30 22:59 authorized_keys 配置sshd_config文件允许密钥对访问 PasswordAuthentication yes 密码验证 PubkeyAuthentication yes 密钥对验证 AuthorizedKeysFile .ssh/authorized_keys 客户端使用密钥对登录服务器 \[student@localhost \~\]$ssh stu1@192.168.75.158 ****方法二:在windows系统中使用putty实现密钥对登录服务器**** (1)首先要用PuTTYgen 生成密钥对 ![](https://i-blog.csdnimg.cn/direct/e699c054293f4904831a04a31c927276.png) (2)点击Save private key按钮,选择一个存放文件的路径并定义名称,点击"保存" (3)复制公钥到Linux服务器 \[root@aminglinux \~\]# mkdir /root/.ssh 创建目录 \[root@aminglinux \~\]# chmod 700 /root/.ssh 更改这个目录的权限 \[root@aminglinux \~\]# vim /root/.ssh/authorized_keys 把公钥内容粘贴到这 个文件里并保存。 1. 关闭SELinux \[root@aminglinux \~\]# setenforce 0 暂时关闭SELinux 。 (5)设置Putty通过密钥登陆 ![](https://i-blog.csdnimg.cn/direct/4e7a5c5545f941e393871c67b7c9d839.png) ![](https://i-blog.csdnimg.cn/direct/8ac2838709054e078524f33d882ef339.png) ## ******2、TCP Wrappers访问控制****** 在Linux系统中,许多网络服务针对客户机提供了某种访问控制机制,如samba、BIND、Httpd、OpenSSH等,除此之外还有一种防护机制---TCP Wrappers(TCP封套),以作为应用服务与网络之间的一道特殊防线,提供额外的安全保障。 ### **2.1 TCP Wrappers概述** TCP Wrappers将其他的TCP服务程序"包裹"起来,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。 TCP Wrappers还可以记录所有企图访问被保护服务的行为,为管理员提供丰富的安全分析资料。TCP Wrappers的访问控制是基于TCP协议的应用服务。 ![](https://i-blog.csdnimg.cn/direct/981d425ca8184b948afc3a3d6896d45c.png) 相对于iptables防火墙访问控制规则,TCP Wrappers的配置更简单。但是TCP Wrappers也有两个缺点:第一,TCP Wrappers只能控制TCP协议的应用服务;第二,并不是所有基于TCP协议的应用服务都能接受TCP Wrappers控制。对于大多数Linux发行版,TCP Wrappers是默认提供的功能。 ### **2.2** ****TCP Wrappers 的访问策略**** TCP Wrappers机制的保护对象为种网络服务程序,针对访问服务的客户机地址进行访问控制。对应的两个策略文件为/etc/hosts.allow和/etc/hosts.deny,分别用来设置允许和拒绝的策略。 #### **2.1.1 策略的配置格式** 两个策略文件的作用相反,但配置记录的格式相同,如下所示: \<服务程序列表\>:\<客户机地址列表\> 服务程序列表、客户机地址列表之间以冒号分隔,在每个表内的多个项之间以逗号分隔。 ****服务程序列表,可以分为以下几类:**** ALL:代表所有的服务。 单个服务程序:如"sshd"。 多个服务程序组成的列表:如"sshd,vsftpd"。 ****客户机地址列表,可以分为以下几类:**** ALL:代表任何客户机地址。 LOCAL:代表本机地址。 单个IP地址:如"192.168.75.158"。 网络地址段:如"192.168.75.0/255.255.255.0"。 以"."开始的域名:如".kgc.cn"匹配域中的所有主机。 以"."结束的网络地址:如192.168.75.匹配整个192.168.75.0/24网段。 嵌入通配符"\*""?":前者代表任意长度字符,后者仅代表一个字符,如"10.0.8.2\*"匹配以10.0.8.2开头的所有IP地址。不可与以"."开始或结束的模式混用。 多个客户机地址组成的列表:如"192.168.1.,172.17.17.,.kgc.cn"。 #### **2.2.2 访问控制的基本原则** 关于TCP Wrappers机制的访问策略,应用时遵循以下顺序和原则: 首先检查/etc/hosts.allow文件,如果匹配则允许访问; 否则继续检查/etc/hosts.deny文件,如果匹配则拒绝访问; 如果上述两个文件都没有匹配,则允许访问。 #### **2.2.3TCP Wrappers配置实例** 实际应用TCP Wrappers机制时,较宽松的策略可以是"允许所有,拒绝个别",只在hosts.deny文件中添加拒绝策略就可以了。较严格策略是"允许个别,拒绝所有",除了在hosts.allow中添加允许策略外还需要在hosts.deny文件中设置"ALL:ALL"的拒绝策略。 【举例】 只允许61.63.65.67的主机或者位于192.168.2.0/24网段的主机访问sshd服务,拒绝其他地址。 # vim /etc/hosts.allow sshd:61.63.65.67,192.168.2.\* # vim /etc/hosts.deny sshd:ALL

相关推荐
多吃蔬菜!!!10 分钟前
vscode 搭建C/C++开发环境搭建(linux)
linux·c语言·c++
李李李li18 分钟前
Ubuntu 22.04 安装tensorrt
linux·tensorrt
聚铭网络1 小时前
聚铭安全管家平台2.0实战解码 | 安服篇(四):重构威胁追溯体系
网络·安全·重构
郭二哈1 小时前
git的使用
大数据·网络·git·elasticsearch
phoenix09812 小时前
Linux入门DAY29
linux·运维
叔叔别拉了我害怕2 小时前
封装FTPSClient连接ftps服务器
服务器·git·github
入秋2 小时前
Linux服务器安装部署 Nginx、Redis、PostgreSQL、Docker
linux·前端
不甘懦弱3 小时前
阿里云搭建flask服务器
服务器·python·flask
Mr. Cao code3 小时前
使用Tomcat Clustering和Redis Session Manager实现Session共享
java·linux·运维·redis·缓存·tomcat
zcz16071278213 小时前
Linux 网络命令大全
linux·运维·网络