いますぐ実践! Linuxシステム管理

いますぐ実践! Linux システム管理 / Vol.258 / 読者数:2584名

こんばんは、うすだです。

黄金週間まっただ中ですが、お休みを満喫されていますでしょうか。
お休みの方は緩んだ脳みそを引き締めるため、 あいかわらず猛烈に仕事をされている方はちょっと手を休めて、 ご覧いただけますと幸いです。

さて、毎年、黄金週間中にやるべきことを決めてから挑むのですが、 あれもこれもとよくばった計画を立てると、ほぼ全てできないことが、 長年の経験からわかっております。

そのため、今年は、数冊の本を読んで理解することだけに絞りました。
…が、5月に入った段階で、すでに遅れが生じていました。
そして今、5月4日が終わろうとしていますので、あと2日しかありませんが、 おそろしいことに、半分も終わっていません。

しかし、この時点で諦めたら絶対できなくなるということも、 長年の経験でわかっています。ですので、2日しかないけど、 やればできると自分に思い込ませようとしています。

ただ、明日は、家族サービスのため、1日外出することになっています。
実質あと1日…。で、できるさ。できるとも。(震え声)

まだコップに半分以上…と言い聞かせて、今回もはりきってまいります。

今回のお題 - Nmap をもう少し使いこなす (レベル:中級)

前回、Nmap でポートスキャンや OS の推測を行いました。

Vol.257 - Nmap でセキュリティをチェックする
http://www.usupi.org/sysad/257.html

ざっくりとした説明だけで終わってしまいましたので、 今回はもうちょい詳しく説明したいと思います。

ポートスキャンの方法

ポートスキャンの方法は1つではありません。 オプションによって方法を切り替えられます。 そのオプションをどどどっとご紹介します。

  • 「-sT」 - TCP connectスキャン
    一般ユーザの権限で実行した場合の、デフォルトの方法です。
    ごくフツーに、connect() システムコールを使って、 つながるかどうかを確認します。そのため、相手のデーモンプロセスに、 自身から接続を試みたことがわかってしまいます。効率もよくありません。
  • 「-sS」 - TCP SYNスキャン
    root の権限で実行した場合の、デフォルトの方法です。
    TCP では、3ウェイハンドシェークを使って接続を確立しますが、 最初の SYN セグメントだけを送って確認をします。たとえば、 SYN/ACK が返ってきた場合は開いていると判断できます。 RST が返ってきた場合は誰も待ち受けていないと推測できます。 接続を確立しないため、 相手に気づかれない可能性が(少なくともconnectスキャンよりは)あります。
  • 「-sN」 - TCP Nullスキャン
    TCP では、そのポートが CLOSED のときに、RST を含まないセグメントを受信したら、 RST を返すことになっています。これを利用して、 誰も待ち受けていないかどうか推測することができます。
    (開いているか、ファイアウォール等でパケットを破棄されているか、 どっちなのかはわかりません。)
    Nullスキャンの場合、フラグに何も指定しないセグメントを送ります。
  • 「-sF」 - TCP FINスキャン
    Nullスキャンと同様、TCPのフラグに FIN だけを設定します。
  • 「-sX」 - TCP Xmasスキャン
    Nullスキャンと同様、TCPのフラグに FIN|PSH|URG を設定します。 複数のフラグで「飾られている」ため「Xmas」スキャンと言うようです。
  • 「-sA」 - TCP ACKスキャン
    TCPのフラグに ACK を設定します。待ち受けているかどうかではなく、 ファイアウォールによりフィルタリングされているかどうか、 ステートフルかどうかを推測できます。

また、「--scanflags」オプションで、フラグを直接指定できます。
すでにおわかりかと思いますが、-sT オプション以外は、 すべて root の権限が必要です。

TCP だけでなく、UDP もスキャンできます。
こちらも、root 権限が必要です。

  • 「-sU」 - UDPスキャン
    TCPではなくUDPに対してスキャンします。データが空のUDPパケットを送り、 ICMP Destination Unreachable の有無やコードの種類から推測します。

…ああ、説明ばっかりになってしまいました。

