B級システムエンジニアの備忘録

インフラ・プログラミングなんでもやるぞ雑用エンジニアブログ

CentOS Linux サーバー システム・技術情報 ネットワーク

nmapでセキュリティチェック(ポートスキャン)

投稿日:

サーバーが増えてきたり、外部にサーバーを出す場合、
セキュリティは非常に気になるところで、高価なファイアーウォールやIPS等があれば、
それほど気を使わないところでもありますが、iptablesやfirewalld等の、
OS備付の機能を使う際は設定がちゃんとできていないと大変なことになりますね。

そこで、nmapを使用したポートスキャンを自サーバーに対して行い、
確実にポートが閉じているか?特定のIPのみの許可になっているか?
等の確認をするとより確実ですね。

※ポートスキャンは場合によっては負荷を与えますので、
自サーバー以外には極力使用しないようにして下さい。
また、自サーバー以外に実行すると攻撃したとみなされ、
ブロックされる可能性もあります。

インストール方法

$ yum -y install nmap

コマンドリファレンス

オプションが多いため参考サイトより抜粋

nmap [オプション] {ターゲット}
-A OSとバージョンを検知しようとする
-sL 指定したネットワーク内のホスト一覧を表示する(リストスキャン)
-sP pingに応答するホストの一覧を表示する(Pingスキャン)
-sS TCPのSYNパケットを送ってSYN+ACKが返ってくるか調べる(TCP SYNスキャン/TCPハーフスキャン)
-sT TCPでポートに接続できるかを調べる(TCP Connectスキャン)
-sV ソフトウェア名とバージョンの表示を有効にする
-sU UDPポートをスキャンする(UDPスキャン)
-sF FINフラグだけのパケットを送って調べる(TCP FINスキャン)
-sN まったくフラグなしのパケットを送って調べる(TCP Nullスキャン)
-sX FIN/PSH/URGフラグを立てたパケットを送って調べる(Xmasスキャン)
-sA ACKフラグだけのパケットを送って調べる(TCP ACKスキャン)
-b FTP_HOST FTP_HOSTのFTPサーバを利用して調べる(FTPバウンススキャン)
-O OSを検出しようとする
-P0 Pingスキャンを行わない(アクティブなマシンを割り出すためのホスト発見プロセスが省略される)
-PS [PORTLIST] PORTLISTで指定したポート(デフォルトは80番)にSYNフラグ付きの空TCPパケットを送信する(TCP SYN Ping)
-PA [PORTLIST] PORTLISTで指定したポート(デフォルトは80番)にACKフラグ付きの空TCPパケットを送信する(TCP ACK Ping)
-PU [PORTLIST] PORTLISTで指定したポート(デフォルトは31338番)に空UDPパケットを送信する(UDP Ping)
-PE ICMPタイプ8(エコー要求)パケットをターゲットに送信する(ICMP Ping)
-PR IPベースのスキャンより高速なARPスキャンを行う(ARP Ping)
-n DNSによる逆引き名前解決を行わない
-R すべてのターゲットに対して常にDNSによる逆引き名前解決を行う
-p PORT スキャンするポートをPORTで指定する(1-1023、U:53,T:80)UはUDPポート、TはTCPポートを示す
-F 限定したポートのみ調べる(約1200ポート)
-r 調べるポートの順番を無作為(デフォルト)ではなく順に選ぶ

使い方

まず、前提ですが、ICMPを閉じているとそもそも実行ができません。
なので、その環境のなかで使用する場合は、-P0 pingスキャンを行わないオプションを付け忘れないようにしてください。
自サーバーのケースでお話し致しますので、実行される場合はICMPを許可してもらったほうがよろしいかもしれませんね。
ただ、本稼働後は外部へのICMPの閉じ忘れにご注意ください。
※ICMPはポート番号はありませんので、ファイアーウォールへの記述はプロトコル名でして下さい。

ステータス

ステータスは以下の6つの状態に分類されます。
基本はopen,close,filteredになるかと思います。

open TCP,UDPパケットがアクセス許可されている

close アクセス許可されているが、アプリケーションが存在しない場合等。実際には許可されているので、
アプリケーションが動いた場合はopenと同じ状態ではある。RESETパケットを送られた場合等。

filtered 何らかのパケットフィルタリングが動作しており、ポートまで到達できない。
ファイアーウォール、IPS、ルーター、iptables/firewalld等による制限等が考えられる。

