4. 安全な接続をする

このセクションでは、これまでインターネットに常時接続していなかった方、セキュリ ティについて基本的な考え方をあまり理解していない方を対象に、セキュリティに 関連した項目を説明するつもりです。簡単に言うと概略を眺めていきます。すべてに ついて完璧な説明をするつもりはありません! 間違った方向に進まないよう、きっかけを与えるのに充分な程度です。詳細はリンク集にあるサイトを見てください。同様にディストリ ビューション付属の資料にも充分な情報が必ずあります。

4.1. セキュリティ・クイック・スタート

常時接続をしはじめる前に、まず安全に接続をする必要性をみくびらないことです。 あなたは、帯域と Unix ライクな OS という 2 つのもの、つまりいたずらを 仕掛けたり、クラックしたりする人間が物色している格好の対象を所有している のですから。すぐにでも魅力的な餌食になってしまうのです。誰かがノックする 前に、備えをしておきましょう。たぶん時間はそんなにかかりません。それでは 早速はじめましょう。

4.2. どのポートをどうする?

ipfwadmipchains を使ったファイアー ウォールの設定については、参考資料がたくさんあります。しかしどのポートを 本当に開ける必要があるのかを説明しているものを見つける のは至難の技です。 この質問にしっかり答えられないなら、答えは"できるだけ"開けない ように! です。基本原則その 1 は、閉まっているポートを経由してコンピュータを おかしくすることはできない、です。そのポートで何も待ち受けていないなら、その ポートは閉まっています。つまりサービスやデーモンが動いていなければ、その ポートは閉まっていて、アクセスは不可能なのです。

Linux では、131,072 個のポート(TCP と UDP)が利用できます。またこれらのポート はいくつかのカテゴリに分類できます。1 つは非常になじみのある"特権 "ポートと言われている、1024 より小さいポートです。ここでは 公開サービスが動いています。25 番は SMTP で 80 番は HTTP、53 番は named 等 がそれに該当します。Linux ではこれらのポートが攻撃されやすいサービスと なっています。 このポートは外部からの接続を受け付けるサービスを提供しています。 telnetd デーモンを動かしているなら、23 番ポートで接続を " listen" しています(実際は inetd が起動させます。 inetd が監視しています)。

しかし telnet クライアントを使ってどこかの telnet サーバにアクセスしたいなら、telnetd デーモンを自分の システムで起動する必要はありません。ただ telnet(telnetd とは別物)という名のクライアント・プログラムを起動するだけです。このことは、 ftp、その他のサービスにも当てはまります。これらのデーモンは、外部のシステム から自分のシステムに接続する場合にだけ必要となります。

公開サービスをするもっともな理由や何をしているかを知っているのでなければ、 そのような公開接続サービスは動かすべきではありません。実際、1024 番より小さい TCP と UDP のポートすべてを閉じたとしても、おそらくかなり快適に過ごすことが できると思います。また外部へ接続しても、少なくとも存在を検知されることはあり ません(つまり、ファイアーウォールでブロックしている)。いくつかの例外はあり ます。

identd(113 番ポート)は比較的安全で、場合によっては そのままでも充分です。電子メールや IRC サーバは identd がないとうまく行きません。これは "1024 より小さいポート は開けるな"という経験則に対する例外の 1 つです。新しいバージョン ではかなり安全になっています。

電子メールになるともう少しややっこしくなります。自分自身でメール・サーバを ホスティングしていると、直接やってくるメールの接続を受け付けてしまうから です。それは、SMTP(25 番ポート)サーバを公開していることになるからです。 ISP から POP3 を使ってメールを持ってきているなら、このポートを世界に向けて 開けておく必要はありません。そのようなメールは 25 番ポートを経由してやって くることはありません。もっと大きく、ランダムに割り当てられたポートを使って 持ってきます。

しかし。sendmail や qmail、postfix のようにローカルにメールを配送するメール ・デーモンを持っていると何かと便利でしょう。確かにデフォルトでは起動するよう に設定してあります。外部からの SMTP(25 番ポート)をファイアーウォールで 開けることで利用する上での障害を避けることは可能です。また別の方法を使って ローカルなメールを仕分けして配送することもできます。fetchmail と procmail を組み合わせるのも方法の 1 つです。fetchmail -m /usr/bin/procmail -d hal でこれが実現でき、sendmail や 他のメール・デーモンを デーモン・モードで使う必要がなくなります。これらのプログラムでデーモン・ モードにすることなくメールを送ることも可能です。