せめてもの償い? に、ACKスキャンの例を以下に示します。
誰にもフィルタリングされていない場合、以下の出力が得られます。

  # nmap -sA -p 80 www.example.org
  ...中略...
  PORT   STATE      SERVICE
  80/tcp unfiltered http

  Nmap done: 1 IP address (1 host up) scanned in 0.38 seconds

途中でフィルタリングされていると、以下の出力が得られます。

  # nmap -sA -p 80 dns.example.com
  ...中略...
  PORT   STATE      SERVICE
  80/tcp filtered   http

  Nmap done: 1 IP address (1 host up) scanned in 2.32 seconds

他のオプションをご紹介します

他にもいろいろなオプションあります。主なものを以下に示します。

  • 「-sn」
    ポートスキャンを行いません。
  • 「-Pn」
    pingスキャン(ICMP Echo Request/Reply による確認)を行いません。
    逆に、「-sP」を指定すると、pingスキャンだけを行います。
  • 「-p ポート番号」
    前回も紹介しましたが、指定したポート番号だけをスキャンします。
    番号の前に「T:」や「U:」をつけると、TCP や UDP の明示的な指定ができます。 また、「,」や「-」も使えます。
    例: 「-p 22,25,80」「-p T:53,U:53」「-p 21-23,25,80-1024」
  • 「-sV」
    各ポートのサービスのバージョンを検出します。
    ちなみに、前回紹介した「-A」を指定すると、OS検出とバージョン検出の両方を行います。
  • 「-oX ファイル名」
    出力をXML形式にします。ファイル名を「-」にすると、標準出力に出力します。
  • 「-v」
    冗長な出力が得られます。
  • 「-d [レベル]」
    デバッグ情報を出力します。
    レベルを指定することもできます。レベルが大きいほど、出力する情報が多くなります。
  • 「--packet-trace」
    送受信したパケットの情報を出力します。

例を少し示します。

-sV オプションを指定すると、以下のような結果が得られます。
53/udp で試すと、NSD とそのバージョンまでがわかってしまいました。

  # nmap -sU -sV -p 53 dns.example.org
  ...中略...
  PORT   STATE SERVICE VERSION
  53/udp open  domain  ISC BIND NSD 3.1.1
  ...後略...

