手元のラズパイにポートスキャンしてみた
こんにちは。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コマンドはポートの確認だけでなく、様々なオプションが使用できます。 非常に丁寧な日本語のドキュメントもあるので目を通してみると面白いと思います。
最後に繰り返しになりますが、ポートスキャンは不正アクセスに該当する可能性があるので、他人が管理しているサーバーに対しては絶対に行わないようにしてください。
以上です。