SSH端口轉發實驗

 

本節索引:

一、SSH端口轉發相關概念

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

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

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

 

一、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/99157

(0)
李登峰李登峰
上一篇 2018-05-22
下一篇 2018-05-22

相關推薦

  • MYSQL數據庫筆記(一)

    二進制格式安裝7.4 1、檢查環境 2、下載對應的二進制包 3、 useradd -r -d /data/mysqldb -s /sbin/nologin mysql 創建賬號 getent passwd mysql 確認 創建軟連接; chown -R root: mysql/ 創建物理卷; 創建邏輯卷;   創建文件系統; mkdir /dat…

    2018-06-07
  • 重啟網卡失敗的解決方法

    重啟網卡 報Job for network.service failed because the control process exited with error code. See “systemctl status network.service” and “journalctl -xe” for details. 的錯誤

    2018-04-18
  • Linux的命令

    Linux的命令 命令格式 COMMAND [OPTIONS…] [ARGUMENTS…]選項:用于啟用或關閉命令的某個或某些功能短選項:-c 例如:-l, -h長選項:–word 例如:–all, –human-readable參數:命令的作用對象: 比如文件名和作用名 注意 1. *多個選項以及…

    Linux筆記 2018-04-01
  • linux 基礎命令學習(1)

    查看幫助 首先使用type 查看命令是外部還是內部命令 內部命令:help COMMAND? 或 man bash 外部命令:1、COMMAND –help 或 COMMAND -h ? ? ? ? ? ? ? ? ?2、使用手冊? man? COMMAND ?? ??? ??? ?? ? ?3、信息頁? ?info COMMAND ? ? ? …

    2018-03-30
  • shell回顧

    測試基礎知識

    2018-05-17
欧美性久久久久