ポートを指定しなければ、すべてのポートのバージョンを確認します。

  $ nmap -sV foo.example.com
  ...中略...
  PORT     STATE SERVICE         VERSION
  21/tcp   open  ftp             OpenBSD ftpd 6.4 (Linux port 0.17)
  22/tcp   open  ssh             (protocol 2.0)
  80/tcp   open  http            Apache httpd 2.4.6 ((Ubuntu))
  111/tcp  open  rpcbind         2-4 (RPC #100000)
  139/tcp  open  netbios-ssn     Samba smbd 3.X (workgroup: KURIG)
  445/tcp  open  netbios-ssn     Samba smbd 3.X (workgroup: KURIG)
  ...後略...

--packet-trace オプションを指定すると、こうなります。

  # nmap -p 80 -Pn --packet-trace www.usupi.org
  ...中略...
  SENT (0.1650s) TCP 192.168.1.99:34932 > 115.146.17.161:80 S \
  ttl=50 id=25778 iplen=44  seq=922405641 win=1024 <mss 1460>
  RCVD (0.1808s) TCP 115.146.17.161:80 > 192.168.1.99:34932 SA \
  ttl=50 id=0 iplen=44  seq=1440429165 win=5840 <mss 1414>
  ...後略...

SYNフラグ(S)を設定したセグメントを送信したら、 SYN/ACKフラグ(SA)が設定されたセグメントを受信できた、 というやりとりを確認できます。
(root 権限で実行しているので、SYNスキャンを行っています。)

サブネット内のマシンを探すこともできます

前々回、ping や traceroute コマンドを駆使(というほどでもないです)して、 サブネット内に生息するマシンを洗い出す、というネタをさらりとご紹介しました。

Vol.256 - サブネット内のマシンをてっとり早く知る
http://www.usupi.org/sysad/256.html

ですが、実は、Nmap を使えば、超簡単にできてしまいます。

といいますか、ネットワークを引数に指定すると、 そのネットワーク内にいるホストをシラミ潰しに探し、 それぞれポートスキャンを行います。

ここで、「-sn」オプションを指定して、ポートスキャンを行わないようにすれば、 ホストだけを洗い出せます。

ネットワークは、「ネットワークアドレス/ネットマスク」の形式で指定します。 たとえば、クラスC の 192.168.1.0 内にいるマシンを洗い出したい場合は、 以下のように実行します。

  $ nmap -sn 192.168.1.0/24
  ...中略...
  Nmap scan report for ns1 (192.168.1.2)
  Host is up (0.00032s latency).
  MAC Address: 00:01:02:03:04:05 (Foo International)
  Nmap scan report for ftp (192.168.1.3)
  Host is up (0.00033s latency).
  MAC Address: 00:02:04:06:08:0a (Bar Company)
  ...中略...
  Nmap done: 256 IP addresses (6 hosts up) scanned in 1.90 seconds

-Pn オプションを指定して、 pingスキャンを行わないようにした方がいいかもしれません。

ちなみに、-sn を指定しなかったら、検出したすべてのマシンに対して、 ポートスキャンを行います。

  $ nmap 192.168.1.0/24
  ...中略...
  Nmap scan report for 192.168.1.13
  Host is up (0.010s latency).
  Not shown: 994 closed ports
  PORT      STATE    SERVICE
  990/tcp   filtered ftps
  1106/tcp  filtered isoipsigport-1
  2800/tcp  filtered acc-raid
  5802/tcp  filtered vnc-http-2
  6567/tcp  filtered esp
  62078/tcp open     iphone-sync
  MAC Address: 11:22:33:44:55:66 (Mutsu)

  Nmap scan report for 192.168.1.25
  Host is up (0.015s latency).
  Not shown: 996 closed ports
  PORT     STATE SERVICE
  53/tcp   open  domain
  80/tcp   open  http
  2601/tcp open  zebra
  2602/tcp open  ripd
  MAC Address: 99:99:99:99:99:99 (Ushi)
  ...後略...

もし仮に、-A オプションなんて指定したら、検出したすべてのマシンに対して、 OSと各サービスのバージョンを確認しようとします。
…本当に必要なら、終わるまで気長に待ってください。

GUI で簡単操作

なんだかオプションがいっぱいあってよくわからないなーと思われた貴兄のために、 GUI も用意されています。別パッケージになっていますので、 Debian系の方は「zenmap」、 RedHat系の方は「nmap-frontend」という名のパッケージを入れてください。 いつものごとく、下記のような手順で行います。

  $ sudo apt-get install zenmap  (Debian系の場合)
  # yum install nmap-frontend    (RedHat系の場合)

そして、「zenmap」コマンドを実行すると、ウィンドウが表示されます。
あとは、煮るなり焼くなり、ご自由にお使いください。

ただ、一般ユーザの権限で起動すると、 gksuなどが勝手に呼び出されてパスワードを入れたらroot権限が得られた状態で使える、 という親切な設計にはなっていません。 「rootユーザーではありません」とごていねいに忠告してくださいますので、 root 権限を得てから実行しましょう。

おわりに

以上、Nmap を、前回より少しだけ詳しくご紹介しました。

レベルを中級としていますが、 単に説明が大雑把な(初心者向きじゃない)だけの気もします。 …気にしないようにしていただけますと幸いです。

ありがたいことに、オフィシャルサイトには日本語のドキュメントが用意されていて、 わかりやすいです。ぜひご覧ください。

Nmap リファレンスガイド (Man Page)
http://nmap.org/man/jp/

宿題の答え

前回の宿題は、

  Nmapでスキャンされるポートのデフォルトが何か、調べてみましょう。

でした。

結局、公開されているドキュメントだけではわからなくて、 ソースコードを確認しました。

パッケージに含まれる /usr/share/nmap/nmap-services というファイルには、 以下のように、サービス名、ポート番号/プロトコル、 公開されている率(open-frequency)、そしてコメントが記述されています。

  $ cat /usr/share/nmap/nmap-services
  ...中略...
  finger  79/tcp  0.006022
  finger  79/udp  0.000956
  http    80/sctp 0.000000        # World Wide Web HTTP
  http    80/tcp  0.484143        # World Wide Web HTTP
  http    80/udp  0.035767        # World Wide Web HTTP
  ...後略...

デフォルトでは、TCP のうち、 公開されている率(「open-frequency」とあるのですが訳すとなんと言うのでしょう?) の高い順に1000個、確認するようになっています。
その1000個を具体的に知るには、以下を実行してみてください。

  $ grep '^[a-z].*[0-9]*\/tcp' /usr/share/nmap/nmap-services | \
  sort -nr -k 3 | head -1000
  http    80/tcp  0.484143        # World Wide Web HTTP
  telnet  23/tcp  0.221265
  https   443/tcp 0.208669        # secure http (SSL)
  ftp     21/tcp  0.197667        # File Transfer [Control]
  ssh     22/tcp  0.182286        # Secure Shell Login
  ...後略...

ちなみに、高い順にいくつまで確認するか、その個数を指定したければ、 「--top-ports」オプションを使います。たとえば、 高い順に10個確認をしたければ、以下のように実行します。

  # nmap --top-ports=10 www.example.com
  ...中略...
  PORT     STATE    SERVICE
  21/tcp   closed   ftp
  22/tcp   closed   ssh
  23/tcp   filtered telnet
  25/tcp   filtered smtp
  80/tcp   open     http
  110/tcp  closed   pop3
  139/tcp  closed   netbios-ssn
  443/tcp  closed   https
  445/tcp  filtered microsoft-ds
  3389/tcp closed   ms-wbt-server

  Nmap done: 1 IP address (1 host up) scanned in 1.35 seconds

また、指定した率以上のポートをスキャンしたければ、 「--port-ratio」オプションを使います。たとえば、 0.1 以上のサービスだけを確認したい場合は、以下のように実行します。

  # nmap --port-ratio=0.1 www.example.com
  ...中略...
   PORT    STATE    SERVICE
  21/tcp  closed   ftp
  22/tcp  closed   ssh
  23/tcp  filtered telnet
  25/tcp  filtered smtp
  80/tcp  open     http
  443/tcp closed   https
  ...後略...

今回の宿題

今回の宿題は、

  TCPのフラグを変えたら応答が変わるか、複数のOSで試しましょう。

です。

Nmap ではTCPのフラグを指定できます。OSによって振舞いが変わるのか、 実はみんな同じなのか、手元にあるいくつかのOSで試してみましょう。

…うーん、行き上がりばったり感のある宿題ですが、 できるだけ多くのOSで試してみたいと思います。…い、いえ、試してみてください。

あとがき

先月、1つ歳をとり、年寄りの領域の奥へ、 さらに一歩踏み入れたような気がしております。

で、そんな年寄りにとって、気になる記事が載っていました。

技術者を襲う3年後の悲劇
http://itpro.nikkeibp.co.jp/article/NCD/20140421/551912/

あちこちで話題になっているようですが…。

景気に波があるように、技術者の需要にも波があって当然です。
企業が、それに合わせて正社員を柔軟に増減できない以上、 ずれによっていろいろな弊害が生じるのは、避けられないように思います。

結局、企業がいま欲しいと思う人材になるよう、そして将来も欲しい! と思ってもられるよう、自分の技術を日々磨くしかありません。

また、技術一辺倒でなく、 広い視野で考え行動する必要もあるのではないかと思います。
ある分野のエキスパートになれば、食いっぱぐれることはありません。
ですが、エキスパートかどうかにかかわらず、様々な視点から考えられた方が、 間違った思い込みにはまることなく、よい方向に進めるんじゃないかと思います。

 

…とまあ、とっても当たり前のことを書いてしまいましたが、 実のところ正直に書きますと、この記事で一番驚いたのは、 「みずほ銀行のシステム統合に20万人月かかる」というところでした。

1人月100万円としたら…に、2兆円!? 50万円/人月でも、1兆円??

それだけで気持ちがいっぱいいっぱいになってしまった自分の器の小ささに、 いままさに驚愕しているところです。あうあう…。

 

今回も、ここまで読んでいただき、誠にありがとうございました。
次回は、5月18日(日) 未明にお会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」- 黄金週間中もみていただきありがとうございます。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://usupi.org/k/ (モバイル栗日記)
http://twitter.com/kuriking/ (栗つぶやき)
http://facebook.com/kuriking3 (栗顔本)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本