概要
- ある特定のポートでリッスンする(はずの)サービスをEC2上で起動している
- EC2にはEIPを割り当てて外部公開もしている。
- セキュリティグループ,ネットワークACL,iptablesも設定して、特定のIPをアクセス元とする特定のポートに対するアクセスのみを許可している。
というような状態で、外部からの疎通確認をしたいときに。
1. サーバー内での各ポートのリッスン状況を確認
# リッスンしているポート番号の確認
netstat -atn | grep LISTEN
=>
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
※↑はIPv4, IPv6のポート22でリッスンしてるものがある状態
# ポートをリッスンしているコマンドの確認
lsof -i:<ポート番号> | grep LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 2600 root 3u IPv4 19658 0t0 TCP *:ssh (LISTEN)
sshd 2600 root 4u IPv6 19660 0t0 TCP *:ssh (LISTEN)
※↑はsshdというプロセスが入力したポート番号のポートをリッスンしている状態
※tcp6やIPv6のみが表示されていても、IPv4側のポートも空いている可能性あり(サービスによる)
参考: https://qiita.com/fetaro/items/d5164ba8271114d8a0c8
2. 外部 → EC2 へ特定ポートでアクセスできるかを確認
# 許可しているアクセス元のIPから
nc -vz <EC2インスタンスのパブリックIPアドレス> <ポート番号>
# 特定ポートをリッスンするサービスの起動前に、そもそも特定IPから特定ポートへのアクセスが可能であるかを確認する場合は、
# サーバー内で↓を実行しておいた上で、↑を実行する。正常にアクセスできたら↓のプロセスが終了する
nc -l <ポート番号>