天天看點

CentOS 7配置SSH遠端通路及控制

在實際生産環境中,不可能一直在伺服器本地對伺服器進行相應的管理,大多數企業伺服器都是通過遠端登入的方式進行管理的。當需要從一個工作站管理數以百計的伺服器主機時,遠端維護的方式将更占優勢。

SSH 簡介

SSH(Secure Shell)是一種安全通道協定,主要用來實作字元界面的遠端登入、遠端複制等功能。SSH協定對通信雙方的資料傳輸進行加密處理,其中包括使用者登入時輸入的使用者密碼。比以往的Telnet(遠端登入)、RSH(遠端執行指令)等傳統的方式相比,SSH協定提供了更好的安全性。

一、配置OpenSSH服務端

OpenSSH是實作SSH協定的開源軟體項目。在CentOS 7.3系統中。OpenSSH伺服器由openssh、openssh-server等軟體包提供(預設已安裝),并已将sshd添加為标準的系統服務。

1.服務監聽選項

sshd服務使用的預設端口号為22,必要時建議修改此端口号,并指定監聽服務的具體IP位址,以提高在網絡中的隐蔽性。除此之外,SSH協定的版本選用v2比v1的安全性要更好,禁用DNS反向解析可以提高伺服器的響應速度。

[root@localhost ~]# vim /etc/ssh/sshd_config                       //修改sshd服務的主配置檔案
                              …………                          //省略部分内容
Port 22                                                          //監聽端口為22
ListenAddress 0.0.0.0                                  //監聽位址為0.0.0.0,表示全部監聽
Protocol 2                                                    //使用SSH v2的版本
UseDNS no                                                 //禁用DNS反向解析,提高響應速度
                              …………                        //省略部分内容
[root@localhost ~]# systemctl restart sshd                        //重新啟動sshd服務            

複制

2.使用者登入控制

sshd服務預設允許root使用者登入,但在網絡中是很大的安全隐患,普遍的做法是普通使用者,然後切換到root使用者。

[root@localhost ~]# vim /etc/ssh/sshd_config                         //修改sshd服務的主配置檔案
                              …………                  //省略部分内容
LoginGraceTime 2m                                        //登入驗證時間為2分鐘
PermitRootLogin no                                        //禁止root使用者登入
MaxAuthTries 6                                               //最大重試次數為6次
PermitEmptyPasswords no                           //禁止空密碼登入
                              …………                          //省略部分内容
[root@localhost ~]# systemctl restart sshd                         //重新啟動sshd服務            

複制

當希望隻允許或禁止某個使用者登入時,可以使用AllowUsers或DenyUsers配置,兩者用法類似(但是注意不要同時使用)。例如允許xiaoli和xiaozhang使用者登入,且其中xiaozhang使用者僅能從IP位址為192.168.1.2的位址遠端登入。

[root@localhost ~]# vim /etc/ssh/sshd_config                       //修改sshd服務的主配置檔案
                              …………                                       //省略部分内容
AllowUsers xiaoli [email protected]                         //多個使用者之間用空格進行分隔
[root@localhost ~]# systemctl restart sshd                         //重新啟動sshd服務            

複制

3.登入驗證方式

sshd服務支援兩種驗證方式: 1.密碼驗證:對伺服器中的本地系統使用者的登入名稱、密碼進行驗證。這種方式使用最為簡便,但是系統使用者密碼存在可能遭遇密碼窮舉(暴力破解); 2.密鑰對驗證:要求提供相比對的密鑰資訊才能通過驗證。通常先在用戶端中建立一對密鑰,然後将公鑰檔案存放到伺服器指定位置。遠端登入時,系統将使用公鑰、私鑰進行加密/解密驗證,這種方式不易被假冒,且可以免互動登入,在Shell中被廣泛應用。

當密碼驗證、密鑰對驗證都啟用時,伺服器将優先使用密鑰對驗證!沒有特殊要求,建議兩種方式都啟用!

[root@localhost ~]# vim /etc/ssh/sshd_config                       //修改sshd服務的主配置檔案
                              …………                             //省略部分内容
PasswordAuthentication yes                                                //啟用密碼驗證         
PubkeyAuthentication yes                                                    //啟用密鑰對驗證
AuthorizedKeysFile      .ssh/authorized_keys                      //指定公鑰庫檔案
                              …………                            //省略部分内容
