20170909 加密和安全(二)

CA和證書
安全協(xié)議(SSL/TLS)
OpenSSH

一、CA和證書

(一) PKI(Public Key Infrastructure) 公鑰基礎設施

  • 定義:支持公開密鑰管理并能支持認證、加密、完整性和可追究性服務的基礎設施

  • 主要組成部分:

    • 簽證機構(gòu):CA (Certificate Authority)
    • 注冊機構(gòu):RA (Registration Authority)
    • 證書吊銷列表:CRL (Certificate Revocation List)
    • 證書存取庫
  • X.509:定義了證書的結(jié)構(gòu)以及認證協(xié)議標準

    • 內(nèi)容:版本號、序列號、簽名算法、頒發(fā)者、有效期限、主體名稱、主體公鑰、CRL分發(fā)點、擴展信息、發(fā)行者簽名

(二)證書獲取的方法:

  • 證書授權(quán)機構(gòu)簽發(fā)的證書:由CA簽發(fā)申請者的公鑰
    • 第1步:生成簽名請求(csr)
    • 第2步:將csr發(fā)送給CA
    • 第3步:從CA處接受簽名
  • 自簽名的證書:自己簽發(fā)自己的公鑰

二、安全協(xié)議(SSL/TLS):

(一)協(xié)議歷史、功能

  • 發(fā)展歷程:

    • SSL(Secure Socket Layer):安全套接字
      • 由Netscape公司于1995年發(fā)布SSL 2.0
    • TLS(Transport Layer Security) 安全傳輸層協(xié)議1.1:
      • TLS 1.1:IETF(Internet工程任務組) 于2006年將其定義為國際標準RFC 4346
      • TLS 1.2:當前使用最廣泛的標準,2008年發(fā)布
      • TLS 1.3:最新標準,2015年發(fā)布
  • 提供功能:機密性、認證、完整性、重放保護

  • 位于TCP/IP模型傳輸層之上,應用層之下

(二)協(xié)議工作原理

  • SSL/TLS協(xié)議是兩階段協(xié)議,分為握手階段和應用階段

    • 握手階段(協(xié)商階段)客戶端和服務器端認證對方身份(依賴于PKI體系,利用數(shù)字證書進行身份認證),并協(xié)商通信中使用的安全參數(shù)、密碼套件以及主密鑰。后續(xù)通信使用的所有密鑰都是通過MasterSecret生成。
    • 應用階段:在握手階段完成后進入,在應用階段通信雙方使用握手階段協(xié)商好的密鑰進行安全通信
  • 相關協(xié)議:

    • 握手階段:Handshake, ChangeCipherSpec, Alert協(xié)議
    • 應用階段:Record協(xié)議
  • HTTPS協(xié)議:就是“HTTP” 協(xié)議”和“SSL/TLS 協(xié)議”的組合。HTTP over SSL”或“HTTP over TLS”,對http協(xié)議的文本數(shù)據(jù)進行加密處理后,成為二進制形式傳輸

(三)OpenSSL

  • 開源項目:可以實現(xiàn)對稱加密、公鑰加密、秘鑰管理等豐富功能

  • 對稱加密:openssl enc工具實現(xiàn)

    • 幫助:man enc
    • 語法:
    // 加密
    openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher
    
    // 解密
    openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile
    
  • 公鑰加密:openssl rsautl工具實現(xiàn)

    • 幫助:man rsautl
    • 語法:
    // 生成私鑰
    openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
    // 私鑰需要謹慎保管,權(quán)限應設置為600
    // 執(zhí)行umask 066,為避免umask設置影響今后操作,將umask和后續(xù)生成私鑰命令用小括號括起
    // 例如以下命令(-des: 私鑰添加口令)
    (umask077; openssl genrsa -out test.key -des 2048) 
    
    //從私鑰中提取出公鑰
    openssl rsa -in PRIVATEKEYFILE -pubout -out PUBLICKEYFILE
    //例如以下命令
    openssl rsa -in test.key -pubout -out test.key.pub
    
  • 單項加密:openssl dgst工具實現(xiàn)

    • 幫助:man dgst
    • 語法:
    openssl dgst -md5 [-hex] /PATH/SOMEFILE     //-hex 默認設置為16進制顯示
    openssl dgst -md5 testfile
    
  • 生成密碼:openssl sslpasswd工具實現(xiàn)

    • 幫助:man sslpasswd
    • 語法:
    openssl passwd -1 -salt SALT(最多8位)  //-1指MD5加密
    openssl passwd -1 -salt centos
    
  • 生成隨機數(shù):openssl sslrand工具實現(xiàn)

    • 幫助:man sslrand
    • 幫助:
    openssl rand -base64|-hex NUM
    NUM: 表示字節(jié)數(shù);-hex時,每個字符為十六進制,相當于4位二進制,出現(xiàn)的字符數(shù)為NUM*2
    

