上文:CentOS 7 - Securing OpenSSH(一)
如果您只需要从一个 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 个连接,并记录所有连接。
使用密钥进行认证有两个主要好处。第一,如果你使用公/私密钥对进行认证,你无需输入密码(除非你使用密码加密密钥对)。第二,一旦在服务器上建立公/私密钥对认证,你可以完全地禁用 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]-----+
以上操作将在 ~/.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))