SSH端口轉發及相關實驗

在上一節我們知道,SSH會自動加密和解密所有SSH客戶端和服務器之間的網絡數據。但是,SSH還同時提供了一個非常有用的功能,這就是端口轉發。

本節索引:

一、SSH端口轉發相關概念

二、實驗:模擬SSH本地端口轉發

三、實驗:模擬SSH遠程端口轉發

四、實驗:模擬SSH動態端口轉發

$D5AYK`@5XYRVU]_CSQBZQA

 

一、SSH端口轉發相關概念

上一節我們知道,SSH會自動加密和解密所有SSH客戶端和服務器之間的網絡數據。但是,SSH還同時

提供了一個非常有用的功能,這就是端口轉發。它能夠將其他TCP端口的網絡數據通過安全的SSH協議

轉發,例如:Telnet,SMTP等這些TCP應用都能從中受益,避免了用戶名,密碼以及隱私信息的明文傳

輸。而與此同時,如果在你的工作環境中防火墻限制了一些網絡端口的使用,但是允許SSH的連接,那么

端口轉發功能也能夠將TCP端口轉發來使用SSH進行通信。

 

SSH端口轉發提供的功能主要有:

1.加密SSH Client端至SSH Server端之間的數據

2.突破防火墻的限制完成一些之前無法建立的TCP連接

 

SSH端口轉發提供的類型有:

本地轉發

遠程轉發

動態轉發

X協議轉發

 

本地轉發:

當外網用戶想要臨時訪問公司內部的不安全TCP協議服務器時,由于防火墻限制無法直接訪問,但可利用

先SSH連接至公司內網的SSH服務器在轉發至不安全的TCP協議服務器。由于作為轉發的SSH服務器與要訪

問的不安全TCP協議服務器在同一網絡環境內,故這種連接就叫本地轉發。

 

格式:

ssh -L localprot:remotehost:remotehostport? sshserver

localprot:指定本機端口

remotehost:指定遠程不安全協議的服務器地址

remotehostport:遠程不安全協議的服務器地址端口

sshserver:SSH服務器地址

 

options:

-f????? 后臺啟用

-N??? 不打開遠程shell,處于等待狀態

-g???? 啟用網關功能

示例:

ssh -L 9527:telnetsrv:23? -N sshsrv

telnet 127.0.0.1 9527

當訪問本機的9527端口時,被加密后轉發到sshsrv的ssh服務,再解密被轉發到telnetsrv:23

大致流程:

Data <–> localhost:9527 <–>localhost:xxxxx <–> sshsrv:22 <–>sshsrv:yyyyy <–> telnetsrv:23

 

 

遠程轉發:

與本地端口轉發相比,我們將SSH服務器與Client訪問端的位置對調,將與不安全TCP協議服務器同一內網

的主機作為Client,將外部網絡主機作為SSH服務器做為端口轉發。由于作為轉發的SSH服務器處在外部網

絡環境中,故這種連接就叫遠程轉發。

 

格式:

ssh -R sshserverport:remotehost:remotehostport sshserver

sshserverport:指定SSH服務器端口

remotehost:指定遠程不安全協議的服務器地址

remotehost:remotehostport:指定遠程不安全協議的服務器端口

sshserver:SSH服務器地址

 

示例:

ssh -R 9527:telnetsrv:23 -N sshsrv

讓sshsrv偵聽9527端口的訪問,如有訪問,就加密后通過ssh服務轉發請求到本機ssh客戶端,再由本機解密后轉發到telnetsrv:23

大致流程:

Data <–> sshsrv:9527 <–> sshsrv:22 <–> localhost:xxxxx <–> localhost:yyyyy <–> telnetsrv:23

 

 

動態端口轉發:

在之前我們已經了解了本地轉發,以及遠程轉發,但它們實現的前提都是要求有一個固定的應用服務端端

口號。但在某些場景下,例如用瀏覽器瀏覽網頁,是沒有固定端口的,這時就需要利用到動態的端口轉

發。比如說,當用firefox訪問Internet時,本機的1080端口作為代理服務器,firefox的訪問請求被轉發到

sshserver上,由sshserver替代訪問Internet

ssh -D 1080 root@sshserver

在本機firefox設置socketproxy:127.0.0.1:1080

curl –socks5? 127.0.0.1:1080? http://www.qq.com

 

 

X協議轉發:

所有圖形化應用程序都是X客戶程序

能夠通過tcp/ip連接遠程X服務器

數據沒有加密機,但是它通過ssh連接隧道安全進行

 

ssh -X user@remotehost gedit

remotehost主機上的gedit工具,將會顯示在本機的X服務器上

傳輸的數據將通過ssh連接加密

 

 

 

 

相關文件:

/var/log/secure?????????????? 存放日志

/etc/ssh/sshd_config ? ? ?SSH服務配置文件

#Port 22?????????? 端口

????????????????????????? 生產中一般第一步先改端口號

????????????????????????? 如Port 9527??

定義公鑰、私鑰存放文件名,位置

HostKey /etc/ssh/ssh_host_rsa_key

#HostKey /etc/ssh/ssh_host_dsa_key

HostKey /etc/ssh/ssh_host_ecdsa_key

HostKey /etc/ssh/ssh_host_ed25519_key

日志設置選項,日志存放在/var/log/secure

# Logging

#SyslogFacility AUTH

SyslogFacility AUTHPRIV

#LogLevel INFO

 

#LoginGraceTime 2m????????????? 不輸入密碼最大時間端口

#PermitRootLogin yes??????????? 生產中一般改成no,普通用戶連接su切換

#StrictModes yes???????????? 檢查文件權限

#MaxAuthTries 6????????????????????? 密碼登錄最大驗證次數

#MaxSessions 10????????????????????? 單個會話能開的最大克隆數

 

PasswordAuthentication yes ?是否允許基于口令登錄方式,no表示禁止

 

#ClientAliveInterval 0????????????? 連接后不操作最大時間,單位:秒

#ClientAliveCountMax 3????????????????? 連接環不操作最大時間次數

???????? 生產中一般要修改AliveInterval 30

????????????????????????? AliveCountMax 3???

???????? 表示連接后不進行任何操作30S,3次后自動斷開連接

#ShowPatchLevel no

UseDNS no?????????????????????? 是否使用DNS反向解析,關閉可提高連接速度

 

#MaxStartups 10:30:100???????????????? 最大并發連接數,默認10

限制可登錄用戶的辦法:

AllowUsers user1 user2 user3

DenyUsers

AllowGroups

DenyGroups

 

SSH服務的最佳實踐配置:

建議使用非默認端口

禁止使用protocol version 1

限制可登錄用戶

設定空閑會話超時時長

利用防火墻設置ssh訪問策略

僅監聽特定的IP地址

基于口令認證時,使用強密碼策略

tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs

使用基于密鑰的認證

禁止使用空密碼

禁止root用戶直接登錄

限制ssh的訪問頻度和并發在線數

經常分析日志

 

 

二、實驗:模擬SSH本地端口轉發

應用場景:當外部客戶端想要訪問公司內網的Telnet服務器時,由于防火墻限制無法直接訪問,可使用

SSH本地端口轉發實現:

前期準備:

以三臺CentOS模擬機作為服務器及主機,主機名網絡配置如下:

客戶端:192.168.30.133

SSH服務器:192.168.30.158

telnet服務器:192.168.30.160

 

telnet服務器端操作:

一、安裝telnet-server包,系統默認未安裝

二、防火墻禁止遠程客戶端訪問:

iptables ?-A ?INPUT ?-s ?192.168.30.133 ?-j ?REJECT

為了防止之前防火墻策略干擾,最好先清空下防火墻策略:

iptables ?-K

防火墻

此時作為Clinet的192.168.30.133已經ping不通作為telnet服務器的192.168.30.160

ping不通

三、開啟telnet-server服務

CentOS6:

service ?xinted ?start ? ? ? ? ? ? ? ? ? ? ? 開啟xinted進程

chkconfig ?telnet ?on ? ? ? ? ? ? ? ? ? ? ? ?開啟telnet服務

service ?xinted ?restart ? ? ? ? ? ? ? ? ? 重啟xinted服務

重啟xinetd

CentOS7:

systemctl start telnet-scoket

 

客戶端操作:

ssh -L 9527:192.168.30.17:23 [-Nf] 192.168.30.6

加-Nf選項將后臺執行,關閉時只能通過kill關閉進程

telnet 127.0.0.1 9527

提示輸入用戶名,密碼;默認不讓root賬戶使用SSH端口轉發登錄

登錄成功

 

三、實驗:模擬SSH遠程端口轉發

應用場景:當外部有工程師想要臨時訪問內部telnet服務器時,作為系統管理員,我們可以將對方主機作

為SSH服務器進行端口轉發,讓其臨時可訪問公司的telnet服務器。

前期準備:

以三臺CentOS模擬機作為服務器及主機,主機名及網絡配置如下:

Internet:192.168.30.133

lanserver:192.168.30.158

telnet服務器:192.168.30.160

 

lanserver端操作:

ssh -R 9527:192.168.30.17:23 [-Nf] 192.168.30.7

加-Nf選項將后臺執行,關閉時只能通過kill關閉進程

lanserver命令

Internet端操作:

telnet 127.0.0.1 9527

telnet成功

 

四、實驗:模擬SSH動態端口轉發

應用場景:在某些場景中,用瀏覽器瀏覽網頁,是沒有固定端口的,這時就需要利用到動態的端口轉

發。下面我們模擬用一臺虛擬機模擬google網站,用Internet主機通過代理服務器proxy訪問google模擬機

前期準備:

以三臺CentOS模擬機作為服務器及主機,主機名及網絡配置如下:

Internet:192.168.30.133

proxy:192.168.30.158

google:192.168.30.160

 

google模擬服務器操作:

開啟http服務,模擬網頁內容:

CentOS6:

service httpd start

CentOS7:

systemctl start ?httpd

echo www.google.com > /var/www/html/index.html

internet

此時訪問192.168.30.160,正常網頁內容顯示如下:

gogole

Internet端操作:

此時在Internet端我們是無法訪問google服務器的

無法打開

使用proxy的1080端口作為動態轉發:

ssh -D 1080 root@192.168.30.158

登錄代理

接下來我們可以通過圖形界面或者字符界面來嘗試訪問:

圖形界面:

打開firefox瀏覽器,按以下順序操作:

–>preferences–>advanced–>network–setting–manual proxy configuration

–>SOCKS Host:127.0.0.1

設置火狐

現在再次嘗試訪問192.168.30.160的google模擬服務器,發現可以正常訪問了!

訪問成功

字符界面:

在字符界面我們可執行下面的命令來進行訪問:

curl -socks5 127.0.0.1:1080 192.168.30.17

字符界面登錄

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/99141

(2)
wangxczwangxcz
上一篇 2018-05-21
下一篇 2018-05-22

相關推薦

  • 在VMware上安裝CentOS 6 教程

    一、下載并安裝虛擬機軟件VMware Workstation 14 下載地址: https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html 下載完成后,從網上搜一個注冊碼來安裝注冊 二、下載CentOS 6.9安裝鏡像 下載地址: http://mirrors…

    2018-03-29
  • Linux系統上命令的使用格式;詳細介紹ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用

    Linux系統上的命令格式為: command -options arguments–long options ifconfig   ~]# cd ~ 切換回自己的家目錄 ~]#? cd ~USERNAME ? ?切換指定用戶的家目錄 ~]#? cd – ? ? 在上一次所在目錄與當前目錄間來回切換 ? ? $PWD 當前工…

    Linux筆記 2018-05-11
  • systemd及awk簡介

    systemd及awk簡介

    Linux筆記 2018-04-20
  • N31第二周作業

    本周(6.25–7.1)第2周 1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 目錄管理類命令:cd pwd ls mkdir rmdir tree cd:change directory cd [/PATH/TO/SOMEDIR] cd:切換回家目錄 注意:bash中,~表示家目錄 cd~:切換回自己的家目錄 cd…

    Linux筆記 2018-07-02
  • rpm指令詳解

    程序包管理器: 功能:將編譯好的應用程序的各組成文件打包成一個或幾個程序包文件,從而更方便地實現程序包的安裝、升級、卸載和查詢等管理操作; ? 1、程序包的組成清單(每個程序包都單獨實現); ? ? ? ? 文件清單 ? ? ? ? ?安裝或卸載時運行的腳本 ? 2、數據庫(公共) ? ? ? ?程序包的名稱和版本; ? ? ? 依賴關系; ? ? ? 功能…

    Linux筆記 2018-03-30
  • 計算機原理與Linux基礎

    計算機的組成及功能 1、其實計算機的組織分為內部設備和外部設備, 內部設備: ? ? ? ? CPU:運算器、寄存器、緩存 ? ? ? ? 存儲器:內存,RAM(Random Access Memory) ? ? ? ? 控制器:控制器是整個計算機系統的控制中心,它指揮計算機各部分協調地工作,保證計算機按照預先規定的目標和步驟有條不紊地進行操作及處理。 外部…

    Linux筆記 2018-05-13
欧美性久久久久