(四)OpenSSL實現(xiàn)創(chuàng)建CA并申請、管理證書

  • 配置文件
    • openssl的配置文件:/etc/pki/tls/openssl.cnf
      配置文件關鍵信息:
dir             = /etc/pki/CA          //存儲目錄
certs           = $dir/certs           //頒發(fā)的證書存儲路徑
crl_dir         = $dir/crl             //證書吊銷列表存儲路徑
database        = $dir/index.txt       //數(shù)據(jù)庫文件存儲路徑

new_certs_dir   = $dir/newcerts        //新證書存放路徑,與證書存儲路徑中的內(nèi)容相同,但名稱不同

certificate     = $dir/cacert.pem      //CA自簽發(fā)或由上級簽發(fā)的證書路徑,名稱必須為"cacert.pem"
serial          = $dir/serial          //下一個簽發(fā)證書的序號,一般從16位數(shù)字00開始
crlnumber       = $dir/crlnumber       //下一個證書吊銷列表的序號,一般從16位數(shù)字00開始
                                  
crl             = $dir/crl.pem         //證書吊銷列表的存放路徑
private_key     = $dir/private/cakey.pem      //私鑰的存放路徑

countryName             = match        //國家信息必須匹配
stateOrProvinceName     = match        //州或省信息必須匹配
organizationName        = match        //域名信息必須匹配
organizationalUnitName  = optional     //部門名稱
commonName              = supplied     //申請證書的主機名稱
emailAddress            = optional     //郵箱
  • 申請信息的三種策略:匹配、支持和可選

    • 匹配:申請?zhí)顚懙男畔⒏鶦A設置信息必須一致
    • 支持:必須填寫這項申請信息
    • 可選:可有可無
  • 第1步,創(chuàng)建私有CA,生成私鑰

    // 創(chuàng)建所需要的文件
    touch /etc/pki/CA/index.txt      //生成證書索引數(shù)據(jù)庫文件
    echo 01 > /etc/pki/CA/serial     //指定第一個頒發(fā)證書的序列號
    
    // CA生成私鑰,注意名稱必須為cakey.pem
    (umask066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
    
  • 第2步,生成自簽名證書

    openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
    // -new 生成新證書簽署請求
    // -x509 專用于CA生成自簽證書
    // -key 生成請求時用到的私鑰文件
    // -days n 證書的有效期限
    // -out /PATH/TO/SOMECERTFILE: 證書的保存路徑
    
  • 第3步,頒發(fā)證書,一般將私鑰和CA簽發(fā)的證書保存在應用的目錄中

    // 1. 生成證書請求csr
    // 生成私鑰
    (umask066; openssl genrsa -out /etc/pki/tls/private/test.key 2048)
    生成證書申請文件
    openssl req -new -key /etc/pki/tls/private/test.key -out etc/pki/tls/test.csr
    
    // 2. 將證書請求文件傳輸給CA
    
    // 3. CA簽署證書,并將證書頒發(fā)給請求者
    openssl ca -in /tmp/test.csr -out /etc/pki/CA/certs/test.crt -days 365
    注意:默認國家,省,公司名稱三項必須和CA一致
    
    // 4. 查看證書中的信息:
    openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates
    // 查看指定編號的證書狀態(tài)
    openssl ca -status SERIAL
    
  • 第4步,吊銷證書

    // 1. 在客戶端獲取要吊銷的證書的serial
    openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
    
    // 2. 在CA上,根據(jù)客戶提交的serial與subject信息,對比檢驗是否與index.txt文件中的信息一致,吊銷證書
    openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
    // 指定第一個吊銷證書的編號
    注意:第一次更新證書吊銷列表前,才需要執(zhí)行
    echo 01 > /etc/pki/CA/crlnumber
    
    // 3. 更新證書吊銷列表
    openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem
    // 查看crl文件:
    openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text
    
  • 實驗:建立根CA,子CA,并實現(xiàn)根CA簽發(fā)自身證書、根CA給子CA簽發(fā)證書、子CA給申請者簽發(fā)證書,最后吊銷子CA簽發(fā)給申請者的證書,并生成證書吊銷列表
    環(huán)境設置
    根CA的ip地址:192.168.136.230,命令提示符顏色:紫色
    子CA的ip地址:192.168.136.229,命令提示符顏色:黃色
    申請主機的ip地址:192.168.136.224,命令提示符顏色:藍色
    密鑰、證書申請、簽發(fā)的證書存儲位置,如下圖:

第1步:建立根CA,根CA簽發(fā)自身證書(根CA上操作)
建立證書索引庫文件index.txt,指定證書序列號
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial

生成私鑰文件cakey.pem,存儲在/etc/pki/CA/private目錄下
(umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 2048)

自已簽發(fā)自己的證書cacert.pem,存儲在/etc/pki/CA目錄下,過程中設置:countryName, stateOrProvinceName, organizationName, organizationalUnitName, commonName, emailAddress等信息,前三項一定要注意,之后簽發(fā)的證書信息務必要與本次設置的信息相同
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 7300

第2步,建立子CA,子CA向根CA申請證書,根CA簽發(fā)證書(子CA上操作)
建立證書索引庫文件index.txt,指定證書序列號
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial

生成私鑰
(umak 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 2048)

生成證書申請文件
openssl req -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.csr

將證書申請文件傳送給根CA,根CA簽發(fā)證書并將證書傳送回子CA,存儲至子CA的/etc/pki/CA目錄下
scp /etc/pki/CA/cacert.csr 192.168.136.230:/tmp 發(fā)送證書申請文件至根CA

openssl ca -in /tmp/cacert.csr -out /etc/pki/CA/certs/cacert.pem -days 3650
根CA簽發(fā)證書(此命令在根CA上操作)

查看簽發(fā)的證書內(nèi)容,可以看到證書序列號按照/etc/pki/CA/serial文件中的01編號,根CA和子CA的關鍵信息相同(此命令在根CA上操作)

使用openssl x509 -in /etc/pki/CA/certs/cacert.pem -noout -text|issuer|suject|serial|dates命令查看證書信息,紅框中可以看到時間期限確實為簽發(fā)證書指定的約10年(-days 3650)(此命令在根CA上操作)

使用openssl ca -status 01命令,查看指定編號的證書狀態(tài)(此命令在根CA上操作)

scp /etc/pki/CA/certs/cacert.pem 192.168.136.229:/etc/pki/CA/
發(fā)送簽發(fā)的證書至子CA(此命令在根CA上操作)

第3步,申請主機向子CA發(fā)起證書簽發(fā)申請,子CA簽發(fā)證書(申請主機上操作)
生成密鑰
(umask 066; openssl genrsa -out /etc/pki/tls/private/hello.key -des3 2048)

生成證書申請文件
openssl req -new -key /etc/pki/tls/private/hello.key -out /etc/pki/tls/hello.csr

將證書申請文件傳送給子CA,子CA簽發(fā)證書并將證書傳送回申請主機,存儲至申請主機的/etc/pki/tls目錄下
scp /etc/pki/tls/hello.csr 192.168.136.229:/tmp 發(fā)送證書申請文件至子CA

openssl ca -in /tmp/hello.csr -out /etc/pki/CA/certs/hello.crt -days 730
子CA簽發(fā)證書(此命令在子CA上操作)

scp /etc/pki/CA/certs/hello.crt 192.168.136.224:/etc/pki/tls/
發(fā)送簽發(fā)的證書至子CA(此命令在子CA上操作)

將根CA證書、子CA證書、申請主機證書都傳至windows,可以在證書頁面看到清晰的證書繼承關系

第4步,吊銷子CA給申請主機的證書,創(chuàng)建證書吊銷列表(子CA上操作)
環(huán)境設置:在子CA上再簽發(fā)兩個證書
修改/etc/pki/CA/index.txt.attr文件,內(nèi)容改為"unique_subject = no",這樣可以為相同證書申請簽發(fā)多次證書
openssl ca -in /tmp/hello.csr -out /etc/pki/CA/certs/hello1.crt -days 300
openssl ca -in /tmp/hello.csr -out /etc/pki/CA/certs/hello2.crt -days 500

查看想要吊銷證書的序列號,查看目前所有證書的狀態(tài),V表示可用狀態(tài)
openssl x509 -in /etc/pki/CA/certs/hello1.crt -noout -serial -subject
openssl x509 -in /etc/pki/CA/certs/hello2.crt -noout -serial -subject
cat /etc/pki/CA/index.txt
``

吊銷序列號為02和03的兩個證書:
openssl ca -revoke /etc/pki/CA/newcerts/02.pem
openssl ca -revoke /etc/pki/CA/newcerts/03.pem
cat /etc/pki/CA/index.txt 查看索引數(shù)據(jù)庫,發(fā)現(xiàn)被吊銷的證書狀態(tài)為R

生成證書吊銷列表
echo 01 > /etc/pki/CA/crlnumber 指定首個證書吊銷列表的序列號
openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem 生成證書吊銷列表

查看證書吊銷列表內(nèi)容
openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text

三、OpenSSH

(一)SSH協(xié)議

  • ssh: secure shell,TCP連接,默認端口號22,安全的端口登錄
  • 軟件實現(xiàn):OpenSSH, dropbear
  • 協(xié)議版本:當前使用ssh v2,基于DH算法做密鑰交換,基于RSA或DSA實現(xiàn)身份認證
  • 登錄認證方式:基于password和基于key兩種方式

(二)OpenSSH

  • 基于C/S結(jié)構(gòu)

    • client: ssh, scp, xshell, securecrt
    • server: sshd
  • ssh客戶端:

    • 路徑:/etc/ssh/ssh_config
    • 配置項:
      StrictHostKeyChecking 首次登錄檢查Key,默認為"ask"提示,設為"no"不提示
    • 語法:
      ssh [user@]host [COMMAND] 默認以當前本機登錄用戶名登錄遠程主機
      ssh [-l user] host [COMMAND] -l 指定用戶登錄遠程主機
    選項:
    -p port:遠程服務器監(jiān)聽的端口
    -b:指定連接的源IP
    -v:調(diào)試模式
    -C:壓縮方式
    -X:支持x11轉(zhuǎn)發(fā)
    -Y:支持信任x11轉(zhuǎn)發(fā)
    -t:強制偽tty分配
    //通過ssh直連remoteserver1實現(xiàn)間接連接至remoteserver2
    ssh -t remoteserver1 ssh remoteserver2
    

(三)OpenSSH遠程驗證

  • openssh實現(xiàn)遠程主機驗證的方式:
    當用戶遠程連接ssh服務器時,會復制ssh服務器/etc/ssh/ssh_host*key.pub文件中的公鑰到客戶機的~./ssh/know_hosts中。下次連接時,會自動匹配相應私鑰,不能匹配,將拒絕連接

  • ssh服務登錄驗證:基于用戶/口令和基于密鑰兩種方式

    • 基于用戶/口令登錄

      • step 1 客戶端發(fā)起ssh請求,服務器會把自己的公鑰發(fā)送給用戶
      • step 2 用戶會根據(jù)服務器發(fā)來的公鑰對密碼進行加密
      • step 3 加密后的信息回傳給服務器,服務器用自己的私鑰解密,如果密碼正確,則用戶登錄成功
    • 基于密鑰登錄

      • step 1 首先在客戶端生成一對密鑰
      • step 2 并將客戶端的公鑰拷貝到服務端
      • step 3 當客戶端再次發(fā)送一個連接請求,包括ip, 用戶名
      • step 4 服務端得到客戶端的請求后,會到authorized_keys中查找,如果有響應的IP和用戶,就會隨機生成一個字符串,例如:acdf
      • step 5 服務端使用客戶端拷貝過來的公鑰進行加密,然后發(fā)送給客戶端
      • step 6 得到服務端發(fā)來的消息后,客戶端會使用私鑰進行解密,然后將解密后的字符串發(fā)送給服務端
      • step 7 服務端接受到客戶端發(fā)來的字符串后,跟之前的字符串進行對比,如果一致,就允許免密碼登錄
    • 實現(xiàn)基于密鑰登錄

      • 在客戶端生成密鑰對,-P '':私鑰不設置密碼
        ssh-keygen -t rsa [-P ''] [-f "~/.ssh/id_rsa"]
      • 把公鑰文件傳輸至遠程服務器對應用戶的家目錄
        ssh-copy-id [-i [identity_file]] [user@]host
      • 修改私鑰的密碼
        ssh-keygen -p
      • 使用驗證代理,只需要輸入一次密碼,之后所有的ssh連接輸入私鑰密碼的工作由代理完成。bash進程結(jié)束,代理工作結(jié)束;下次登錄時,重新啟動代理。
        ssh-agent agent 啟用代理
        ssh-add 密碼添加給代理

(四)加密文件傳輸工具:scp, rsysc, sftp, pssh

(1)scp工具
  • 來源于openssh-clients軟件包

  • scp遇到相同文件直接覆蓋操作

  • 語法:
    scp [options] SRC... DEST/
    scp [options] [user@]host:/sourcefile /destpath:將遠程主機文件復制到本地
    scp [options] /sourcefile [user@]host:/destpath:將本地文件復制到遠程主機

  • 常用選項:
    -C: 壓縮數(shù)據(jù)流
    -r: 遞歸復制
    -p: 保持原文件的屬性信息
    -q: 靜默模式
    -P PORT: 指明remote host的監(jiān)聽端口

(2)rsync工具
  • 基于ssh和rsh服務實現(xiàn)高效率的遠程系統(tǒng)之間復制文件

  • 使用安全的shell連接做為傳輸方式

  • 比scp更快,只復制不同的文件

  • 語法:
    rsync -av /etc server1:/tmp:復制目錄和目錄下文件
    rsync -av /etc/ server1:/tmp:只復制目錄下文件

  • 選項:
    -n 模擬復制過程
    -v 顯示詳細過程
    -r 遞歸復制目錄樹
    -p 保留權(quán)限
    -t 保留時間戳
    -g 保留組信息
    -o 保留所有者信息
    -l 將軟鏈接文件本身進行復制(默認)
    -L 將軟鏈接文件指向的文件復制
    -a 存檔,相當于–rlptgoD,但不保留ACL(-A) 和SELinux屬性(-X)

(3)sftp工具
  • 交互式文件傳輸工具
  • 用法和傳統(tǒng)的ftp工具相似
  • 利用ssh服務實現(xiàn)安全的文件上傳和下載
  • 使用ls cd mkdir rmdir pwd get put等指令,可用?help獲取幫助信息
(4)pssh工具
  • pssh是一個python編寫可以在多臺服務器上執(zhí)行命令的工具,也可實現(xiàn)文件復制

  • 選項如下:
    --version:查看版本
    -h:主機文件列表,內(nèi)容格式"[user@]host[:port]"
    -H:主機字符串,內(nèi)容格式"[user@]host[:port]"
    -l:登錄使用的用戶名
    -o:輸出的文件目錄
    -O:SSH的選項
    -v:詳細模式
    -A:手動輸入密碼模式
    -x:額外的命令行參數(shù)使用空白符號,引號,反斜線處理
    -X:額外的命令行參數(shù),單個參數(shù)模式,同-x
    -i:每個服務器內(nèi)部處理信息輸出
    -P:打印出服務器返回信息

(五)SSH端口轉(zhuǎn)發(fā)(又名“隧道”):

(1)SSH 端口轉(zhuǎn)發(fā)的功能
  • SSH端口轉(zhuǎn)發(fā):SSH將其他TCP 端口的網(wǎng)絡數(shù)據(jù)通過SSH 鏈接來轉(zhuǎn)發(fā),并且自動提供了相應的加密及解密服務
  • SSH端口轉(zhuǎn)發(fā)又名隧道(tunneling),SSH為其他TCP協(xié)議提供了一個安全的傳輸通道。
  • 功能:
    • 加密SSH Client 端至SSH Server 端之間的通訊數(shù)據(jù)
    • 突破防火墻的限制完成一些之前無法建立的TCP 連接
(2)SSH本地轉(zhuǎn)發(fā)
  • 語法:
    ssh -L local_port:remote_host:remote_host_port ssh_server
    local_port:本地端口(防火墻外)
    remote_host:遠程主機IP(防火墻內(nèi))
    remote_host_port:遠程主機不安全的TCP協(xié)議端口(防火墻內(nèi))
    ssh_server:充當跳板機的ssh服務器IP(防火墻內(nèi))

  • 選項:
    -f 后臺啟用
    -N 不打開遠程shell,處于等待狀態(tài)
    -g 啟用網(wǎng)關功能

  • 網(wǎng)絡連接狀態(tài)如圖所示:

  • 示例:

    • ssh -L 2009:telnetsrv:23 -Nf sshsrv
      建立從本機到telnet服務器23端口的連接,監(jiān)聽本機2009端口,以sshsrv服務器為跳板
    • telnet 127.0.0.1 2009
      當訪問本機的2009的端口時,被加密后轉(zhuǎn)發(fā)到sshsrv的ssh服務,再解密被轉(zhuǎn)發(fā)至telnetsrv的23端口
    • 信息在端口間的流向:
      data <<==>> local_host:2009 <<==>> local_host:XXXXX <<==>> ssh_srv:22 <<==>> ssh_srv:YYYYY <<==>> telnet_srv:23
  • 實驗:建立SSH本地轉(zhuǎn)發(fā)
    建立從本機192.168.136.230到telnet服務器192.168.136.224的連接,中間將ssh服務器192.168.136.229作為跳板,本地轉(zhuǎn)發(fā)端口2009
    ssh -L 2009:192.168.136.224:23 -Nf 192.168.136.229 本地建立連接
    telnet 127.0.0.1 2009 本地轉(zhuǎn)發(fā)連接遠程telnet服務器

    本地主機端口連接情況:本機連接至跳板機的ssh服務22端口

    跳板機端口連接情況:跳板機一方面與本機以ssh服務22端口連接,一方面與遠程服務器以telnet服務23端口連接

    遠程telnet服務器端口連接情況:跳板機連接至遠程服務器的telnet服務23端口

    數(shù)據(jù)流向為:data <<==>> 127.0.0.1:2009 <<==>> 192.168.136.230:56160 <<==>> 192.168.136.229:22 <<==>> 192.168.136.229:51488 <<==>> 192.168.136.224:23

(3)SSH遠程轉(zhuǎn)發(fā)
  • 語法:
    ssh -R ssh_server_port:remote_host:remote_host_port ssh_server
    ssh_server_port:(防火墻外)
    remote_host_port:(防火墻內(nèi))
    remote_host_port:(防火墻內(nèi))
    ssh_server:(防火墻外)

  • 網(wǎng)絡連接狀態(tài)如圖所示:

  • 示例:

    • ssh -R 2010:telnetsrv:23 -Nf sshsrv
      建立從ssh服務器到telnet服務器23端口的連接,監(jiān)聽ssh服務器2010端口,以ssh客戶端為跳板

    • telnet sshsrv 2010
      當訪問本機的2010端口時,將加密信息通過ssh服務轉(zhuǎn)發(fā)請求到本機ssh客戶端,再由本機解密后轉(zhuǎn)發(fā)到telnetsrv的23端口

    • 信息在端口間的流向:
      Data <==> ssh_srv:2010 <==> ssh_srv:22 <==> local_host:XXXXX <==> local_host:YYYYY <==> telnet_srv:23

  • 實驗:建立SSH遠程轉(zhuǎn)發(fā)
    建立從ssh服務器192.168.136.230到telnet服務器192.167.136.224的連接,中間將本機192.168.136.229作為跳板,遠程轉(zhuǎn)發(fā)端口2010
    ssh -R 2010:192.168.136.224:23 -Nf 192.168.136.230 本機建立連接

    telnet 127.0.0.1 2010 遠程ssh服務器連接遠程telnet服務器

    ssh服務器端口連接情況:ssh服務器的22端口與主機相連

    主機端口連接情況:一方面作為客戶機與防火墻外的ssh服務器連接,另一方面與防火墻內(nèi)的telnet服務器的23端口連接

    telnet服務器端口連接情況:telnet服務器的23端口與主機相連

(4)SSH端口轉(zhuǎn)發(fā)
  • 當用瀏覽器訪問internet時,本機的1080端口做為代理服務器,瀏覽器的訪問請求被轉(zhuǎn)發(fā)到ssh_server上,由ssh_server替之訪問internet

  • 示例:

    • ssh -D 1080 root@sshserver
      建立本地1080端口至ssh_server的ssh連接

    • 在瀏覽器設置代理本地代理:ip:127.0.0.1 port:1080

  • 實驗:建立SSH端口轉(zhuǎn)發(fā)
    通過本機(192.168.136.224)1080端口轉(zhuǎn)發(fā)請求至192.168.136.230的ssh服務器,由ssh服務器訪問192.168.136.229的httpd服務

(六)SSH的X協(xié)議轉(zhuǎn)發(fā):

  • X協(xié)議:C/S結(jié)構(gòu),Client程序向Server發(fā)出請求,Server響應請求并展現(xiàn)相關圖形界面
  • 所有的圖形應用程序都是X客戶程序
    • 能夠通過TCP/IP連接遠程X服務器
    • 數(shù)據(jù)沒有加密機制,可以通過ssh連接隧道安全傳輸
  • OpenSSH的實現(xiàn):
    ssh -X user@remotehost COMMAND
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容