天天看點

SSH遠端通路及控制

    大多數企業伺服器是通過遠端登入的方式來進行管理的,如何更加安全、高效的遠端管理網絡中的各種伺服器是作為網絡管理人員的必修課。這裡将針對Linux環境使用安全的SSH遠端管理途徑,以及通過TCP Wrappers機制為應用提供通路控制

    SSH(secure shell)是一種安全的通道協定,主要用來實作字元界面的遠端登入、遠端複制等功能。SSH協定對通信雙方的資料傳輸進行了加密處理,其中包括使用者登入時輸入的使用者密碼,與早期的TELNET、RSH、RCP等應用相比,SSH協定提供了更好的安全性

配置OpenSSH服務端

    在RHEL系統中,OpenSSH伺服器的openssh等軟體包預設已經安裝,并已添加為系統服務,隻需配置并啟動sshd服務,大部分使用者(擁有合法的登入shell)都可以遠端登入系統。sshd的配置檔案位于/etc/ssh/sshd_config目錄下,正确調整相關配置項,有助于提高sshd遠端登入的安全性

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<code>[root@localhost ~]</code><code># vim /etc/ssh/sshd_config </code>

<code>Port 22                              </code><code>//</code><code>預設端口号22,必要時可修改</code>

<code>ListenAddress 192.168.1.1            </code><code>//</code><code>監聽位址</code>

<code>Protocol 2                           </code><code>//</code><code>使用SSH v2協定,比v1更安全</code>

<code>UseDNS no                            </code><code>//</code><code>禁用DNS反向解析,提高伺服器響應速度</code>

<code>LoginGraceTime 2m                    </code><code>//</code><code>登入驗證時間為2分鐘</code>

<code>PermitRootLogin </code><code>yes</code>                  <code>//</code><code>禁止root使用者登入,用普通使用者登入後,</code><code>su</code><code>切換為root更加安全</code>

<code>MaxAuthTries 6                       </code><code>//</code><code>最大重試次數為6</code>

<code>PermitEmptyPasswords no              </code><code>//</code><code>禁止空密碼使用者登入</code>

<code>AllowUsers ysf [email protected]     </code><code>//</code><code>當隻允許某些使用者登入時</code>

<code>DenyUsers yangshufan                  </code><code>//</code><code>當隻禁止某些使用者登入時,注意兩者不要同時使用</code>

<code>PasswordAuthentication </code><code>yes</code>             <code>//</code><code>啟用密碼驗證</code>

<code>PubkeyAuthentication </code><code>yes</code>               <code>//</code><code>啟用密鑰對驗證</code>

<code>AuthorizedKeysFile      .</code><code>ssh</code><code>/authorized_keys</code>      <code>//</code><code>指定公鑰庫資料檔案</code>

<code>[root@localhost ~]</code><code># service sshd reload            //配置完後,需要更新服務</code>

<code>重新載入 sshd:                                            [确定]</code>

    當密碼驗證、密鑰對驗證都啟用時,伺服器将優先使用密鑰對驗證。對于安全性較高的伺服器,建議禁止密碼驗證方式,隻允許密鑰對驗證方式;若沒有特殊要求,則兩種都可以啟用

使用SSH用戶端程式

    在Linux系統中,SSH用戶端預設已安裝,其中包括ssh、scp、sftp等指令。實際上,任何支援SSH協定的用戶端程式都可以與OpenSSH伺服器進行通信,如Windows平台中的Xshell、SecureCRT、Putty等圖形工具。

(1)ssh遠端登入

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

<code>[root@localhost ~]</code><code># ssh [email protected]           //如果不是預設端口,需要使用"-p 端口号"</code>

<code>Are you sure you want to </code><code>continue</code> <code>connecting (</code><code>yes</code><code>/no</code><code>)? </code><code>yes</code>         <code>//</code><code>第一次連接配接,必須輸入</code><code>yes</code>

<code>[email protected]'s password:                       </code><code>//</code><code>輸入密碼</code>

<code>Last login: Thu Dec 28 05:01:52 2017 from 192.168.1.2</code>

<code>[ysf@localhost ~]$</code>

(2)scp遠端複制

    通過scp指令可以利用SSH安全連接配接與遠端主機互相複制檔案

<code>[root@localhost ~]</code><code># scp /etc/passwd  [email protected]:/root/passwd.txt       //将本地檔案複制到遠端主機</code>

