Nmapでサーバーをポートスキャン

Nmapとは

Nmapとは、クライアント側から対象サーバーのポートスキャンやOSスキャンなどを実施できるセキュリティスキャナです。100を超えるオプションが用意されており、対象サーバーのミドルウェアのバージョンなどを調査することもできます。今回はポートスキャンに焦点を当てて、Nmapの使い方をご紹介します。

サーバーでポートが空いているかどうかを確認する方法として、対象サーバーにログインし、netstat -anなどのコマンドでポートの開放状況を確認する方法は広く知られています。あるいは、iptables -Lなどでファイアウォールの空き状況を確認する方もいるでしょう。しかし、この方法では、サーバー内部での実行のため、本当にクライアントから見てポートが開放されているのか(何らかの要因:例えばL3スイッチ・ルーター・ファイアウォールなど中間のネットワーク機器によって接続が遮断されていないか)、確認することはできません。

そこで便利なのがNmapです。Nmapは、クライアント側から実行することができ、対象サーバーのポートの空き状況を全てチェックすることができます。

注意:Nmapを自分の管理外のサーバーに対して実行すると、不正アクセス禁止法に抵触する恐れがあります。あくまで自分のサーバーのセキュリティチェックにご活用ください。

Nmapは公式サイトでも配られていますが、Linuxならば標準のパッケージレポジトリに含まれていることが多く、CentOSならば以下のコマンドでインストールできます。

openSUSEならば以下のコマンドでインストールします。

Macの場合は、Homebrewでインストールできます。

Windowsで実行したい場合は、公式サイトからダウンロードしてください。GUIツール版もあります。

Nmapでのポートスキャンの使い方

Nmapでポートスキャンを実行する方法は簡単です。Nmapをインストールしたクライアントマシンから、以下のコマンドを実行します。今回は私の自宅サーバーに対して、クライアントから実行してみます。

そうすると、以下の結果が返ってきます。

これで、 www.geek.scのサーバーは22番ポート(SSH)、80番ポート(http)、443ポート(https)、587ポート(submission)、1723(VPN)がクライアント側から見て空いているのが分かります。意図しないポートが空いているならば、ポートを塞いでおいたほうがいいでしょう。また、よく攻撃されるポートは、ポート番号を変更するのも手です(特にSSHはできれば22番ポートから変更しておいた方がいいでしょう)

Nmapのその他の使い方

Nmapで対象サーバーのOSのバージョンを知りたい時は、-Oオプションを付けます。今回はクライアントから私の借りているさくらVPSのOSのバージョンを調べてみます(-Oオプションはrootユーザーで実行する必要があります)。

OSがLinuxでカーネル2.6を使っている可能性が87%であると出ました。このように、外部からOSのバージョンを調査することも可能です。

ミドルウェアのバージョンを調べる時は、-sVオプションを付けます。今度は自宅サーバーに対して行なってみます。

何と!HTTPがNginxであること、Nginxのバージョン、SMTPがPostfixであること、VPNルーターがYAMAHA製であることも特定されました。さらに最後にはルーターがYAMAHA NVR500であることも特定されています。

セキュリティ対策

最初に注意書きで書かせて頂いたように、Nmapは自分の管理内のサーバーで行うようにしましょう。ただ、このように簡単にポートスキャンやOSのバージョン、ミドルウェアのバージョンを外部から調べられるという点には、日頃から充分に注意する必要があります。

意図しないポートは絶対に閉じておくと同時に、ポート番号を標準から変えたり隠蔽したりするのも手です(にわか対策ではありますが)。また、外部からポートスキャンが行われたら、そのIPをログに落として置くことも可能です。