Nmapとは
Nmapとは、クライアント側から対象サーバーのポートスキャンやOSスキャンなどを実施できるセキュリティスキャナです。100を超えるオプションが用意されており、対象サーバーのミドルウェアのバージョンなどを調査することもできます。今回はポートスキャンに焦点を当てて、Nmapの使い方をご紹介します。
サーバーでポートが空いているかどうかを確認する方法として、対象サーバーにログインし、netstat -anなどのコマンドでポートの開放状況を確認する方法は広く知られています。あるいは、iptables -Lなどでファイアウォールの空き状況を確認する方もいるでしょう。しかし、この方法では、サーバー内部での実行のため、本当にクライアントから見てポートが開放されているのか(何らかの要因:例えばL3スイッチ・ルーター・ファイアウォールなど中間のネットワーク機器によって接続が遮断されていないか)、確認することはできません。
そこで便利なのがNmapです。Nmapは、クライアント側から実行することができ、対象サーバーのポートの空き状況を全てチェックすることができます。
注意:Nmapを自分の管理外のサーバーに対して実行すると、不正アクセス禁止法に抵触する恐れがあります。あくまで自分のサーバーのセキュリティチェックにご活用ください。
Nmapは公式サイトでも配られていますが、Linuxならば標準のパッケージレポジトリに含まれていることが多く、CentOSならば以下のコマンドでインストールできます。
sudo yum install -y nmap
openSUSEならば以下のコマンドでインストールします。
sudo zypper install nmap
Macの場合は、Homebrewでインストールできます。
brew install nmap
Windowsで実行したい場合は、公式サイトからダウンロードしてください。GUIツール版もあります。
Nmapでのポートスキャンの使い方
Nmapでポートスキャンを実行する方法は簡単です。Nmapをインストールしたクライアントマシンから、以下のコマンドを実行します。今回は私の自宅サーバーに対して、クライアントから実行してみます。
nmap www.geek.sc
そうすると、以下の結果が返ってきます。
nmap www.geek.sc
Starting Nmap 5.51 ( http://nmap.org ) at 2013-02-26 00:58 JST
Nmap scan report for www.geek.sc (180.131.119.243)
Host is up (0.021s latency).
rDNS record for 180.131.119.243: 243.119.131.180.tokyo.global.crust-r.net
Not shown: 844 filtered ports, 151 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
587/tcp open submission
1723/tcp open pptp
Nmap done: 1 IP address (1 host up) scanned in 3.51 seconds
これで、 www.geek.scのサーバーは22番ポート(SSH)、80番ポート(http)、443ポート(https)、587ポート(submission)、1723(VPN)がクライアント側から見て空いているのが分かります。意図しないポートが空いているならば、ポートを塞いでおいたほうがいいでしょう。また、よく攻撃されるポートは、ポート番号を変更するのも手です(特にSSHはできれば22番ポートから変更しておいた方がいいでしょう)
Nmapのその他の使い方
Nmapで対象サーバーのOSのバージョンを知りたい時は、-Oオプションを付けます。今回はクライアントから私の借りているさくらVPSのOSのバージョンを調べてみます(-Oオプションはrootユーザーで実行する必要があります)。
# nmap -O www.testvps.info
Starting Nmap 6.01 ( http://nmap.org ) at 2013-02-26 01:28 JST
Nmap scan report for www.testvps.info (133.242.176.20)
Host is up (0.027s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp closed https
Device type: general purpose
Running (JUST GUESSING): Linux 2.6.X (87%)
OS CPE: cpe:/o:linux:kernel:2.6.39
Aggressive OS guesses: Linux 2.6.39 (87%)
No exact OS matches for host (test conditions non-ideal).
OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.46 seconds
OSがLinuxでカーネル2.6を使っている可能性が87%であると出ました。このように、外部からOSのバージョンを調査することも可能です。
ミドルウェアのバージョンを調べる時は、-sVオプションを付けます。今度は自宅サーバーに対して行なってみます。
nmap -O -sV www.geek.sc
Starting Nmap 5.51 ( http://nmap.org ) at 2013-02-26 11:12 JST
Nmap scan report for www.geek.sc (180.131.119.243)
Host is up (0.021s latency).
rDNS record for 180.131.119.243: 243.119.131.180.tokyo.global.crust-r.net
Not shown: 844 filtered ports, 151 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.0 (protocol 1.99)
80/tcp open http nginx 1.3.12
443/tcp open http nginx 1.3.12
587/tcp open smtp Postfix smtpd
1723/tcp open pptp YAMAHA Corporation (Firmware: 45076)
Service Info: Hosts: geek.sc, NVR500
何と!HTTPがNginxであること、Nginxのバージョン、SMTPがPostfixであること、VPNルーターがYAMAHA製であることも特定されました。さらに最後にはルーターがYAMAHA NVR500であることも特定されています。
セキュリティ対策
最初に注意書きで書かせて頂いたように、Nmapは自分の管理内のサーバーで行うようにしましょう。ただ、このように簡単にポートスキャンやOSのバージョン、ミドルウェアのバージョンを外部から調べられるという点には、日頃から充分に注意する必要があります。
意図しないポートは絶対に閉じておくと同時に、ポート番号を標準から変えたり隠蔽したりするのも手です(にわか対策ではありますが)。また、外部からポートスキャンが行われたら、そのIPをログに落として置くことも可能です。