[root@localhost ~]# systemctl restart sshd                         //重新啟動sshd服務            

複制

二、使用SSH用戶端程式

在CentOS 7.3系統中,OpenSSH用戶端由openssh-clients軟體包提供(預設已安裝),其中包括ssh遠端登入指令,以及scp、sftp遠端複制和檔案傳輸指令等。

1.指令程式(ssh、scp、sftp)應用

1)ssh遠端登入

通過ssh指令可以遠端登入sshd服務,為使用者提供一個安全的Shell環境,以便對伺服器進行管理和維護!

[root@kehuduan ~]# ssh [email protected]           

複制

CentOS 7配置SSH遠端通路及控制

如果sshd伺服器使用非預設的端口号(比如2222)則需要使用“-p”選項指定端口号。

[root@kehuduan ~]# ssh -p 2222 [email protected]
[email protected]'s password:                                       //輸入密碼
[xiaozhang@fuwuduan ~]$                                                       //登入成功           

複制

2)scp遠端複制

[root@kehuduan ~]# scp [email protected]:/etc/passwd /mnt
//從伺服器下載下傳檔案
[email protected]'s password: 
passwd                                               100% 2360     2.3KB/s   00:00    
[root@kehuduan ~]# scp 123.txt [email protected]:/mnt
//從用戶端上傳檔案
[email protected]'s password: 
123.txt                                              100%    0     0.0KB/s   00:00           

複制

如果需要指定端口,使用“-P”選項!

3)sftp安全FTP

通過sftp指令可以利用SSH安全連接配接與遠端主機上傳、下載下傳檔案,采用了與FTP類似的登入過程和互動式環境,便于目錄資源管理。

[root@kehuduan ~]# sftp [email protected]
[email protected]'s password: 
Connected to 192.168.1.1.
sftp> put 456.txt                                      //上傳檔案
Uploading 456.txt to /root/456.txt
456.txt                                              100%    0     0.0KB/s   00:00    
sftp> get /root/789.txt                             //下載下傳檔案
Fetching /root/789.txt to 789.txt
sftp> bye           

複制

2.圖形化工具

在Windows主機上可以使用一些列圖形化工具Xshell、SecureCRT、Putty等圖形工具,支援Telnet、SSH、SFTP等協定,友善對Linux主機進行遠端管理。這些圖形化工具都提供了中文界面、功能和操作比較簡單,這裡不再做深入介紹。

三、建構密鑰對驗證的SSH體系

密鑰對驗證方式可以為遠端登入提供提供更好的安全性,流程圖:

CentOS 7配置SSH遠端通路及控制

1)第一種實作方法:

1.在用戶端建立密鑰對

在LInux用戶端中,通過ssh-keygen工具為目前使用者建立密鑰對檔案,可用的加密算法為ECDSA或DSA(ssh-keygen指令的“-t”選項用于指定算法類型)

root@kehuduan ~]# su - xiaowang                                  //切換到使用者xioawang
[xiaowang@kehuduan ~]$ ssh-keygen -t ecdsa              //建立基于ECDSA算法的SSH密鑰對
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/xiaowang/.ssh/id_ecdsa):                  //指定私鑰存放位置
Created directory '/home/xiaowang/.ssh'.
Enter passphrase (empty for no passphrase):                                 //設定私鑰短語
Enter same passphrase again:                                                        //确認所設定的短語
Your identification has been saved in /home/xiaowang/.ssh/id_ecdsa.
Your public key has been saved in /home/xiaowang/.ssh/id_ecdsa.pub.
The key fingerprint is:
13:c2:03:63:bc:2e:d8:7e:be:f1:1b:1d:95:6b:4c:49 xiaowang@kehuduan
The key's randomart image is:
+--[ECDSA  256]---+
|   .+     E      |
|   ..+   . o     |
|     .+ . =      |
|    .  o = .     |
| o .    S +      |
|. o .  . +       |
| . .. . .        |
|  . .o .         |
|   oo.o.         |
+-----------------+
[xiaowang@kehuduan ~]$ ls -lh ~/.ssh/id_ecdsa*
-rw-------. 1 xiaowang xiaowang 227 8月   8 16:45 /home/xiaowang/.ssh/id_ecdsa
-rw-r--r--. 1 xiaowang xiaowang 179 8月   8 16:45 /home/xiaowang/.ssh/id_ecdsa.pub           

複制

