はじめに
最近SSHでポートフォワーディングを使用し、pivotingができるということを知りました。
自分の理解のために検証環境を構築し実際に確認してみたので、備忘録としてこの記事を置いておきます。
フォーマット
ローカルポートフォワード
ssh -L <local_port>:<target_ip_address>:<target_port> <username>@<remote_ip_address>
リモートポートフォワード
ssh -R <remote_port>:<target_ip_address>:<target_port> <username>@<remote_ip_address>
検証環境
- local
- ip address
- 192.168.0.1
- port
- 8888
- ip address
- remote
- ip address
- 10.10.10.10
- port
- 9999
- ip address
- target
- ip address
- 10.10.10.100
- port
- 443
- 接続時に判別しやすいように443でWebサーバを動作させ、下記文言を表示させます。
<h1>This is the target machine!! IP address is <10.10.10.100>.<h1> - ip address
検証
ローカルポートフォワード
192.168.0.1の8888ポートを10.10.10.100の443ポートにフォワーディングしています。
ubuntu@ubuntu:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:fb:27:01 brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 192.168.0.1/24 brd 192.168.0.255 scope global ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fefb:2701/64 scope link
valid_lft forever preferred_lft forever
ubuntu@ubuntu:~$ ssh -L 8888:10.10.10.100:443 ubuntu@10.10.10.10
結果
192.168.0.1:8888にcurlしてみると、設置した文言が返ってくることがわかります。
ubuntu@ubuntu:~$ curl -k https://localhost:8888
<h1>This is the target machine!! IP address is <10.10.10.100>.<h1>
リモートポートフォワード
10.10.10.10の9999ポートを10.10.10.100の443ポートにフォワーディングしています。
ubuntu@ubuntu:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:fb:27:01 brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 192.168.0.1/24 brd 192.168.0.255 scope global ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fefb:2701/64 scope link
valid_lft forever preferred_lft forever
ubuntu@ubuntu:~$ ssh -R 9999:10.10.10.100:443 ubuntu@10.10.10.10
結果
10.10.10.10:9999にcurlしてみると、設置した文言が返ってくることがわかります。
ubuntu@ubuntu:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:54:18:20 brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 10.10.10.10/24 brd 10.10.10.255 scope global ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe54:1820/64 scope link
valid_lft forever preferred_lft forever
ubuntu@ubuntu:~$ curl -k https://localhost:9999
<h1>This is the target machine!! IP address is <10.10.10.100>.<h1>
まとめ
sshのローカルポートフォワードとリモートポートフォワードの違いがわからなかったので検証してみました。
- ローカルポートフォワードはssh接続元のポートからターゲットにポートフォワード
- リモートポートフォワードはssh接続先のポートからターゲットにポートフォワード
