はじめに
標的ホストに対して開いているポートを探索する手法をポートスキャンと言い、標的のIPアドレスが分かればnmapコマンド等を利用することで実行できます。
ただし、セキュリティの穴を見つけることにもなるので他人の管轄するサーバに同コマンドを押下しづらいと思います。
今回はローカル端末にて2つのLinuxのコンテナを立て、nmapコマンドを押下することでnmapコマンドの試し打ちしてみました。
環境情報
- Nmap 7.80
ポートスキャンの仕組み
TCPのコネクションの仕組みは以下のパケット送付によるコネクション確立にあります。
SYN→
←SYN/ACK
ACK→
一方で対象のホストが該当ポートを閉じている場合は
SYN→
←RST/ACK
となる動きを利用してポートの開閉状況を探ります。
ちなみにポートスキャンツールでは「SYN/ACK」を受け取っても「RST/ACK」を返します。
理由としては接続の確立を行ってしまうとログの記録が残る可能性があるからです。
想定環境&事前準備
以下のようにdb2が動作するHostBに対してHostAからnmapで探索をかけます。
+-------+ +-------+ | HostA +-----> HostB | | | | | | nmap* | | db2 | +-------+ +-------+
nmapを利用するコンテナは以下コマンドで起動できます。
> docker run -t -i ubuntu
db2のコンテナは以下記事の通りで起動できますが、ポートを外部に公開しているコンテナであれば特に種類は問わないのでポート番号に関しては自由に読み替えてください。
起動後は以下のように2種類のコンテナが起動してあり
$ docker ps cd28b5fbdd5d ubuntu "/bin/bash"... 62959d1446c6 ibmcom/db2:latest
標的ホストであるコンテナのIPと開いているポートは事前に確認しておきます。
$ docker inspect db2 | grep IPAddress ... "IPAddress": "172.17.0.2",
$ docker port db2 50000/tcp -> 0.0.0.0:50000
また、nmapコマンドは以下にてインストールが必要です。
root@cd28b5fbdd5d:/# apt-get install nmap
Nmapコマンドによるポートスキャナ
以下コマンドで全ポートを探索できます。
root@cd28b5fbdd5d:/# nmap -v -p- 172.17.0.2 Starting Nmap 7.80 ( https://nmap.org ) at .. Initiating ARP Ping Scan at ... Scanning 172.17.0.2 [1 port] Completed ARP Ping Scan at ..., 0.01s elapsed (1 total hosts) Initiating Parallel DNS resolution of 1 host. at ... Completed Parallel DNS resolution of 1 host. at ..., 0.25s elapsed Initiating SYN Stealth Scan at ... Scanning 172.17.0.2 [65535 ports] Discovered open port 22/tcp on 172.17.0.2 Discovered open port 50000/tcp on 172.17.0.2 Completed SYN Stealth Scan at ..., 1.19s elapsed (65535 total ports) Nmap scan report for 172.17.0.2 Host is up (0.000019s latency). Not shown: 65533 closed ports PORT STATE SERVICE 22/tcp open ssh 50000/tcp open ibm-db2 MAC Address: 02:42:AC:11:00:02 (Unknown) Read data files from: /usr/bin/../share/nmap Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds Raw packets sent: 65536 (2.884MB) | Rcvd: 65536 (2.621MB)
開いているポートが以下であることを見抜いています。
22/tcp open ssh
50000/tcp open ibm-db2
終わりに
ポートスキャンはサーバ側から防ぐことは難しいですが、不必要なサービスを無効にする&セキュリティーホールが判明すればパッチを当てるといった対応にてリスクを低減することも可能です。
nmapコマンドは自分のホストが外部からどのように見えるのかを調査する有用なツールでもあるので、自環境で利用してみることはおススメします。