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

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


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

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

UNIX や Linux 系の雑誌が相次いで休刊になっていますが、今度は、 あのオープンソースマガジンまでもが、休刊になってしまうようですね。

オープンソースマガジンの休刊にあたって
http://opentechpress.jp/~sado/journal/395

雑誌名が UNIX USER の頃には、いろいろとお世話になりました。
今でも覚えているのが、X11R5 特集の号です。(20世紀末の頃です。)
今でこそ、X といえば標準でパッケージがありますが、当時は、 ソースを入手してコンパイルして使うのが、わりと一般的でした。

コンパイルの仕方とか、ソース・ツリーの構造、エクステンションの種類や使い方、 国際化の話など、とってもためになったことを覚えています。

上記の最後にある、 『他社のLinux/OSS関連雑誌も同時期に休刊となる』というひとことが、 とても意味深です。
これ以上雑誌が減ってしまいますと、情報源がますますなくなってしまいます。 他の媒体に移行しているのでしょうか…ああ、気になります。
(今でも読んでいる SoftwareDesign ではありませんように…!)

もやもやっとしてますが、今週も、なんとかはりきってまいりますよ!

今週のお題 - named を遠隔操作する

今や、いつでもどこでも、DNS は必要不可欠な存在となりました。

自前でドメインを取得し、サーバを立てているところでは、外のひとたちのために、 DNS サーバを立ち上げる必要があります。
また、DNS を使うとなにかと便利ですので、社内用に DNS を使っているところも、 かなりあるのではないかと思います。

しかし、そんな大事な DNS サーバがとち狂ってしまいますと、 ホスト名でアクセスできなくなり、実質ネットワークが使えなくなってしまいます。

そんなことにならないよう、日頃からみっちり監視しなくてはいけないのですが、 だからこそ、なるべく手間をかけたくない、とも言えます。
単独のマシン上で、あちこちの DNS サーバの監視や再起動を行えると、 便利ですよね。

そんなわけで、今週は、別のマシンから DNS サーバを操作する方法を、 ご紹介したいと思います。


DNS サーバと言えば、BIND がもっとも使われているのではないかと思いますが、 その BIND には、rndc というコマンドがあります。
rndc を用いますと、ネットワークを通じて、DNS サーバ(named)の再起動を行ったり、 各種情報の取得などを行うことができます。
(ちなみに、デフォルトでは、TCP の 953番ポートを使います。)

つまり、今週のお題では、別のマシンで動作している named を、 rndc で操作する方法をご紹介したいと思います。 (djbdns などをお使いの方は、申し訳ありませんが、もんもんとしてください。)

ただ、rndc は、BIND 9 より前のバージョンには、もれなくついてこないようです。 ですので、古い BIND をお使いの方は、最新版の BIND にすることをお勧めします。
また、BIND 9.1 と 9.2 とでは、rndc のプロトコルに互換性がないそうです。 混在する環境でのご使用の際には、ご注意ください。

 

さて、rndc が使えるようにする手順は、以下のようになります。

  1. 秘密鍵を作成する。
    dnssec-keygen というコマンドで作成します。
  2. named.conf を修正して、named が rndc を受け付けるようにする。
    rndc を受け付けるように、named.conf を修正します。
    1. で作成した秘密鍵も、設定に加えます。
  3. rndc.conf を修正して、rndc で named を遠隔操作できるようにする。
    1. で作成した秘密鍵を、設定に加えます。

あらためて書くほどでもありませんでしたね。
まあ、それぞれについて、ご紹介していきたいと思います。


まずは、通信時に使用する鍵を、dnssec-keygen コマンドで作成します。
実行するのは、DNS サーバ・マシン上でも、rndc を実行するマシン上でも、 どちらでも構いません。コマンドの使用例を、以下に示します。

  % dnssec-keygen -a hmac-md5 -b 512 -n user foo

-a オプションでアルゴリズムを指定できますが、 rndc は HMAC-MD5 しか対応していませんので、他の選択肢はありません。
-b オプションで鍵の長さを指定します。HMAC-MD5 の場合、 1〜512の範囲に限られますが、万全を期して 512 としています。(お好みでどうぞ。)
-n オプションは、よくわかりませんが、rndc の場合関係なさそうです。
(ただ、指定しないとエラーになりますので、指定しています。)
foo は、後述の出力ファイル名に使われます。(お好みの名前をどうぞ。)

これを実行すると、 Kfoo.+157+数字.private と Kfoo.+157+数字.key というファイルができます。
ここでは、Kfoo.+157+数字.private の中の Key: で示される文字列を、 秘密鍵として使用します。(Kfoo.+157+数字.key にもありますけどね。)

  % cat Krndc.+157+数字.private
  Private-key-format: v1.2
  Algorithm: 157 (HMAC_MD5)
  Key: VG1HK9nAs0NrWVND9e6y7kGB1QSwkkPWgsO8ZEIDXY7plVqn...(後略)