BINDの古いバージョンでは、UDP の 53 番ポートを 開ける必要があります(TCP はゾーン情報の伝送に使用)。BIND は、ネーム・サーバ (キャッシュ・ネーム・サーバ)を動かす場合にのみに使用します。これに対する 解決手段は、新しいバージョンにアップグレードして、デフォルトで特権ポート を使用しないようにすることです。

Web サーバを立てたくて、それを起動しても恐らく安全です。攻撃に対する弱点 のほとんどは、CGI を通じてのものです。Web サーバのパッケージをアップデート し続けるようにしてください。

さあ、もう充分に例外はあげました。ポート自体を落とすか、ファイアーウォールで 1024 番以下のポート以外を落としてください。

1023 番以上のポートは、"非特権"ポートと呼ばれています。 主にこれらのポートは、どこかのサーバに接続しに行った後にそれに対する 応答として使用します。 たとえば、どこかに telnet したとすると 23 番ポートに接続します。それに 応えるデータは、ランダムに割り当てられた 1024 以上のポートを使って返って きます。これはたいていは安全で、普通はそのままにしておくべきでしょう。 唯一の例外は、それらのポートで実際にサービスを行っている場合です。たとえば X Window は 6000 から 6900 番ポートで動いています。フォント・サーバを動か しているなら、おそらく 7100 番ポートを使っているでしょう。これら非特権 ポートをサーバで動かすなら、ファイアーウォールでフィルタすべきです。

4.3. inetd

では、さっと inetd を見ていくことにしましょう。いろいろな サービスを起動していますから。inetd"スーパー "デーモンです。どうしてこう呼ばれるかというと、他のデーモンが起動する のを制御しているためです。telnet や ftp、rsh、identd、pop3 といったサーバ・ デーモンのいくつかは、inetd が制御しています。 psnetstat を使っても telnetd が動いていないかもしれませんが、それは inetdtelnetd を起動するように設定していないか、誰もその時 には実際に接続していないためです。したがって外部からこれらのどのサーバが アクセス可能かどうかをはっきりとは確認できないでしょう。inetd が起動するこれらのサービスは、/etc/inetd.conf という設定ファイルで制御しています。お気に入りのテキスト・エディタでこの ファイルを開いてみてください。"#" 文字がサービスの前にあれば、 そのサービスは動きません。少し抜粋してみます。

 
 #ftp    stream tcp nowait root /usr/sbin/tcpd in.wuftpd -l -a -L -i -o
 #telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
 #
 # Shell, login, exec, comsat and talk are BSD protocols.
 #
 #shell stream  tcp   nowait  root   /usr/sbin/tcpd  in.rshd
 #login stream  tcp   nowait  root   /usr/sbin/tcpd  in.rlogind
 #exec  stream  tcp   nowait  root   /usr/sbin/tcpd  in.rexecd
 #comsat dgram  udp   wait    root   /usr/sbin/tcpd  in.comsat
 #talk   dgram  udp   wait    root   /usr/sbin/tcpd  in.talkd
 #ntalk  dgram  udp   wait    root   /usr/sbin/tcpd  in.ntalkd

<snip>
 
 auth   stream  tcp   nowait  nobody /usr/sbin/in.identd in.identd -l -e -o

   

こうすれば動かなくなります。identd はこのファイルを読んで から起動しますので、安全にしておくならコメントを外さないままにしていおいて ください。最初期化したいなら、下記のコマンドを実行してください。


 # kill -HUP `pidof inetd`

"バック・クォーテーション"であることに注意してください。さらに inetd をチューニングしたいなら "tcp_wrappers" 経由にしてください。 hosts_access と tcpd の man を見てください。

xinetd は同じようなデーモンで、inetd のかわりとして使えます。ほとんど同じものなので、同じ原則を当てはめることが できます。しかし、設定は若干異なっています。サービスそれぞれの設定は、共通 の設定ファイル(通常は /etc/xinetd.conf)とそのサブ ディレクトリで行います(通常は /xinetd.d/*)。

 
 # description: The telnet server serves telnet sessions; it uses 
 # unencrypted username/password pairs for authentication.

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

   

サービスを切るには、"disable" という項目を "yes" とし、xinetd を再起動してください。