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

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


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

こんばんは,うすだです.

今,『成功読書術』という本を読んでいます.
http://www.amazon.co.jp/exec/obidos/ASIN/4777101193/usupiorg-22

アマゾンの元バイヤーである土井さんが,古典ともいえる書籍30冊を, 簡潔に紹介されています.土井さんの鋭い考え方や視点が含まれていて, 単なる本の紹介になってないところが,面白いです.

さて,その序章に,良い本を選ぶためのポイントがいくつか書かれているのですが, その中の1つに,ぐっと来ました.

  詳細なエピソードがあるかどうかを見極める

やっぱり,ぱっと思いついたことではなく,実際に経験して, それなりに役に立ったことを, ご紹介していかないといけないなあ…と思いました.
でも,そのためには,日々勉強して,実際に試す,というのを, 常に繰り返さないといけないわけですね.が,がんばります….

しかし,こういう本を読むと,読みたい本がどんどん増えていきますね.
読み返さない本は,古本屋やマーケットプレイスに出して減らしていかないと, 本棚がえらいことになってしまいそうです.
…いや,もうすでにぼとぼととあふれて,えらいことになっていました.

それでは,今日も,はりきってまいりましょう!

今週のお題 - tcp_wrapper でログをとる

今週は,長年温存していたネタである,tcp_wrapper をご紹介します.

tcp_wrapper は,TCP または UDP の接続を,監視・制限するためのものです.
もともとは,inetd 経由で起動されるデーモンを対象としていたように思いますが, 最近(でもないかも)では,sshd や sendmail など, inetd に依存せずに動作するデーモンも,ぞくぞくと対応しているようです.
(知らずに厳しく制限して,ssh で遠隔ログインできなくなってしまった! …なんてことが,昔あったような気がします.)

制限に関しては,すでにパケットフィルタリングがあるから, tcp_wrapper を使用する意味がないのではないか,と思われるかもしれません.
ですが,tcp_wrapper では,ドメイン名を用いた柔軟な設定を行うことができますし, アクセスがあった時にさまざまなアクションを起こすことができます. また,多層防御という点でも,ある程度有効ではないかと思います. ですので,導入する意味は,それなりに十分あると思います.

さて,今週は,アクセスされたことを,ログに記録してみたいと思います.
アクセス制限の設定方法については,来週ご紹介します.

まず,inetd あるいは xinetd 経由で起動されるデーモンを, tcp_wrapper 対応にします.ここでは,telnet を対象としてみます.
xinetd の場合,/etc/xinetd.d/telnet を,以下のようにします.

  service telnet
  {
      disable = no
      flags           = REUSE NAMEINARGS
      socket_type     = stream
      wait            = no
      user            = root
      server          = /usr/sbin/tcpd
      server_flags    = /usr/sbin/in.telnetd
      log_on_failure += USERID
  }

変更点は,以下の通りです.
(telnet 以外で試す時は,以下を参考にしてください.)

  • flags に NAMEINARGS を追加します.
  • server を /usr/sbin/tcpd に変更します.
  • server_flags を追加します.
    値は,変更前に server に指定していた内容そのままです.

inetd の場合は,/etc/inetd.conf の telnet の行を,以下のように変更します.

  telnet stream  tcp  nowait  root  /usr/sbin/tcpd  in.telnetd

ちなみに,Vine や Debian では,最初から,このようになっていました.
*BSD の方は,変更が必要だと思います.

xinetd は設定ファイルを変更するだけですが,inetd の場合, inetd.conf を変更したら,以下を『必ず』行ってください.

  # kill -HUP `cat /var/run/inetd.pid`

次に,どのような監視や制限を行うのか,ということを指定します.
そのためのファイルが,/etc/hosts.allow と /etc/hosts.deny です.
前者が,アクセスの許可の指定に,後者が拒否の指定に,使われます.
いずれも,先頭から1行ずつ参照し,一致した行の設定に従います.
いずれにも一致しない場合は,許可されます.

今回は,ログに記録するだけですので,/etc/hosts.allow に仕込んでみることにします.

設定自体は,どちらのファイルも同じで,以下のような書式を用います.

  デーモン : クライアント : アクション