<code>[email protected]'s password: </code>

<code>passwd</code>                                                <code>100% 1915     1.9KB</code><code>/s</code>   <code>00:00  </code>

<code>[root@localhost ~]</code><code># scp -r [email protected]:/home/   /opt                  //将遠端主機的home目錄複制到本地</code>

<code>.bash_profile                                         100%  176     0.2KB</code><code>/s</code>   <code>00:00    </code>

<code>.bash_logout                                          100%   18     0.0KB</code><code>/s</code>   <code>00:00    </code>

<code>[root@localhost ~]</code><code>#</code>

(3)sftp安全FTP

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

<code>[root@localhost ~]</code><code># sftp [email protected]</code>

<code>Connecting to 192.168.1.1...</code>

<code>[email protected]'s password: </code>

<code>sftp</code><code>&gt; help</code>

<code>sftp</code><code>&gt; bye</code>

使用密鑰對驗證SSH的方式

    密鑰對驗證方式可以為遠端登入提供更好的安全性,下面将介紹在Linux伺服器、客戶機中建構密鑰對驗證SSH體系的基本過程,如下圖所示:

1. 在客戶機建立密鑰對

<code>[yang@localhost ~]$ </code><code>ssh</code><code>-keygen -t rsa                    </code><code>//ssh-keygen</code><code>工具為目前使用者建立密鑰對檔案,rsa為加密算法,也可以為dsa加密算法</code>

<code>Generating public</code><code>/private</code> <code>rsa key pair.</code>

<code>Enter </code><code>file</code> <code>in</code> <code>which</code> <code>to save the key (</code><code>/home/yang/</code><code>.</code><code>ssh</code><code>/id_rsa</code><code>):            </code><code>//</code><code>指定私鑰位置,按Enter鍵确定</code>

<code>Created directory </code><code>'/home/yang/.ssh'</code><code>.</code>

<code>Enter passphrase (empty </code><code>for</code> <code>no passphrase):                              </code><code>//</code><code>設定私鑰密碼,也可以設定為空,實作無密碼登入,但使用密碼更加安全</code>

<code>Enter same passphrase again:                                             </code><code>//</code><code>确認密碼</code>

<code>Your identification has been saved </code><code>in</code> <code>/home/yang/</code><code>.</code><code>ssh</code><code>/id_rsa</code><code>.</code>

<code>[yang@localhost ~]$ </code><code>ls</code> <code>-lh ~/.</code><code>ssh</code><code>/id_rsa</code><code>*                           </code><code>//</code><code>确認生成的密鑰檔案</code>

<code>-rw-------. 1 yang yang 1.8K 12月 29 08:47 </code><code>/home/yang/</code><code>.</code><code>ssh</code><code>/id_rsa</code>          <code>//</code><code>私鑰檔案,不能洩露</code>

<code>-rw-r--r--. 1 yang yang  408 12月 29 08:47 </code><code>/home/yang/</code><code>.</code><code>ssh</code><code>/id_rsa</code><code>.pub      </code><code>//</code><code>公鑰檔案,用來提供給伺服器</code>

2. 将公鑰上傳至伺服器

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

    上面兩個步驟有兩種方式完成導入:

方式一:指令格式如下

ssh-copy-id    -i    公鑰檔案    目标主機使用者@目标主機

<code>[yang@localhost ~]</code><code># ssh-copy-id -i .ssh/id_rsa.pub [email protected]</code>

<code>[email protected]'s password:              </code><code>//</code><code>輸入ysf的密碼</code>

<code>Now try logging into the machine, with </code><code>"ssh '[email protected]'"</code><code>, and check </code><code>in</code><code>:</code>

<code>  </code><code>.</code><code>ssh</code><code>/authorized_keys</code>

<code>to </code><code>make</code> <code>sure we haven</code><code>'t added extra keys that you weren'</code><code>t expecting.</code>

<code>[ysf@localhost ~]</code><code>#        //驗證密碼後,會将公鑰自動添加到宿主目錄下的.ssh/authorized_keys</code>

方式二:使用FTP、scp等方式上傳到伺服器,在将檔案導入到目标使用者的公鑰資料庫

<code>[yang@localhost ~]$ </code><code>scp</code> <code>.</code><code>ssh</code><code>/id_rsa</code><code>.pub [email protected]:</code><code>/tmp</code>         <code>//</code><code>使用</code><code>scp</code><code>指令上傳到伺服器</code>