VG1HK9云々…という部分が、秘密鍵です。


次に、DNS サーバ・マシン上の /etc/named.conf を修正して、 rndc からの要求を受け付けるようにします。以下のような項目を追加しましょう。

  controls {
      inet DNSサーバのIPアドレス allow { rndc を許可する範囲; } \
      keys { 鍵の名前; };
  };
  include "/etc/rndc.key";

controls で、rndc を有効にします。
include は、/etc/rndc.key という外部のファイルを読み込んで、 解釈をするためのものです。/etc/rndc.key には、公開鍵が入っています。

たとえば、以下のように記述します。

  controls {
      inet 192.168.1.1 allow { 192.168.1.0/24; } keys { "usukey"; };
      inet 127.0.0.1 allow { 127.0.0.1; } keys { "usukey"; };
  };
  include "/etc/rndc.key";

DNSサーバのIPアドレスが 192.168.1.1, ネットワークが 192.168.1.0/24 で、 そのネットワークからの要求は、誰であっても許可するという設定になります。 また、ここでは、ローカルホストも許可しています。
おっと、鍵の名前は、いずれも usukey です。
(もちろん、ネットワーク内のマシンであっても、 鍵を知らなければ受け付けてもらえません。)

 

そして、公開鍵が記述された /etc/rndc.key を作成します。
(named.conf の include で指定したファイル名と同じなら、 別の名前でも構いません。)
rndc.key の内容は、たとえば以下のようなものです。

  key "usukey" {
      algorithm hmac-md5;
      secret "VG1HK9nAs0NrWVND9e6y7kGB1QSwkkPWgsO8ZEIDX...(後略)";
  };

key の後には、先ほど named.conf に記述した、鍵の名前を指定します。
algorithm には、hmac-md5 を指定します。
secret には、1. で作成した秘密鍵を指定します。

rndc.key は、一般人が参照できないようにしておきましょう。

  # chown root.named /etc/rndc.key
  # chmod 640 /etc/rndc.key

最後に、named.conf が変更されたことを、named に知らせます。

  # /etc/rc.d/init.d/named reload

rndc を実行するマシンも、設定を行います。

まず、DNS サーバ・マシン上で作成した /etc/rndc.key と同じファイルを、 こちらのマシンにも用意します。

次に、/etc/rndc.conf という、rndc の設定ファイルを作成します。
内容は、以下のようなものです。

  options {
      default-server  DNS サーバ名;
      default-key     鍵の名前;
  };
  include "/etc/rndc.key";

options では、デフォルトの DNS サーバ・マシンと、鍵の名前を指定します。 これらは省略可能ですが、省略すると、 rndc コマンド実行の度に双方を指定する必要があります。
include は、named.conf のときと同様です。

 

それでは、実際に rndc を実行してみましょう。

  # rndc status

と実行しますと、named の状態がわかります。
options を記述していない場合は、-s オプションで DNS サーバ・マシンを、 -y オプションで鍵の名前を指定します。

  # rndc -s localhost -y usukey status

他にも、コマンドがいくつかあります。 (rndc を引数なしで実行すると、一覧が出力されます。)
たとえば、reload で設定の再読み込み、flush でキャッシュのクリア、 dumpdb でキャッシュの出力などを行うことができます。

  # rndc dumpdb
  # cat /var/named/named_dump.db
  ...

以上、rndc の設定方法を、ご紹介しました。

駆け足でご紹介してしまいましたが、それでもなんだかごちゃごちゃしていますね。 わかりにくかったら、申し訳ありません。

*BSD 上で試したとき、 dnssec-keygen がいつまでたっても終わらない現象に遭遇しました。 乱数の生成に /dev/random を使用しているのですが、/dev/random は、 乱数の生成に必要なデータが揃うまで乱数を出力しないため、 半永久的に待たされているようでした。
そんなときは、セキュリティ上あまりお勧めできないのですが、引数に、 -r /dev/urandom か -r keyboard を追加して、実行してみてください。
前者は、とにかく乱数を出力してくれますし、後者は、 キーボードからの入力を元に乱数を生成してくれますので、ちゃんと終了します。

  % dnssec-keygen -a hmac-md5 -b 512 -n user -r keyboard foo
  start typing:
  .......(キーボードを乱れ打ちます)....
  stop typing.
  Kfoo.+157+数字

宿題の答え

先週の宿題は、

  Logwatch で、すべてのサービスの集計結果を必要としますが、特定の
  サービスの集計結果が先頭に来るようにしてください。

でした。

実現可能かどうかを確認せずに宿題としてしまいましたが、 logwatch を2回起動すればよい、ということに気がつきました。
たとえば、sshd を先頭に持ってきたければ、

  # logwatch --service sshd --print
  # logwatch --service all --service -sshd --print

