天天看點

OpenSSH服務配置日志

架設OpenSSH伺服器完全日志

簡介:

        之前在架設telnet服務時提到,telnet服務使用明文來傳輸資料,存在着嚴重的安全的隐患,在實際應用中并不推薦使用,而是應該使用經過加密後的才傳輸資料的安全的終端。OpenSSH就是在不安全的網絡環境中采用加密機制來保證傳輸資料安全的佼佼者之一。

OpenSSH的前身是SSH(Secure Shell),它是一種建立在TCP上的網絡協定,允許通信雙方通過一種安全的通道交換資料,保證資料的安全。OpenSSh的功能有:

1. 替代不安全的網絡通訊工具(如:telnet);

2. 提高基于密碼的安全安全驗證和基于密鑰的安全驗證;

3. 通過端口轉發方式傳輸telnet、VNC等不安全的網絡通訊資料,也稱為加密隧道傳輸。

配置流程:

配置環境:

伺服器

用戶端

作業系統

CentOS 5.5

Ubuntu 10.04

Ip位址

192.168.136.128

192.168.136.130

iptables

開啟

selinux

配置目标:

1. OpenSSH伺服器的基本配置與運作;

2. 基于密鑰的認證方式登入伺服器;

3. 使用端口轉發功能(加密隧道)傳輸telnet服務的資料

一.OpenSSH伺服器的基本配置與運作:

首先,提供了OpenSSH服務的rpm包有:openssh, openssh-clients, openssh-server;确認這些軟體包的安裝:

yum install openssh openssh-clients openssh-server –y

OpenSSH服務配置日志

軟體包安裝成功後,有以下重要的檔案被安裝:

OpenSSH的啟動程序:/usr/bin/sshd

OpenSSh的啟動腳本:/etc/init.d/sshd

配置目錄:

