labunix's blog

labunixのラボUnix

AWSのインスタンスにプロキシ経由のsshで接続する。

■AWSのインスタンスにプロキシ経由のsshで接続する。
 以下の[graph-easy]形式のASCII図の構成。
 [SSH-Client]はプロキシサーバを経由しないと外部に接続出来ない。

[SSH-Client] -- 8080 --> [Proxy] -- 443 --> [AWS-CloudSSHD]

 実際には[SSH-Client][Proxy]の間にFWがあって、
 DNS、NTP、Proxyポートのみ許可する環境だったり、
 [Proxy][AWS-CloudSSHD]の間にFWやRouter等々があって色々複雑な
 ルールがあるのだけど、今回の設定には関係が無いので割愛する。

■[SSH-Client]のバージョン

$ lsb_release -d
Description:	Debian GNU/Linux 8.2 (jessie)

$ ssh -V
OpenSSH_6.7p1 Debian-5, OpenSSL 1.0.1k 8 Jan 2015[Proxy]のバージョン

$ lsb_release -d
Description:	Debian GNU/Linux 8.2 (jessie)

$ sudo squid3 -v | grep ^S
Squid Cache: Version 3.4.8

■[AWS-CloudSSHD]のバージョン

$ lsb_release -d
Description:	Debian GNU/Linux 8.2 (jessie)

$ dpkg -l | awk '/^ii.*ssh-server/{print $3}'
1:6.7p1-5[Porxy]のデフォルト設定ではsshdの待受ポートであるTCP/22宛に転送をしない。
 プロキシにTCP/22ポート宛の通信を転送するACLを追加する方法もあるけど、
 今回はsshd待受ポートを22から443に変更する。
 なお、別に443でなくてもプロキシが転送を許可するポートなら何でも良い。

$ grep "^acl.*port [42][42]" /etc/squid3/squid.conf
acl SSL_ports port 443
acl Safe_ports port 443		# https[AWS-CloudSSHD]のsshdの設定を変更する。
 プロキシが転送するポートに合わせて変更する。

$ sudo apt-get install -y vim
$ awk '/Port/{print}' /etc/ssh/sshd_config 
Port 22
$ sudo sed -i -e 's%Port.*%Port 443%' /etc/ssh/sshd_config 

■[SSH-Client]の設定変更
 Windowsクライアントなら、TeraTermやPuttyにも同様のプロキシ設定が出来る。
 今回は[connect-proxy]を使用する。
 「connect -H プロキシサーバIP:待受ポート」の形式で記述する。
 なお、「pem」ファイルは別のcifsサーバからsmbmountしないと
 読み込めないという特殊な構成。

$ sudo apt-get install -y connect-proxy
$ cat .ssh/config | sed -e 's/[0-9]/X/g'
Host aws-jessie
  User ec2-user
  #Hostname XX.XX.XXX.XX
  Hostname ecX-XX-XX-XXX-XX.us-west-X.compute.amazonaws.com
  Port XXX
  ProxyCommand connect -H XXX.XX.XX.XXX:XXXX %h %p
  IdentityFile ~/smb/labunix.pem

■プロキシサーバには切断、ログオフのタイミングで以下のようにログが出る。

$ sudo tail -f /var/log/squid3/access.log
  XXX.XX.XX.XX - - [XX/Oct/XXXX:XX:XX:XX +XXXX] "CONNECT ecX-XX-XX-XXX-XX.us-west-X.compute.amazonaws.com:XXX HTTP/X.X" XXX XXXX "-" "-" TCP_MISS:HIER_DIRECT