デーモンには,実際に起動されるデーモンのプロセス名を指定します.
例えば,telnet の場合は,in.telnetd です.
, で区切って,複数のデーモンを指定することもできます.
また,ALL と指定すると,すべてを対象にします.

クライアントには,許可(あるいは拒否)するクライアントを指定します.
これについては,来週ご紹介します.

アクションには,シェルのコマンドを指定します.省略可能です.

ではでは,/etc/hosts.allow の例を,以下に示します.

  in.telnetd : ALL : spawn (/usr/bin/logger -i -p auth.info \
      %d\: connected from %h) &

telnet に対して,(ALL なので)すべてのクライアントを許可しています.
…なんじゃそりゃ,意味ないじゃん,と思われるかもしれませんが, ここで大事なのは,アクションの部分です.telnet に対してアクセスがあると, logger コマンドを用いて,syslog にログを書き込んでくれます.

おっと,ここで,logger の引数がちょっと気になりますね.
\: としているのは,そもそも : が区切りを示す特別の意味を持っているため, 単なる文字として解釈してもらうよう,\ を付加しています.
また,%d と %h というものがありますが,実際に起動される時に,それぞれ, デーモンのプロセス名,クライアントのホスト名かIPアドレスに, 置き換わります.
他にもいろいろ指定できます.詳しくは,オンラインマニュアルを,ご覧ください. (man 5 hosts_access を実行してください.)

せっかくですので,実際に,試してみましょう.
別のマシンから,telnet コマンドでアクセスしてみます.

  client% telnet server
  Trying 192.168.1.1...
  Connected to server.
  Escape character is '^]'.
  ...後略

/var/log/messages を見ると,以下のように記録されています.
(Debian だと /var/log/syslog ですね.)

  # grep logger /var/log/messages
  ...前略
  May 29 10:10:42 server logger[8013]: in.telnetd: connected from \
  192.168.1.252

これで,192.168.1.252 というマシンから,telnet にアクセスされたということが, ログに残るようになりました.

syslog に対応していないデーモンには,有効な手段だと思います.
他にも,アクションの部分を,メールの送信にするなど, いろいろ応用ができるのではないかと思います.

ちなみに,xinetd は,tcp_wrapper を使わなくても, アクセス制限もログの記録も行うことができます.
余力のある方は,調べて,試してみてください.

宿題の答え

先週の問題は,

  メールで通知しつつ,ログも残してくれる,CustomLog 用のプログラム
  を作ってください

でした.
プログラムを作ってください,などと言ってしまいましたが,実は, 作らなくても,CustomLog を2つ設定すれば,あっさり解決します.
その方法は,httpd.conf に,以下を記述するだけです.

  CustomLog /var/log/httpd/ssh_log combined env=ssh_log
  CustomLog "|/usr/local/sbin/sshnotice.pl" combined env=ssh_log

/var/log/httpd/ssh_log にログが記録されつつ, 先週のプログラムである sshnotice.pl 経由でメールの通知も行われます.

今週の宿題

今週の宿題は,こちらです.

  telnet に対してアクセスがあった時に,メールで root に通知する設定
  を,/etc/hosts.allow に行ってください

またメールで通知かよ,と思われたのなら,ごめんなさい….
でも,これが,いちばん便利なんですよね.

あとがき

ご紹介した『成功読書術』の土井さんは,メルマガも出されています.

ビジネス・ブック・マラソン
http://www.mag2.com/m/0000135008.htm

毎日,1冊の本を,紹介されています.
しかし,毎日毎日,本を何冊も読むって,仕事とはいえ,すごいですね.
(同じ人間とは思えません….)

実は,去年,土井さんの講演を拝見する機会がありました.
最初,すごく頭が切れるひとだなあ,と思いましたが, すごく熱く語られているのを見て,本に対する愛情というか情熱を, ひしひしと感じました.

今週は前ふりが長かったので,あとがきはこのくらいでおわりにします.

しつこいようですが,システム管理に関するネタや悩み,疑問などがありましたら, 遠慮なくメールでご連絡ください.
内容がなんであれ,作者が感激します.返事はかならずしますよー.

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

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

バックナンバーは,こちらにまとめてあります.
http://www.usupi.org/sysad/backno.html

「栗日記」もやってます.
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)

クリエーターズマーケットに出店します.6/19 のみ.どうしよう…
http://www.creatorsmarket.com/


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

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本