全局配置目錄:/etc/ssh/*        個人配置目錄:$HOME/.ssh/*

ps: sshd的主配置檔案是/etc/ssh/sshd_config

配置OpenSSH用戶端:

OpenSSH的核心配置檔案時/etc/ssh/ssh_config,内容如下:

OpenSSH服務配置日志

逐行分析一下:

Host *

Host指令指出一個了主機的範圍,随後所有的配置指令隻對這個主機範圍内的計算機生效,直到碰到下一個Host指令為止,*表示所有的主機;

ForwardAgent no

設定與認證伺服器的連接配接是否轉發給遠端計算機

ForwardX11 no

使用Xwindows的使用者是否想自動地将x11的會話通過安全通道和DISPLAY設定重定向到遠端主機;對于不使用圖形界面的計算機就應該設為no

RhostsRSAAuthentication no

設定是否使用經過RSA認證的rhosts

RSAAuthentication yes

設定是否允許使用RSA認證。為了會話更為安全,應該設定為yes

PasswordAuthentication yes

設定是否使用基于密碼的認證

HostbaseAuthentication no

設定是否使用經過公鑰認證的rhosts

BatchMode no

設定是否互動式輸入使用者名和密碼,no表示使用互動式輸入。在用腳本自動登入時,應該設定為no

CheckHostIP yes

設定是否對遠端主機的ip位址進行額外的檢查以防止DNS欺騙

AddressFamily any

設定使用ipv4還是ipv6,any指兩個都可使用

ConnectTimeout 0

設定與伺服器連接配接時的逾時值,0代表永不逾時

StrictHostKeyChecking ask

設定是否把新連接配接的主機加到./.ssh/known_hosts檔案中,ask表示讓使用者選擇

IdentityFile ~/.ssh/identity

IdentityFile ~/.ssh/id_rsa

IdentityFile ~/.ssh/id_dsa

設定從哪個檔案讀取使用者的RSA安全驗證辨別,可以設定多個

Port 22

确定連接配接到遠端主機的端口号

Protocol 2,1

以那一種方式支援協定版本。”2,1”表示先試用SSH2,如果失敗,使用SSH1

Cipher 3des

Cipers aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,ase192-cbc,aes256-cbc

設定SSH2允許使用的加密算法。列出的各種算法按次序被選用

EscapeChar ~

使用~字元作為ESC鍵

Tunnel no

設定是否使用隧道裝置

TunnelDevice any:any

強制使用某一隧道裝置。any:any表示任何可用裝置

PermitLocalCommand no

是否允許在SSH中執行本地指令

GSSAPIAuthentication yes

确定是否允許使用GSSAPI的使用者認證,隻用于SSH2

ForwardX11Trusted yes

遠端X11用戶端是否對原來的X11顯示有完全的控制權

SendEnv….

确定把哪些本地變量發送給伺服器,隻用于SSH2

啟動OpenSSH的服務:

檢視sshd服務狀态:service sshd status

如果還沒有啟動服務,使用以下指令啟動服務:

啟動sshd服務:service sshd start

Ps:腳本方式啟動:/etc/init.d/sshd start      傳統Unix管理模式啟動:/usr/bin/sshd

設定服務開機自啟動:chkconfig sshd on

OpenSSH服務配置日志

 OpenSSh使用的預設端口是22,一般iptables防火牆都已經開放該端口:

OpenSSH服務配置日志

注意SERVER-RULES連結清單中的第7條規則:

OpenSSH服務配置日志

現在嘗試在用戶端使用ssh連接配接伺服器,測試成功:

OpenSSH服務配置日志

在測試連接配接中發現需要注意的兩個問題:

1. 使用者第一次連接配接伺服器時會提示主機不可信,這是因為在目前使用者家目錄下的.ssh/known_hosts檔案沒有記錄該伺服器的指紋,連接配接成功以後就會在該使用者的known_hosts檔案加入該伺服器的指紋;

2. 我的登入使用者名是maomao,這需要伺服器上也有maomao的賬戶,如果沒有要自行建立:

OpenSSH服務配置日志

二. 基于密鑰的認證方式登入伺服器:

認證方式:

openssh支援兩種認證方式,一種是基于系統密碼的安全驗證;一種是基于密鑰的安全驗證,客戶機必須建立一對密鑰,把公鑰上傳到伺服器,然後對接時使用自己的私鑰解密,這樣可以完全地防止假冒伺服器的中間人攻擊方式。當然,無論使用何種方式,連接配接建立的過程中傳輸的資料都是由ssh加密的。基于系統密碼的驗證方式上面已經介紹了,現在來學習一個基于密鑰的安全驗證方式:

首先,在用戶端生成密鑰對,可以是dsa加密,也可以是rsa加密:ssh-keygen -t dsa/rsa

OpenSSH服務配置日志

該過程會詢問你存放密鑰檔案的路徑,預設為$HOME/.ssh/id_rsa即可,然後輸入密鑰的密碼,密鑰就建立成功了。

生成的密鑰對檔案在使用者目錄下:.ssh/id_rsa(私鑰)和.ssh/id_rsa.pub(公鑰)

OpenSSH服務配置日志

 如何将自己的公鑰(id_rsa.pub或者id_dsa.pub)上傳到伺服器呢?

 RH253中提供了一種非常好的方法:

上傳公鑰給要登入的伺服器:

ssh-copy-id -i ~/.ssh/id_dsa.pub XXX.XXX.XXX.XXX(SSH server's ipaddress)

OpenSSH服務配置日志

上傳時輸入私鑰密碼即可。

這樣以後登入時輸入私鑰密碼登入即可,無需使用者密碼。

OpenSSH服務配置日志

這裡有個問題,如果使用基于密鑰驗證的ssh加密信道(例如vnc等),

每次登入都要輸入私鑰密碼有點麻煩,可以使用ssh代理,以後登入一次後的伺服器都不用輸入密碼直接登入了:

開啟ssh代理:eval $(ssh-agent)

為ssh代理提供你的私鑰密碼: ssh-add,也可以設定開機啟動,在startup command中輸入/usr/bin/ssh-add,這樣每次開機都要輸入一次私鑰密碼,然後關機之前的SSH基于密鑰驗證的登入都不用輸入密碼了。

OpenSSH服務配置日志

PS:如果第一次連接配接就出現middle attack問題,很大可能是.ssh/known_hosts的檔案問題。例如之前已經建立好的連結,由于伺服器重裝了系統,此時known_hosts中伺服器ip位址一樣,但指紋不同了,此時就登入失敗,清空該檔案即可,或者清空該ip段的指紋:

echo “” > $HOME/.ssh/known_hosts

三. 使用端口轉發功能(加密隧道)傳輸telnet、vnc等不安全服務的資料

實際應用中很多網絡服務都是不安全的,例如telnet、ftp、pop3等,可以利用ssh的端口轉發功能,為這些網絡程式在各種tcp端口上建立TCP/IP資料傳輸進行加密與解密。

端口轉發有本地轉發與遠端主機轉發兩種,本地轉發是指在客戶機上實作ssh隧道加密,遠端主機轉發是指遠端的伺服器為用戶端實作ssh隧道加密。實作時二者選一即可。

現在以加密telnet服務為例:

telnet伺服器

telnet用戶端

轉發端口

——

2323

Telnet客戶機:192.168.136.130 使用轉發端口2323;  

Telnet伺服器:192.168.136.128 使用telnet預設端口23。

本地轉發:

在客戶機192.168.136.130上開啟轉發功能:

ssh  -L 2323:192.168.136.128:23  [email protected]

解析: 參數-L代表本地轉發Local Forward,2323:192.168.136.128:23表示将telnet的連結由本地端口2323轉發到伺服器的23端口,[email protected]表示用root的身份登入。

登入時輸入:telnet 127.0.0.1 2323 即表示:telnet 192.168.136.128 23

上述配置也可以在/etc/ssh/ssh_config中加入 "LocalForward 2323:192.168.136.128:23" 實作,上述指令中還有一個-g選項,它表示允許除本機以外的其他計算機使用轉發功能,出于安全考慮,應該禁止該功能。

遠端轉發:

在伺服器1921.168.136.128上開啟轉發功能:

 ssh -R 2323:192.168.136.128:23 [email protected]

解析:參數-R代表遠端轉發Remote Forward, 也就是把遠端機192.168.136.130的2323端口的連接配接轉發到本機10.10.1.29的23端口,效果與上面的本地轉發一樣。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 

測試結果是失敗的。

直接telnet是沒有問題的:

OpenSSH服務配置日志

經過端口轉發後,telnet失敗:

OpenSSH服務配置日志

雖然本機的23端口沒有提供telnet服務,但是前面已經設定了ssh轉發,連接配接到本機的2323端口的連接配接都要轉發到伺服器的23端口才對,而且是SSH加密的隧道。為什麼還是失敗呢?經驗證防火牆iptables和安全控制系統selinux是無辜的。

 該問題還在研究中,如果有朋友看到這博文且明白本貓所犯之錯,請指出,感謝萬分~~

繼續閱讀