■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
■[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 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