このセクションでは、これまでインターネットに常時接続していなかった方、セキュリ ティについて基本的な考え方をあまり理解していない方を対象に、セキュリティに 関連した項目を説明するつもりです。簡単に言うと概略を眺めていきます。すべてに ついて完璧な説明をするつもりはありません! 間違った方向に進まないよう、きっかけを与えるのに充分な程度です。詳細はリンク集にあるサイトを見てください。同様にディストリ ビューション付属の資料にも充分な情報が必ずあります。
常時接続をしはじめる前に、まず安全に接続をする必要性をみくびらないことです。 あなたは、帯域と Unix ライクな OS という 2 つのもの、つまりいたずらを 仕掛けたり、クラックしたりする人間が物色している格好の対象を所有している のですから。すぐにでも魅力的な餌食になってしまうのです。誰かがノックする 前に、備えをしておきましょう。たぶん時間はそんなにかかりません。それでは 早速はじめましょう。
デーモンやサービスの中で、明らかに不必要かつ外部からアクセスが可能 となるものは起動しないでください。クローズしているポートを通じては 何も仕掛けられません。ps や netstat を使って、どんなサービスが動いているかを見てください(詳細は man を見てください)。named や sendmail 、telnet、ftpを動かし て誰からもアクセスできる必要がありますか? はっきりしないなら起動する べきではありません。次に必要なステップは、それらが次のブート時に再び 起動しないことを確認することです。この点についてはディストリビューション 付属のマニュアルを見てください。
ディストリビューションの多くは、お馴染みのサービスをデフォルトで起動 します。あえて何もしなくてもこれらのサービスが起動するかもしれ ません。実際起動していることすら気がつかないかもしれません。しかし何が 動いていて、どのように安全にするのかは、あなたの責任なのです。 ディストリビューションの"デフォルト"の設定に頼らず、 自分自身の安全のために設定してください。
サービスのいくつかを必須のものであると決めたなら、必ず最新版を動かして ください。問題を発見したならすぐに修正して、不意打ちを食らわないように してください。常時接続していればアップデートはとても簡単で、アップデートは 非常に大切です。ディストリビューションで新しいパッケージが利用可能かどうか をチェックして、追随してください。セキュリティ関連のメーリングリストがある なら参加してください。
ファイアーウォールを設置してアクセスを制限し、ログを取るようにして ください。利用しているカーネルのバージョンによって使うものが異なります。 2.0 は ipfwadmで 2.2 は ipchains、 2.4 は iptablesです。詳細は HOWTO を見てください。
Firewall HOWTO 【訳註:日本語訳は、 JF にあります】
Security HOWTO 【訳註:日本語訳は、 JF にあります】
IPCHAINS HOWTO 【訳註:日本語訳は、 JF にあります】
IP Masquerade HOWTO 【訳註:日本語訳は、 JF にあります】
これ以外の参考文献は リンク集・セクション にあります。
パスワードは慎重に、辞書にない"単語"を使ってください。 シャドウ・パスワード(これは新しいディストリビューションでは標準機能に なっているはずです)を使ってください。リモートから root でログインする のは禁止してください。詳細な内容とヒントは Security HOWTO を見てください。
telnet のかわりに ssh か OpenSSH を使ってください。
ipfwadm や ipchains を使ったファイアー ウォールの設定については、参考資料がたくさんあります。しかしどのポートを 本当に開ける必要があるのかを説明しているものを見つける のは至難の技です。 この質問にしっかり答えられないなら、答えは"できるだけ"開けない ように! です。基本原則その 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 番ポートを使っているでしょう。これら非特権 ポートをサーバで動かすなら、ファイアーウォールでフィルタすべきです。
では、さっと inetd を見ていくことにしましょう。いろいろな サービスを起動していますから。inetd は"スーパー "デーモンです。どうしてこう呼ばれるかというと、他のデーモンが起動する のを制御しているためです。telnet や ftp、rsh、identd、pop3 といったサーバ・ デーモンのいくつかは、inetd が制御しています。 ps や netstat を使っても telnetd が動いていないかもしれませんが、それは inetd が telnetd を起動するように設定していないか、誰もその時 には実際に接続していないためです。したがって外部からこれらのどのサーバが アクセス可能かどうかをはっきりとは確認できないでしょう。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 を再起動してください。