手元のラズパイにポートスキャンしてみた

手元のラズパイにポートスキャンをしてみました。
2021.09.15

こんにちは。IoT事業部の木村です。

最近、IoT関連のガイドラインに準拠するにあたり、RaspberryPiに対してポートスキャンをしてみる機会がありました。 エンジニアとしてデビューしてから、一貫してサーバーレスなサービスばかりを触ってきた私からすると、従来あまり意識することがなかったものでしたので、ブログに書いてみようと思います。

なお、ポートスキャンは不正アクセスに該当する可能性があるので、他人が管理しているサーバーに対しては絶対に行わないようにしてください。

方法

様々なツールがあるようですが、今回はnmapを使用しました。

Macへのインストール

$ brew install nmap

使用方法

基本の形は以下のような形です。ターゲット部分には、ホスト名、IPアドレス(CIDR表記でも可)を指定できます。

$ nmap 192.168.xxx.xxx

なお、デフォルトの場合は一部のポートが対象になります。 全てのポートを対象にしたい場合は-p-オプションをつけます。

$ nmap 192.168.xxx.xxx -p-

また、root権限でない場合は、TCP SYNスキャンになり、root権限の時はTCP connect()スキャンになります。明示的にスキャン方法を指定したい場合は、-sS, -sT, -sUなどのオプションを指定するのが良いと思います。

$ nmap -sT 192.168.xxx.xxx -p-

また、UDPについてはコネクションレスなプロトコルのため、ポートからの応答がない場合が多く、1つ1つのポートをタイムアウトまで待つため、非常に時間がかかります。 私の環境では1つのホストにつき20時間ほどかかりました。

タイムアウトやホストの並列化などnmapコマンドのオプションを使用してチューニングを行ったり、コマンド自体を並列で実施するなどの工夫が必要です。

結果

以下のような接続方法で試しました。 ラズパイとルーター間: 有線LAN ルーターとMac間: 有線LAN

結果は以下のようなイメージでした。(一部内容を変えています)

nmap -sT 192.168.xxx.xxx -p-
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-xx xx:xx JST
Nmap scan report for 192.168.xx.xx
Host is up (0.0071s latency).
Not shown: 65527 filtered tcp ports (no-response)
PORT      STATE SERVICE
80/tcp    open  http
110/tcp   open  pop3
143/tcp   open  imap
585/tcp   open  imap4-ssl
993/tcp   open  imaps
995/tcp   open  pop3s
3128/tcp  open  squid-http
8080/tcp  open  http-proxy

この結果をもとにして、 - netstatコマンド、lsofコマンドなどを使用して意図しないサービスが立ち上がっていないか確認する。 - iptables等を使用してパケットをフィルタリングする

などの対策を行います。

nmapコマンドはポートの確認だけでなく、様々なオプションが使用できます。 非常に丁寧な日本語のドキュメントもあるので目を通してみると面白いと思います。

最後に繰り返しになりますが、ポートスキャンは不正アクセスに該当する可能性があるので、他人が管理しているサーバーに対しては絶対に行わないようにしてください。

以上です。