Post

ローカルPCから固定IPでのみアクセス可能なサイトにアクセスする方法(3)(Feat. EC2, SSM port forwarding)

ローカルサーバーとEC2プロキシサーバーをポートフォワーディングするdockerでポートフォワーディングする

ローカルPCから固定IPでのみアクセス可能なサイトにアクセスする方法(3)(Feat. EC2, SSM port forwarding)

先ほど固定IPからのみアクセス可能なサーバーとproxyサーバーを構築しました。
今度はローカルPCでDockerを構築し、ローカルPCでサーバーを構築し、VPCとの通信が可能になるようにポートフォワーディングを行いましょう。

秘密鍵と公開鍵の設定

ローカルに戻ってローカル -> dockerのポートフォワーディング用に使用する秘密鍵と公開鍵を作成しましょう

1
ssh-keygen -t rsa -f for-ssh

生成されたキーは次のコマンドで権限を変更してからssh-for-proxyフォルダの中に入れましょう

1
chmod 600 </秘密鍵ファイルのパス/for-ssh>

Docker構築

まずdockerサーバーを構築しましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
FROM golang:1.15.3-alpine as ssm-builder

ARG VERSION=1.2.279.0

RUN set -ex && apk add make git gcc libc-dev curl bash zip && \
    curl -sLO https://github.com/aws/session-manager-plugin/archive/${VERSION}.tar.gz && \
    mkdir -p /src/github.com && \
    tar xzf ${VERSION}.tar.gz && \
    mv session-manager-plugin-${VERSION} /src/github.com/session-manager-plugin && \
    cd /src/github.com/session-manager-plugin && \
    make release

FROM alpine:3.21.3

COPY --from=ssm-builder /src/github.com/session-manager-plugin/bin/linux_amd64_plugin/session-manager-plugin /usr/local/bin/

RUN mkdir -p /root/.ssh
COPY ./ssh-for-proxy/for-ssh.pub /root/.ssh/authorized_keys
RUN chmod 600 /root/.ssh/authorized_keys
RUN chmod 700 /root/.ssh

RUN apk add --no-cache openssh openrc aws-cli curl 

COPY ./ssh-for-proxy/sshd_config /etc/ssh/sshd_config

RUN mkdir -p /run/sshd && ssh-keygen -A

ENV PATH="/usr/local/session-manager-plugin/bin:/usr/local/bin:$PATH"

EXPOSE 8888 22

CMD ["tail", "-F", "/dev/null"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: "3.5"
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8888:8888"
      - "22:22"
    environment:
      - PORT=8888
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

Dockerが実行されると次のコマンドでコンテナ内部シェルにアクセスしましょう

1
docker exec -it <コンテナ名> sh

内部シェルで次のコマンドでdocker -> aws vpcでポートフォワーディングを実施しましょう。

1
2
3
4
5
/usr/sbin/sshd -D &
aws configure set aws_access_key_id ポートフォワーディングしようとするEC2を構築したaws access_key_id
aws configure set aws_secret_access_key ポートフォワーディングしようとするEC2を構築したaws_secret_access_key
aws configure set region ポートフォワーディングしようとするEC2を構築したregion
aws ssm start-session --target "Proxy server Instance ID" --document-name AWS-StartPortForwardingSession --parameters portNumber=["3128"],localPortNumber=["8888"] &

次のテキストが出たらポートフォワーディングが完了したものです。

1
2
3
Starting session with SessionId: xxxx
Port 8888 opened for sessionId xxxx
Waiting for connections...

再びローカルに戻って新しいターミナルを開いて次のshを実行しましょう。

1
2
ssh-keygen -R localhost
ssh -L 8888:localhost:8888 root@localhost -i ./ssh-for-proxy/for-ssh -N 

実行後ターミナルが停止状態になればポートフォワーディングがされた状態です。

新しいターミナルを開いてproxy設定されたChromeを実行させましょう。
(必ず既存に実行されているChromeを完全終了させてから実行しましょう。)

1
open -a "Google Chrome" --args --proxy-server="http://localhost:8888"

Chrome実行後に再び固定サーバーのnginx URLにアクセスして該当ページが開くか確認しましょう。 http://(EC2に割り当てたstatic-server-ipアドレス) screenshot

次のリンクで続く(プロキシサーバー作成)

This post is licensed under CC BY 4.0 by the author.