本節索引:
一、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
三、開啟telnet-server服務
CentOS6:
service ?xinted ?start ??? ? ? ? ? ? ? ? ? ? 開啟xinted進程
chkconfig ?telnet ?on ? ? ??? ? ? ? ? ? ? ? ?開啟telnet服務
service ?xinted ?restart ? ? ??? ? ? ? ? ? 重啟xinted服務
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關閉進程
Internet端操作:
telnet 127.0.0.1 9527
四、實驗:模擬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
此時訪問192.168.30.160,正常網頁內容顯示如下:
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