<code>[email protected]'s password:                                          </code><code>//</code><code>輸入伺服器root的密碼</code>

<code>Could not chdir to home directory </code><code>/home/ysf</code><code>: No such </code><code>file</code> <code>or directory</code>

<code>id_rsa.pub                                            100%  408     0.4KB</code><code>/s</code>   <code>00:00    </code>

<code>[yang@localhost ~]$ </code><code>ssh</code>  <code>[email protected]                    </code><code>//</code><code>遠端登入到伺服器</code>

<code>[root@localhost ~]</code><code># mkdir /home/ysf/.ssh                //将公鑰導入到公鑰資料庫</code>

<code>[root@localhost ~]</code><code># cat /tmp/id_rsa.pub &gt;&gt; /home/ysf/.ssh/authorized_keys       </code>

<code>[root@localhost ~]</code><code># ls -l /home/ysf/.ssh/authorized_keys          //注意:公鑰庫檔案的權限必須是root使用者或宿主使用者</code>

<code>-rw-rw-r--. 1 root root 408 12月 29 10:01 .</code><code>ssh</code><code>/authorized_keys</code>

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

<code>[yang@localhost ~]$ </code><code>ssh</code> <code>[email protected]</code>

<code>Enter passphrase </code><code>for</code> <code>key </code><code>'/home/yang/.ssh/id_rsa'</code><code>:            </code><code>//</code><code>輸入私鑰密碼,如未設定密碼,則直接登入伺服器</code>

<code>Last login: Fri Dec 29 10:57:12 2017 from 192.168.1.2</code>

TCP Wrappers通路控制

    TCP Wrappers将其他TCP服務程式包裹起來,增加了一個安全檢測過程,外來的連接配接請求必須先通過這層安全檢測,獲得許可後才能通路真正的服務程式。對于大多數Linux發行版,TCP Wrappers是預設提供的功能。

1. 政策的配置格式

    TCP Wrappers機制的保護對象為各種網絡服務程式,針對通路服務程式的客戶機位址進行通路控制。對應的政策檔案為/etc/hosts.allow和/etc/hosts.deny,分别提供允許和拒絕的要求

配置格式如下:

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

其中,

(1)服務程式清單分為以下幾類:

ALL:代表所有服務

單個服務程式:如“sshd”

多個服務程式組成的清單:如“httpd,sshd”,以逗号分隔

(2)客戶機位址清單分為以下幾類:

ALL:代表任何客戶機服務

LOCAL:代表本機位址

單個IP位址:如“192.168.1.1”

網絡段位址:如“192.168.1.0/255.255.255.0”或者“192.168.1.”

域名:如“.ysf.com”比對ysf.com域中的所有主機

通配符*、?:前者代表任意長度字元,後者僅代表一個字元

多個客戶機位址組成的清單:如“192.168.1.1,172.16.10.,.ysf.com”

2. 通路控制的基本原則

(1)

SSH遠端通路及控制

先檢查hosts.allow,找到比對則允許通路

(2)

SSH遠端通路及控制

否則再檢查hosts.deny,找到則拒絕通路

(3)

SSH遠端通路及控制

若兩個檔案中均無比對政策,則預設允許通路

    實際使用TCP Wrappers機制時,較為寬松的政策可以是“允許所有,拒絕個别”,較為嚴格的可以是“允許個别,拒絕所有”。前者隻需在hosts.deny檔案中添加相應的政策;而後者需要在hosts.allow中添加允許政策外,還要在hosts.deny檔案中添加“ALL:ALL”的拒絕政策

例如:

1)

SSH遠端通路及控制

僅允許從主機61.63.65.67,網段192.168.2.0/24 位址通路sshd服務 ,

SSH遠端通路及控制

禁止其他所有位址通路受保護的服務

2)拒絕192.168.2.2通路httpd服務

<code>[root@localhost ~]</code><code># vim /etc/hosts.allow</code>

<code>sshd:61.63.65.67,192.168.2.*</code>

<code>[root@localhost ~]</code><code># vim /etc/hosts.deny</code>

<code>sshd:ALL</code>

<code>httpd:192.168.2.2</code>

<code></code>

本文轉自 楊書凡 51CTO部落格,原文連結:http://blog.51cto.com/yangshufan/2055727,如需轉載請自行聯系原作者