[20201124]建立Socket proxy使用SSH.txt

lfree發表於2020-11-24

[20201124]建立Socket proxy使用SSH.txt

--//以前對這方面的東西不是很瞭解,實際上也叫Dynamic Port Forwarding。

# man ssh

-D [bind_address:]port
Specifies a local "dynamic" application-level port forwarding.  This works by allocating a socket to listen to port on
the local side, optionally bound to the specified bind_address.  Whenever a connection is made to this port,the
connection is forwarded over the secure channel, and the application protocol is then used to determine where to connect
to from the remote machine.  Currently the SOCKS4 and SOCKS5 protocols are supported, and ssh will act as a SOCKS
server.  Only root can forward privileged ports.  Dynamic port forwardings can also be specified in the configuration
file.

指定本地"動態"應用程式級埠轉發。 這可以透過分配一個套接字來監聽本地側的埠,可以選擇繫結到指定的bind_address。 每當
連線到此埠時,連線將透過安全通道轉發,然後使用應用程式協議來確定從遠端機器連線到哪裡。 目前支援SOCKS4和SOCKS5協議,ssh
將充當SOCKS伺服器。 只有root才能轉發特權埠。 動態埠轉發也可以在配置檔案中指定。

IPv6 addresses can be specified with an alternative syntax: [bind_address/]port or by enclosing the address in square
brackets.  Only the superuser can forward privileged ports.  By default, the local port is bound in accordance with the
GatewayPorts setting.  However, an explicit bind_address may be used to bind the connection to a specific address.  The
bind_address of "localhost" indicates that the listening port be bound for local use only, while an  empty address or
'*' indicates that the port should be available from all interfaces.

可以用另一種語法指定IPv6地址:[bind_address/]埠或將地址括在方括號中。 只有超級使用者才能轉發特權埠。 預設情況下,本地
埠按照閘道器埠設定繫結。 但是,可以使用顯式bind_address將連線繫結到特定地址。 "localhost"的bind_address表示偵聽埠僅
限於本地使用,而空地址或"*"表示埠應可從所有介面獲得。

--//我想透過簡單的例子說明整個測試以及建立過程。

1.環境:
--//客戶端      192.168.98.6 windows
--//伺服器      192.168.100.78 linux
--//遠端伺服器  192.168.100.40 linux,開啟httpd服務。在該伺服器上拒絕192.168.98.6的訪問。修改/etc/httpd/conf/httpd.conf
--//如下:
<Directory "/var/www/html">

#
# Possible values for the Options directive are "None", "All",
# or any combination of:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important.  Please see
#
# for more information.
#
    Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride None

#
# Controls who can get stuff from this server.
#
    Order allow,deny
    Allow from all
    Deny From 192.168.98.6
</Directory>
--//重啟httpd服務略。這樣如果我在瀏覽器執行http://192.168.100.40/sqllaji/報如下錯誤:
You don't have permission to access /sqllaji/ on this server.
Apache/2.0.52 (Red Hat) Server at 192.168.100.40 Port 80

--//測試的目的透過ssh登入192.168.100.78,實現192.168.98.6訪問192.168.100.40/sqllaji的目的。

2.建立socker proxy或者Dynamic Port Forwarding。

--//透過putty,選擇connection -> SSH -> tunnels 加入source port 8888,然後選擇Dynamic按鈕。選擇add,在forwarded port出現
--//D8888. 然後回到session介面選擇save。

--//然後登入伺服器,注意不要在退出。

--//在192.168.98.6執行:
D:\notes>netstat -an | grep 8888
  TCP    127.0.0.1:8888         0.0.0.0:0              LISTENING
  TCP    [::1]:8888             [::]:0                 LISTENING
--//可以發現本地8888埠已經開啟。

--//然後在瀏覽器選擇代理設定:我使用firefox:
--//選擇手工配置代理,在socks主機上輸入127.0.0.1,埠8888.

--//這樣在位址列輸入:http://192.168.100.40/sqllaji/ 就可以正常訪問了。

3.也可以透過ssh登入,我的機器安裝cygwin,順便測試看看。
--//退出前面的登入。

$ ssh -D 8888 -f -C -q -N root@192.168.100.78
root@192.168.100.78's password:

Flag    Description
-D 8888 Bind connection to port 8888
-f      Fork process to background
-C      Compress data before sending
-q      Quiet mode
-n      Do not execute a remote command

--//這樣執行後直接回到本機。優點以後一直保持監聽該埠。缺點我不知道那個程式對於我剛才登入的程式,好在我ssh連線不多,很
--//容易確定。簡單一點就是執行ssh -D 8888  root@192.168.100.78.

D:\notes>netstat -an | grep 8888
  TCP    127.0.0.1:8888         0.0.0.0:0              LISTENING
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  TCP    127.0.0.1:8888         127.0.0.1:54418        ESTABLISHED
  TCP    127.0.0.1:8888         127.0.0.1:54419        CLOSE_WAIT
  TCP    127.0.0.1:54418        127.0.0.1:8888         ESTABLISHED
  TCP    127.0.0.1:54419        127.0.0.1:8888         FIN_WAIT_2
  TCP    [::1]:8888             [::]:0                 LISTENING
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--//瀏覽器的配置略。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2736299/,如需轉載,請註明出處,否則將追究法律責任。

相關文章