大多數企業伺服器是通過遠端登入的方式來進行管理的,如何更加安全、高效的遠端管理網絡中的各種伺服器是作為網絡管理人員的必修課。這裡将針對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>> help</code>
<code>sftp</code><code>> 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 >> /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)

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

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

若兩個檔案中均無比對政策,則預設允許通路
實際使用TCP Wrappers機制時,較為寬松的政策可以是“允許所有,拒絕個别”,較為嚴格的可以是“允許個别,拒絕所有”。前者隻需在hosts.deny檔案中添加相應的政策;而後者需要在hosts.allow中添加允許政策外,還要在hosts.deny檔案中添加“ALL:ALL”的拒絕政策
例如:
1)

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

禁止其他所有位址通路受保護的服務
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,如需轉載請自行聯系原作者