RHCSA 系列(八): 加固 SSH,设定主机名及启用网络服务

简介:

作为一名系统管理员,你将经常使用一个终端模拟器来登录到一个远程的系统中,执行一系列的管理任务。你将很少有机会坐在一个真实的(物理)终端前,所以你需要设定好一种方法来使得你可以登录到你需要去管理的那台远程主机上。

事实上,当你必须坐在一台物理终端前的时候,就可能是你登录到该主机的最后一种方法了。基于安全原因,使用 Telnet 来达到以上目的并不是一个好主意,因为穿行在线缆上的流量并没有被加密,它们以明文方式在传送。

另外,在这篇文章中,我们也将复习如何配置网络服务来使得它在开机时被自动开启,并学习如何设置网络和静态或动态地解析主机名。

RHCSA: 安全 SSH 和开启网络服务 – Part 8

RHCSA: 安全 SSH 和开启网络服务 – Part 8

安装并确保 SSH 通信安全

对于你来说,要能够使用 SSH 远程登录到一个 RHEL 7 机子,你必须安装 opensshopenssh-clients 和openssh-servers 软件包。下面的命令不仅将安装远程登录程序,也会安装安全的文件传输工具以及远程文件复制程序:


 
 
  1. # yum update && yum install openssh openssh-clients openssh-servers

注意,也安装上服务器所需的相应软件包是一个不错的主意,因为或许在某个时刻,你想使用同一个机子来作为客户端和服务器。

在安装完成后,如若你想安全地访问你的 SSH 服务器,你还需要考虑一些基本的事情。下面的设定应该出现在文件 /etc/ssh/sshd_config 中。

1、 更改 sshd 守护进程的监听端口,从 22(默认的端口值)改为一个更高的端口值(2000 或更大),但首先要确保所选的端口没有被占用。

例如,让我们假设你选择了端口 2500 。使用 netstat 来检查所选的端口是否被占用:


 
 
  1. # netstat -npltu | grep 2500

假如 netstat 没有返回任何信息,则你可以安全地为 sshd 使用端口 2500,并且你应该在上面的配置文件中更改端口的设定,具体如下:


 
 
  1. Port 2500

2、 只允许协议 2(LCTT 译注:SSHv1 已经被证明不安全,默认情况下 SSHv1 和 SSHv2 都支持,所以应该显示去掉如下配置行的注释,并只支持 SSHv2。):


 
 
  1. Protocol 2

3、 配置验证超时的时间为 2 分钟,不允许以 root 身份登录,并将允许通过 ssh 登录的人数限制到最小:


 
 
  1. LoginGraceTime 2m
  2. PermitRootLogin no
  3. AllowUsers gacanepa

4、 假如可能,使用基于公钥的验证方式而不是使用密码:


 
 
  1. PasswordAuthentication no
  2. RSAAuthentication yes
  3. PubkeyAuthentication yes

这假设了你已经在你的客户端机子上创建了带有你的用户名的一个密钥对,并将公钥复制到了你的服务器上。

配置网络和名称的解析

1、 每个系统管理员都应该对下面这个系统配置文件非常熟悉:

  • /etc/hosts 被用来在小型网络中解析“名称” <---> “IP 地址”。

文件 /etc/hosts 中的每一行拥有如下的结构:


 
 
  1. IP address - Hostname - FQDN

例如,


 
 
  1. 192.168.0.10 laptop laptop.gabrielcanepa.com.ar

2、 /etc/resolv.conf 特别指定 DNS 服务器的 IP 地址和搜索域,它被用来在没有提供域名后缀时,将一个给定的查询名称对应为一个全称域名。

在正常情况下,你不必编辑这个文件,因为它是由系统管理的。然而,若你非要改变 DNS 服务器的 IP 地址,建议你在该文件的每一行中,都应该遵循下面的结构:


 
 
  1. nameserver - IP address

例如,


 
 
  1. nameserver 8.8.8.8

3、 /etc/host.conf 特别指定在一个网络中主机名被解析的方法和顺序。换句话说,告诉名称解析器使用哪个服务,并以什么顺序来使用。

尽管这个文件由几个选项,但最为常见和基本的设置包含如下的一行:


 
 
  1. order bind,hosts

它意味着解析器应该首先查看 resolv.conf 中特别指定的域名服务器,然后到 /etc/hosts 文件中查找解析的名称。

4、 /etc/sysconfig/network 包含了所有网络接口的路由和全局主机信息。下面的值可能会被使用:


 
 
  1. NETWORKING=yes|no
  2. HOSTNAME=value

其中的 value 应该是全称域名FQDN


 
 
  1. GATEWAY=XXX.XXX.XXX.XXX

其中的 XXX.XXX.XXX.XXX 是网关的 IP 地址。


 
 
  1. GATEWAYDEV=value

在一个带有多个网卡的机器中, value 为网关设备名,例如 enp0s3。

5、 位于 /etc/sysconfig/network-scripts 中的文件(网络适配器配置文件)。

在上面提到的目录中,你将找到几个被命名为如下格式的文本文件。


 
 
  1. ifcfg-name

其中 name 为网卡的名称,由 ip link show 返回:

检查网络连接状态

检查网络连接状态

例如:

网络文件

网络文件