新生成的密鑰對檔案中,id_ecdsa是私鑰檔案 ,權限為600,需妥善保管;id_ecdsa.pub是公鑰檔案,用來提供給SSH伺服器。

2.将公鑰檔案上傳至伺服器

将剛才生成的公鑰檔案上傳到服務端使用者的公鑰資料庫中。

[xiaowang@kehuduan ~]$ scp ~/.ssh/id_ecdsa.pub [email protected]:/mnt
[email protected]'s password:                         //輸入密碼
id_ecdsa.pub                                         100%  179     0.2KB/s   00:00 
//上傳成功           

複制

3.在伺服器中導入公鑰文本

在伺服器中,目标使用者(指用阿裡遠端登入的賬号)的公鑰資料庫位于~/.ssh目錄,預設的檔案名“authorized_keys”,需要自己手動建立!

[root@fuwuduan ~]# mkdir /home/xiaozhang/.ssh
[root@fuwuduan ~]# cat /mnt/id_ecdsa.pub >> /home/xiaozhang/.ssh/authorized_keys
[root@fuwuduan ~]# cat /home/xiaozhang/.ssh/authorized_keys 
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJmtmVbjnjH6NbWBRQcFjbYHoDBILQYclqrIHbVe0oyA15IXd+WBGsOcX3FYX8FYnIPHfL36Auj7aWb2MuVqmac= xiaowang@kehuduan           

複制

4.在用戶端使用密鑰對驗證

[xiaowang@kehuduan ~]$ ssh [email protected]

Last login: Thu Aug 8 16:03:33 2019 from 192.168.1.2

//不用輸入密碼,即可連接配接,實驗完成!

2)第二種實作方法:

[root@kehuduan ~]# ssh-keygen -t ecdsa
//以root為例,生成root使用者的密鑰對檔案
[root@kehuduan ~]# ssh-copy-id -i ~/.ssh/id_ecdsa.pub [email protected]
//“-i”用來指定公鑰檔案,這一步把剛才第二、三步結合在一起
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:                        //輸入服務端root使用者密碼

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

[root@kehuduan ~]# ssh [email protected]
Last login: Thu Aug  8 17:03:20 2019
//驗證明驗效果           

複制

使用密鑰對驗證的方式登入時,不需要知道目标使用者的面膜,而是驗證用戶端使用者的私鑰短語并檢查私鑰、公鑰是否配對,這樣安全性更好。

四、TCP Wrappers通路控制

1)TCP Wrappers概述

TCP Wrappers将TCP服務程式“包裹”起來,代為堅挺TCP服務程式的端口,增加了一個安全監測過程,外聯的連接配接請求必須先通過這層安全監測,獲得許可證才能通路真正的服務程式。如圖:

CentOS 7配置SSH遠端通路及控制

對于大多數Linux發行版,TCP Wrappers是預設提供的功能。CentOS 7.3使用的軟體包是tcp_wrappers-7.6-77.el7.x86_64.rpm。

對應TCP Wrappers保護機制的兩種實作方式: 1.直接使用tcpd程式對其他服務程式進行保護,需要運作tcpd; 2.由其他網絡服務程式調用libwrap.so.*連結庫,不需要運作tcpd程式。 通常,連結庫方式的應用要更為廣泛,也更有效率。

2)TCP Wrappers的通路政策

TCP Wrappers機制的保護對象為各種網絡服務程式,針對通路服務的用戶端位址進行通路控制,對應的兩個政策檔案為/etc/hosts.allow和/etc/hosts.deny ,分别用阿裡設定允許和拒絕的政策。

1、政策配置格式

服務清單:客戶機位址清單           

複制

伺服器程式清單,用戶端位址清單之間用冒号進行分隔,在清單内的多個項之間用逗号分隔。

1)服務程式清單

CentOS 7配置SSH遠端通路及控制

2)用戶端位址清單

CentOS 7配置SSH遠端通路及控制

2、政策的應用順序

先檢查hosts.allow,找到比對則允許通路 否則再檢查hosts.deny,找到則拒絕通路 若兩個檔案中均無比對政策,則預設允許通路

3、配置執行個體

要求:希望僅允許192.168.1.0網段的主機通路sshd服務

[root@fuwuduan ~]# vim /etc/hosts.allow 
sshd:192.168.1.
[root@fuwuduan ~]# vim /etc/hosts.deny 
sshd:ALL           

複制