次のページ 前のページ 目次へ

3. サーバ

サーバ無しではクライアントは何の役にも立たないので、このセクションでは 最初にやるべきいくつかのことを、サーバ側でいかに設定するか述べることにします。

3.1 セキュリティ − 人々を締め出す

VPN にとってセキュリティは非常に重要です。第一、だからこそ VPN を構築して いるんですよね? サーバを設定するにあたっては、いくつかのことを心に留めておく必要があります。

デーモンを減らせ

このサーバはファイアウォールの両側に置かれ、トラフィックを ネットワークの中へ転送するように設定されているので、可能な限り その箱を安全にするというのは良い考えです。Linux のセキュリティについては Linux Security HOWTO でさらに調べることができます。 [ 訳注:日本語訳は http://www.linux.or.jp/JF/JFdocs/Security-HOWTO.html にあります。] 目的のために、私は sshd と Roxen Web server 以外の全てを kill しました。VPN にアクセスする新しいマシンを設定するため、 2つのファイル(スクリプト、その他)をダウンロードする目的でウェブサーバを利用しています。 FTP サーバは使いません。それは、ウェブサーバ経由で多少のファイルを見える ようにするのに比べ、FTP サーバ経由で同じことを安全にできるように設定するのは 難しいからです。それに、単にファイルをダウンロード できればいいのです。もし本当にゲートウェイで別々のサーバを 走らせたいと思っているのであれば、プライベートネットワークにあるマシン以外、 それらのサーバにアクセスできないよう制限すべきかも知れません。

パスワードを許すな

そう、それは馬鹿げたことに聞こえます。けれども気になるでしょう? パスワードは使わず、それを完全に無効にしてしまうのです。 このマシンの全ての認証は ssh の公開鍵認証システムを通して行われるべきです。 この方法ではキーを持った者だけが入ることができますが、530 文字もの長さのバイナリ のキーを覚えることは、殆ど不可能です。

では、そのためにはどうすれば良いのでしょう?/etc/passwd ファイルを編集 することが必要です。2 番目のフィールドはパスワードハッシュ、あるいは 認証システムに /etc/shadow ファイルを見るよう指示する 'x' のいずれかが 含まれています。しなくてはならないことは、そのフィールドを '*'に書きかえることです。これは認証システムに対して、パスワードは無しで、 何も許されるべきでないということを示します。

典型的な /etc/passwd ファイルの形式を次に示します。

....
nobody:x:65534:100:nobody:/dev/null:
mwilson:x:1000:100:Matthew Wilson,,,:/home/mwilson:/bin/bash
joe:*:504:101:Joe Mode (home),,,:/home/vpn-users:/usr/sbin/pppd
bill:*:504:101:Bill Smith (home),,,:/home/vpn-users:/usr/sbin/pppd
frank:*:504:101:Frank Jones (home),,,:/home/vpn-users:/usr/sbin/pppd
....
私が 2番目のフィールドを編集するだけでなく、もっと手を加えたということを 覚えておいてください。他のフィールドについては後述します。

3.2 ユーザアクセス - みんなを中へ

ユーザアクセスは ssh の認証スキームを通して為されます。上で述べたように、 これが高レベルのセキュリティを維持しつつ、ユーザがシステムにアクセスする 方法です。もし ssh に馴染みがなければ、 http://www.ssh.org/をチェックしてみてください。 私が ssh のバージョン 2 でなくバージョン 1 を使っているということに注意して ください。特に、バージョン 1 はフリーで、2 はそうでないという大きな違いが あります。

sshd を設定する

あなたは sshd を設定する必要があるでしょう。オプションには次のような ものがあります。意図しているのはパスワード認証および rhosts 認証を不可に するということです。/etc/sshd_config ファイルには、次に挙げるような オプションがあります。

PermitRootLogin yes
IgnoreRhosts yes
StrictModes yes
QuietMode no
CheckMail no
IdleTimeout 3d
X11Forwarding no
PrintMotd no
KeepAlive yes
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
UseLogin no

3.3 ユーザを制限する

これで悪い人たちは締め出され、良い人だけがアクセスを許される ようになったので、今度は良い人たちが悪さをしないように 手を打っておくべきかもしれません。 これは彼らに pppd 以外のものを起動させないということで、極めて簡単に実行できます。 これは必要かもしれませんし、必要でないかもしれません。私はユーザを制限 しています。それは、保守しているシステムが VPN 専用であり、ユーザは その上でその他のことをする必要がないためです。

sudo か否か

Unix システムの管理者が、あるユーザが特定のプログラムを root 権限で 実行できるよう許可を与える、 sudo と呼ばれる小さくて素敵なプログラム があります。pppd は root として実行する必要があるので、この場合には必要です。 ユーザにシェルアクセスを 許可しようとする場合には、この方法を使う必要があるでしょう。sudo を どのように設定し、sudo をどのように使うかは sudo のマニュアルページで 調べてください。概して、少数の信頼できるユーザに使われるような 複数利用システムにおいて、sudo を使うことは最善の方法です。

ユーザにシェルアクセスを許可しないことを決めたならば、そこに侵入させずにおく もっとも良い方法は、彼らのシェルを pppd にすることです。これは /etc/passwd ファイルによって実現できます。私が最後の 3 人のユーザにしたことは 上にある記述 で見ることが出来ます。/etc/passwd の 最後のフィールドはユーザのシェルです。pppd を動かすために 特別なことをする必要はありません。それはユーザが接続すると root として 実行されます。これは最も安全であると同時に、為し得るうちの間違いなく 最も単純な設定方法です。それは大規模でまとまったシステムに対しては 理想的です。やるべきことはこのドキュメントの後の方できちんと説明します。 お望みであれば そちらを先に読む こともできます。

3.4 ネットワーキング

これでユーザはシステムにアクセス出来るようになったわけですが、 彼らがネットワークにアクセスできることは確認する必要があります。 私たちは Linux カーネルのファイアウォールのルールとルーティングテーブル によってそれを行います。route および ipfwadm コマンドを 使うと、ネットワークトラフィックを適切な方法で扱うようカーネルを設定 することができます。これ以上の ipfwadm, ipchains それから route についての情報のためには Linux Networking HOWTO を参照してください。

カーネル

このいくつかを動作させるためには、カーネルを正しく設定しなくてはなりません。 もし自分のカーネルをどのように構築すればよいか分からないなら、 Kernel HOWTOを読むべきです。基本ネットワークに加えて、次に示す カーネルオプションがオンになっていることを確認する必要があるでしょう。 私は自分のシステムで 2.0.38 カーネルを使っています。

2.0 カーネルにおいて -

2.2 カーネルにおいて -

フィルタ規則

まず、外側のインターネットへのアクセスを制限しつつ、ユーザが内部ネットワークへ アクセス出来るよう、ファイアウォールのフィルタ規則を記述しましょう。 もしこれが奇妙に聞こえるなら、 それについてはこう考えてみてください - 彼らは既にインターネットに アクセスできる状態にあり、それでなぜ彼らがネットにアクセスする際にトンネルを 使わせるのか。それは帯域幅とプロセッサの無駄遣いです。

適用されるフィルタ規則は利用する内部ネットワークに依存しています。 しかし実際、ユーザは言います - "VPN の外側から、内部ネットに 向かって来ているトラフィックを許可しなさい"。ではどうしたら良いのでしょうか? いつものように、それは場合によるのです。もし 2.0 カーネルを 動かしているならば、ipfwadm と呼ばれるツールを使います。 一方、もし 2.2 カーネルを動かしているのなら、ipchains と 呼ばれるユーティリティを使います。

ipfwadm で規則を設定するためには、次に示すようなオプションで それを実行してください。

# /sbin/ipfwadm -F -f
# /sbin/ipfwadm -F -p deny
# /sbin/ipfwadm -F -a accept -S 192.168.13.0/24 -D 172.16.0.0/12

ipchains で規則を設定するためには、次に示すようなオプションで それを実行してください。

# /sbin/ipchains -F forward
# /sbin/ipchains -P forward DENY
# /sbin/ipchains -A forward -j ACCEPT -s 192.168.13.0/24 -d 172.16.0.0/12

2.2 カーネルを使っている人は ここを 読んでください。

ルーティング

ユーザはネットへのアクセスを許されますので、今度は カーネルに、パケットを送る場所を指示しなければなりません。 システムにおいて、私は 2 つのイーサネットカードを持っています。 一方は外部ネットワークに対するもの、もう一方は内部ネットワークに 対するものです。このことは、外に向かうトラフィックはゲートウェイで マスカレードされ、中に入ってくる全てのトラフィックは Cisco で 取り除かれ 経路を定められるので、安全性を保つのに役立ちます。 大部分の設定において、経路設定はシンプルであるべきです。

これからやるのは、内部インターフェースから出てプライベートネットワークに 向かって来る全てのトラフィック、それから外部インターフェースから出る その他 全てのトラフィックの経路を設定するということです。 特定の経路設定コマンドは利用している内部ネットに依存しています。 以下はそれがどのようなものであるかの一つの例です。これらの行は もちろん、ローカルネットの基本経路に付け加えられます。 それに、あなたは 内部番号の 3 グループ全てを使っているわけではないでしょう。

172.16.254.254 が内部ゲートウェイであるとすると - 

# /sbin/route add -net 10.0.0.0 netmask 255.0.0.0 gw 172.16.254.254 dev eth1
# /sbin/route add -net 172.16.0.0 netmask 255.240.0.0 gw 172.16.254.254 dev eth1
# /sbin/route add -net 192.168.0.0 netmask 255.255.0.0 gw 172.16.254.254 dev eth1

経路の設定における付加的な注意です。 もし、例えば離れた所にあるオフィスなど双方向の経路設定を使っている のなら、もう一つしなくてはならないことがあります。 サーバにおいて、クライアントへ戻る経路を設定する必要があります。 これをやり遂げる最も簡単な方法は、静かに戻りの経路を設定するような cron ジョブを 1 分毎に実行することです。クライアントが接続していなくても たいした問題ではなく、route はエラー(あなたが都合のいいように /dev/null に送った)を吐くだけです。


次のページ 前のページ 目次へ