CentOS 7 - Securing OpenSSH(二)

文章目录

  • Securing OpenSSH
    • 6. 在防火墙处过滤 SSH
    • 7. 使用公有/私有密钥进行身份认证
  • 参考

Securing OpenSSH

上文:CentOS 7 - Securing OpenSSH(一)

6. 在防火墙处过滤 SSH

如果您只需要从一个 IP 地址进行远程访问(比如从工作地址到您的家庭服务器),那么考虑在您的路由器中添加防火墙规则来过滤防火墙上的连接,将访问限制为仅该特定的 IP 地址。

在防火墙服务中使用 rich-rules 来允许 SSH 只在特定的端口上。源地址可以是单个地址,也可以是带位掩码的基址:

# use 'ssh' or 'ssh-custom' depending on which are enabled and available
$ firewall-cmd --permanent --remove-service="ssh" 
$ firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="72.232.194.162" service name="ssh-custom" accept'
$ firewall-cmd --reload

SSH also natively supports TCP wrappers and access to the ssh service may be similarly controlled using hosts.allow and hosts.deny.

如果您不能限制源 IP 地址,并且必须全局打开 SSH 端口,那么可以限制其尝试连接的次数:

# use 'ssh' or 'ssh-custom' depending on which are enabled and available
$ firewall-cmd --permanent --remove-service="ssh"
$ firewall-cmd --permanent --add-rich-rule='rule service name="ssh-custom" accept limit value="4/m" log'
$ firewall-cmd --reload

第一个命令删除了更宽松的服务规则,第二个命令设置了一条规则,每分钟只接受 4 个连接,并记录所有连接。

7. 使用公有/私有密钥进行身份认证

使用密钥进行认证有两个主要好处。第一,如果你使用公/私密钥对进行认证,你无需输入密码(除非你使用密码加密密钥对)。第二,一旦在服务器上建立公/私密钥对认证,你可以完全地禁用 SSH 服务的密码认证,这意味着没有已授权的私钥,你将无法获得访问权限 – 因此,就没有密码破解攻击。

创建公/私密钥对并将其安装在使用 SSH 服务的服务器上的步骤是相当简单的。

首先,在你的客户端上创建一个公/私密钥对:

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:pT1KVqS9SdC9MUkCcR1JfRGDS8NhO8dj2G3uR3mbhU0 [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|        +++==Bo+o|
|         *..O=* +|
|        . = .BoBE|
|         * o..+*o|
|        S =   ..*|
|       o . .   o=|
|        .      oo|
|                .|
|                 |
+----[SHA256]-----+
  • 第 2 行:输入一个文件名,用于保存私钥。如果直接按回车键,则使用默认路径;
  • 第 4 行:输入密码,用于加密私钥。如果不提供密码直接按回车键,则每一个使用你的账户的人都可以访问该私有密钥,这是极其危险的;
  • 第 5 行:确认上一步骤的密码。

以上操作将在 ~/.ssh 目录中创建两个文件:id_rsa(私钥)和 id_rsa.pub(公钥)。

接着,设置 ~/.ssh 目录及私钥的权限:

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa 

然后,使用 scp [[user@]host1:]file1 ... [[user@]host2:]file2 命令将公钥复制到服务器上,并将其安装到 authorized_keys 列表:

$ cat id_rsa.pub >> ~/.ssh/authorized_keys

注意:一旦你成功导入公钥,就可以将其删除。

and finally set file permissions on the server:

最后,设置 ~/.ssh 目录及 authorized_keys 列表的权限:

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys 

如果 /etc/ssh/sshd_config 文件中的 StrictModes 值为 yes(默认),则以上权限是必须的。

确保正确的 SELinux 环境被设置:

$ restorecon -Rv ~/.ssh 

现在,当你登录服务器时,你将不会被提示输入密码(除非你在创建密钥对时输入了密码)。默认情况下,SSH 将首先尝试使用密钥对进行认证。如果没有找到密钥或者认证失败,那么 SSH 将尝试使用密码认证。

一旦你确认使用公/私密钥对能够成功地登录到服务器,你就可以完全地禁用密码认证,只需在 /etc/ssh/sshd_config 文件中添加:

# Disable password authentication forcing use of keys
PasswordAuthentication no

参考

Securing OpenSSH

CentOS 7 - 在两台主机之间复制文件(scp (security copy))

你可能感兴趣的:(Linux,CentOS,ssh,centos,linux)