と実行すればよいですね。
ただ、この2つをそのまま合体すると、間のヘッダとフッタが邪魔です。
ですので、これらを除去するシェル・スクリプトを書いてみました。

  #!/bin/sh
  TMPFILE=/tmp/logwatch-$$
  trap "rm -f $TMPFILE" 0 1 2 3 9 11 15

  if [ $# -lt 1 ]; then
      echo "Usage: $0 services..."
      exit 1
  fi

  CMD="logwatch --print"
  for serv in $*; do
      CMD="$CMD --service $serv"
  done
  $CMD > $TMPFILE
  LINE=`wc -l $TMPFILE | awk '{print $1}'`
  head -`expr $LINE - 3` $TMPFILE
  CMD="logwatch --print --service all"
  for serv in $*; do
      CMD="$CMD --service -$serv"
  done
  $CMD > $TMPFILE
  LINE=`wc -l $TMPFILE | awk '{print $1}'`
  tail -`expr $LINE - 9` $TMPFILE

logwatch を2回起動して、標準出力に結果を出力するスクリプトです。
ヘッダとフッタの除去を、やや無理矢理行っています。 バージョン7 などではうまく除去されると思います。 バージョン6 とかの場合は、最後の行の 9 を 7 にしてみてください。 それでもうまくいかない場合や、ほかのバージョンをお使いの方は、 いろいろ試行錯誤してみてください。

で、これを、logwatch-prv.sh というファイル名で保存し、 以下のように実行しますと、メールで通知してくれます。

  # ./logwatch-prv.sh sshd | Mail -s "LogWatch for `hostname`" root

これを cron でやる場合は…各自でお悩みください。(^ε^)

今週の宿題

今週の宿題は、

  rndc で使用する TCP のポート番号を、別の番号に変更しましょう。

です。

それぞれの設定は、 named.conf と rndc.conf のオンラインマニュアルに書いてあります。 (man named.conf とか実行してください。)
デフォルトの 953番を使わないことで、 セキュリティが強化されるというわけではありませんが、 知っていて損はないかなと思いますので…。

あとがき

すでにあちこちで自慢していますが、先日、J-WAVE というラジオ局の番組から、 栗日記(ブログ)を紹介させて欲しい、という願ったりかなったりなお話が、 舞い込んできました。

でもって、一昨日の夜中に、電話でですが、 生まれてはじめて収録というものをやりました。

雑談のような雰囲気で話しながら、質問とその答えを探り、 答えの方向性が出てきたところで録音する、という形式で、収録が行われました。

わたしはあがり性なので、詰まったり言い違えたりといったことが、 多々あったわけですが、その都度収録し直してもらいましたので、なんとか、 最低限レベルで収録を終えることができた…と思います。

ちなみに、J-WAVE M+(MUSIC PLUS) という番組の、 WILLCOM BLOG ON! というコーナーで、10日の午前11時45分頃に、 紹介していただけます。

J-WAVE が首都圏限定なため、わたしは生では聞けませんが、もし首都圏にお住いで、 興味があるなんていう方は、聞いていただけますと幸いです。
わたしのおどおどしたニホンゴが、公共電波で流れるのかと思うと、 もー恥ずかしくて、今から穴に入りたい気分です。(-ε-;;

 

まあそれはともかく、このお話をいただいたときに、ラジオという、 耳で聞く媒体を通して、ブログという、視覚中心のものを紹介するということが、 ちょっと不思議に思われました。

せっかくの機会なので、収録後に伺ってみたところ、サイトの紹介より、 ブログを書いているひとの考え方やこだわりなどを紹介することの方が、 重要なのだとおっしゃっていました。

たしかに、ラジオで、ブログの URL を言われても面白くないでしょうし、 そもそも覚えられないですよね。ブログにアクセスできなくても、 こんなふうに考えて書いているとか、こんなこだわりがあるんですよということが、 作者の声を通して聞けるのであれば、面白そうです。

ちなみに、今までに紹介されたブログが、以下に掲載されています。
10月3日の「吊革blog」の方は、吊革の持ち方にまでこだわりがあるそうですよ。 その話を伺ったとき、思わず電話口で大笑いしてしまいました。

http://www.j-wave.co.jp/original/musicplus/blog_link/index.htm

言いたいことの半分も言葉にできなかった気がしますが、意外とこだわりを持ち、 考えながら栗の絵を描いているということがわかり、われながらびっくりしました。 (仕事でも取材を受けたことがあるのですが、 驚くほど仕事に対して何も考えておらず、ちゃんと質問に答えられなくて、 散々な結果になりました。あのときは、しばらくヘコんでましたね…。)

次からは、もう少しリラックスして、 面白いことのひとつでも言えるようになれたらなー、なんて思いました。

 

今週も、ここまで読んでいただき、ありがとうございました。
それでは、また来週に、お会いしましょう!

 

「いますぐ実践! 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://www.fumido.co.jp/kuriniki/ (栗日記ぎゃらりー)


[バックナンバーのトップへ] [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

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本