除了环回接口(loopback),你还可以为你的网卡指定相似的配置。注意,假如设定了某些变量,它们将为这个指定的接口覆盖掉 /etc/sysconfig/network 中定义的默认值。在这篇文章中,为了能够解释清楚,每行都被加上了注释,但在实际的文件中,你应该避免加上注释:


 
 
  1. HWADDR=08:00:27:4E:59:37 ### 网卡的 MAC 地址
  2. TYPE=Ethernet ### 连接类型
  3. BOOTPROTO=static ### 这代表着该网卡指定了一个静态地址。
  4. ### 如果这个值指定为 dhcp,这个网卡会从 DHCP 服务器获取 IP 地址,并且就不应该出现以下两行。
  5. IPADDR=192.168.0.18
  6. NETMASK=255.255.255.0
  7. GATEWAY=192.168.0.1
  8. NM_CONTROLLED=no ### 应该给以太网卡设置,以便可以让 NetworkManager 可以修改这个文件。
  9. NAME=enp0s3
  10. UUID=14033805-98ef-4049-bc7b-d4bea76ed2eb
  11. ONBOOT=yes ### 操作系统会在启动时打开这个网卡。

设定主机名

在 RHEL 7 中, hostnamectl 命令被同时用来查询和设定系统的主机名。

要展示当前的主机名,输入:


 
 
  1. # hostnamectl status

检查系统的主机名

检查系统的主机名

要更改主机名,使用


 
 
  1. # hostnamectl set-hostname [new hostname]

例如,


 
 
  1. # hostnamectl set-hostname cinderella

要想使得更改生效,你需要重启 hostnamed 守护进程(这样你就不必因为要应用更改而登出并再登录系统):


 
 
  1. # systemctl restart systemd-hostnamed

设定系统主机名

设定系统主机名

另外, RHEL 7 还包含 nmcli 工具,它可被用来达到相同的目的。要展示主机名,运行:


 
 
  1. # nmcli general hostname

且要改变主机名,则运行:


 
 
  1. # nmcli general hostname [new hostname]

例如,


 
 
  1. # nmcli general hostname rhel7

使用 nmcli 命令来设定主机名

使用 nmcli 命令来设定主机名

在开机时开启网络服务

作为本文的最后部分,就让我们看看如何确保网络服务在开机时被自动开启。简单来说,这个可通过创建符号链接到某些由服务的配置文件中的 [Install] 小节中指定的文件来实现。

以 firewalld(/usr/lib/systemd/system/firewalld.service) 为例:


 
 
  1. [Install]
  2. WantedBy=basic.target
  3. Alias=dbus-org.fedoraproject.FirewallD1.service

要开启该服务,运行:


 
 
  1. # systemctl enable firewalld

另一方面,要禁用 firewalld,则需要移除符号链接:


 
 
  1. # systemctl disable firewalld

在开机时开启服务

在开机时开启服务

总结

在这篇文章中,我们总结了如何安装 SSH 及使用它安全地连接到一个 RHEL 服务器;如何改变主机名,并在最后如何确保在系统启动时开启服务。假如你注意到某个服务启动失败,你可以使用 systemctl status -l [service] 和 journalctl -xn 来进行排错。


本文来自云栖社区合作伙伴“Linux中国”,原文发布日期:2015-09-23  

目录
相关文章
|
3月前
|
Linux 网络安全 Docker
盘古栈云,创建带ssh服务的linux容器
创建带ssh服务的linux容器
335 146
|
4月前
|
Ubuntu 网络安全 数据安全/隐私保护
搭建SSH服务于RK3399平台上的Ubuntu 18.04,实现远程连接
以上步骤涵盖从安 装 到配制再至实际使 用户建立Ssh 连接所需知识点 。务必注意,在对外提供Ssh 访问
218 2
|
7月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
410 61
|
7月前
|
应用服务中间件 网络安全 数据安全/隐私保护
网关服务器配置指南:实现自动DHCP地址分配、HTTP服务和SSH无密码登录。
哇哈哈,道具都准备好了,咱们的魔术秀就要开始了。现在,你的网关服务器已经魔法满满,自动分配IP,提供网页服务,SSH登录如入无人之境。而整个世界,只会知道效果,不会知道是你在幕后操控一切。这就是真正的数字世界魔法师,随手拈来,手到擒来。
388 14
|
Ubuntu 网络协议 Unix
02理解网络IO:实现服务与客户端通信
网络IO指客户端与服务端通过网络进行数据收发的过程,常见于微信、QQ等应用。本文详解如何用C语言实现一个支持多客户端连接的TCP服务端,涉及socket编程、线程处理及通信流程,并分析“一消息一线程”模式的优缺点。
387 0
|
8月前
|
网络协议 安全 Devops
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
330 4
|
9月前
|
机器学习/深度学习 人工智能 安全
从攻防演练到AI防护:网络安全服务厂商F5的全方位安全策略
从攻防演练到AI防护:网络安全服务厂商F5的全方位安全策略
291 8
|
12月前
|
安全 网络协议 网络安全
【Azure APIM】APIM服务配置网络之后出现3443端口不通,Management Endpoint不健康状态
如果没有关联的网络安全组,则阻止所有网络流量通过子网和网络接口。
264 30
|
11月前
|
云安全 人工智能 安全
公共云网络安全即服务!阿里云稳居市占率第一!
公共云网络安全即服务!阿里云稳居市占率第一!
|
算法 安全 网络安全
网络安全服务
机密主要利用密码学技术加密文件实现,完整主要利用验证码/Hash技术,可用**主要灾备来保障。 网络环境下的身份鉴别,当然还是依托于密码学,一种可以使用口令技术,另一种则是依托物理形式的鉴别,如身份卡等。其实更为安全的是实施多因子的身份认证,不只使用一种方式。数字签名可以用来保证信息的完整性,比如RSA就可以用于数字签名: 若A向B发送信息m则先用自己的保密密钥(私钥)对m加密,然后用B的公钥第二次加密,发送个B后,B先用自己的私钥解密一次,再用A的公钥解密即可。 Kerberos使用对称密码算法来实现通过可信第三方密钥分发中心的认证服务,已经成为工业界的事实标准。
228 3