unfiltered nmapでは判別のできないポート、ポート自体はアクセスが可能な状態。
他のソフトウェアでは解析が可能かもしれない。

open|firterd open filteredのいずれかの状態であるが、判別ができない場合。
アクセスが可能であるがアプリケーションが応答しない場合に考えられる。

close|filtered ポートが閉じられている場合、もしくはフィルタ処理がされている場合。
これも同様にNmapで判定ができない際。

コマンド例

対象のIPに対してデフォルトのスキャン対象ポートを調査

※1-1024(全ポート)と1025移行はnmap-sericesファイルに記述されている特定ポートになるようです。。。正しくなかったらすみません。tcpdumpを使うとスキャン対象となった通信がわかりますので、
自身で確認してみてください。コマンドはtcpdump -nn src host {nmapを実行するIP}

#nmap {スキャン対象IP}
Starting Nmap 5.51 ( http://nmap.org ) at 2017-10-22 13:41 JST
Nmap scan report for host.example.com (xxx.xxx.xxx.xxx)
Host is up (0.00096s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp closed https
631/tcp closed ipp

ICMPが閉じられている場合

#nmap -P0 {スキャン対象IP}
Starting Nmap 5.51 ( http://nmap.org ) at 2017-10-22 13:41 JST
Nmap scan report for host.example.com (xxx.xxx.xxx.xxx)
Host is up (0.00096s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp closed https
631/tcp closed ipp

ポート指定スキャン
# nmap {スキャン対象IP} -p 11211 //memcached待ち受けポート
Starting Nmap 5.51 ( http://nmap.org ) at 2017-10-22 14:05 JST
Nmap scan report for xxx.xxx.xxx.xxx
Host is up (0.00038s latency).
PORT STATE SERVICE
11211/tcp open unknown
MAC Address: XX:AX:BX:0X:XX:XX (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.14 seconds
ポート指定スキャン 指定範囲
# nmap {スキャン対象IP} -p 10050-10051 //zabbix待ち受けポート(server/agent)
Starting Nmap 5.51 ( http://nmap.org ) at 2017-10-22 14:09 JST
Nmap scan report for xxx.xxx.xxx.xxx
Host is up (0.00040s latency).
PORT STATE SERVICE
10050/tcp filtered unknown
10051/tcp filtered unknown
MAC Address: XX:AX:BX:0X:XX:XX (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.13 seconds
OS/バージョン等の詳細を取得
# nmap -A {スキャン対象IP}
Starting Nmap 5.51 ( http://nmap.org ) at 2017-10-22 14:21 JST
Nmap scan report for host.example.com (xxx.xxx.xxx.xxx)
Host is up (0.00070s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE VERSION
80/tcp open http nginx 2.0.0
|_http-methods: No Allow or Public header in OPTIONS response (status code 405)
|_http-title: Welcome to nginx!
443/tcp closed https
631/tcp closed ipp
Device type: general purpose|WAP|specialized
Running (JUST GUESSING): Linux 2.6.X|2.4.X (89%), Netgear embedded (89%), Linksys Linux 2.4.X (87%), Asus Linux 2.6.X (87%), Crestron 2-Series (86%)
Aggressive OS guesses: Linux 2.6.23 - 2.6.33 (89%), Linux 2.6.31 - 2.6.34 (89%), Linux 2.6.9 - 2.6.27 (89%), Netgear DG834G WAP (89%), Linux 2.6.27 (Ubuntu 8.10) (88%), Linux 2.6.22 (Fedora Core 6) (88%), Linux 2.6.32 (88%), Linux 2.6.34 (88%), OpenWrt White Russian 0.9 (Linux 2.4.30) (87%), OpenWrt 0.9 - 7.09 (Linux 2.4.30 - 2.4.34) (87%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 4 hops
TRACEROUTE (using port 443/tcp)
HOP RTT ADDRESS
1 57.71 ms xxx.xxx.xxx.xxx
2 16.77 ms host1.example.com (xxx.xxx.xxx.xxx)
3 0.52 ms host2.example.com (xxx.xxx.xxx.xxx)
4 0.74 ms host3.example.com (xxx.xxx.xxx.xxx)
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 15.36 seconds

336

336

-CentOS, Linux, サーバー, システム・技術情報, ネットワーク

Copyright© B級システムエンジニアの備忘録 , 2021 All Rights Reserved.