(前ページより続く)

Kondara MNU/Linux 2.1 編に戻る
Vine Linux 2.6 編に戻る


2枚目のNICの設定

Linux のインストールの際に2枚目のネットワークカード(NIC)を挿してあった 場合は、そのNICも自動的に認識されているはずです。 次のようにして、2枚目のNICが eth1 として認識されているかどうかを 調べます。

  # dmesg | grep eth
もし認識されていなかったら、kudzu を起動して認識させます。
  # kudzu
kudzu の中でIPアドレスの設定を行っても良いのですが、 設定をスキップしても構いません。

eth1 が正しく認識されたら、 次に /etc/sysconfig/network-scripts/ifcfg-eth1 を編集して、 アドレスを設定します。 ifcfg-eth1 が存在しない時は ifcfg-eth0 を雛型にします。

  # cd /etc/sysconfig/network-script
  # ls ifcfg-eth*
  ifcfg-eth0
  # cp ifcfg-eth0 ifcfg-eth1
  (ifcfg-eth1 を編集する)
以下は ifcfg-eth1 の内容の例です。
  BROADCAST=172.20.1.63
  NETMASK=255.255.255.192
  DEVICE=eth1
  BOOTPROTO=none
  ONBOOT=yes
  NETWORK=172.20.1.0
  IPADDR=172.20.1.1

ユーザ認証を行なうために、利用者は認証サーバのIPアドレスを知っておく必要があります。 しかし、この例のような 172.20.1.1 では覚えにくいので、 覚え易いアドレスを別名として付けておくと大変便利です。 端末側のインタフェース(複数ある場合はいずれか一つ)に、 例えば 10.0.0.1 というIPアドレスを別名として設定しておきます。

  # cd /etc/sysconfig/network-script
  # cp ifcfg-eth1 ifcfg-eth1:1
  (ifcfg-eth1:1 を編集する)
以下は ifcfg-eth1:1 の内容です。
  BROADCAST=10.0.0.1
  NETMASK=255.255.255.255
  DEVICE=eth1:1
  BOOTPROTO=none
  ONBOOT=yes
  NETWORK=10.0.0.1
  IPADDR=10.0.0.1

最後に、ネットワーク機能を再起動して、eth0 と eth1、および eth1:1 にアドレスが正しく設定されるかどうかを確認します。

  # /etc/rc.d/init.d/network restart
  # ifconfig -a


DHCPサーバの設定

端末に自動的にアドレスを振るために、DHCPサーバの設定を行います。 まず設定ファイル /etc/dhcpd.conf を作成します。 アドレスのリース期間は3分程度と短く設定します。

dhcpd.conf の例 :

  #ddns-update-style none;
  default-lease-time 180; # 3min
  max-lease-time 1800;    # 30min
  option subnet-mask 255.255.255.192;
  option broadcast-address 172.20.1.63;
  option routers 172.20.1.1;
  option domain-name-servers 192.168.1.1;
  option domain-name "XXX.YYY.ZZZ";

  # eth0
  #   Note: Don't forget to pass network devices (eth1, etc) to
  #         /usr/sbin/dhcpd started in /etc/rc.d/init.d/dhcpd .
  # subnet 192.168.1.0 netmask 255.255.255.192 {
  # (nothing)
  #}

  # eth1
  subnet 172.20.1.0 netmask 255.255.255.192 {
  range 172.20.1.2 172.20.1.59;
  }

  # eth2
  #subnet 172.20.1.64 netmask 255.255.255.192 {
  #option routers 172.20.1.65;
  #option broadcast-address 172.20.1.127;
  #range 172.20.1.66 172.20.1.125;
  #}
この例では、DNSサーバのアドレスを 192.168.1.1 、DNSのドメイン名を XXX.YYY.ZZZ と仮定しています。 ( dhcpd がうまく動かない場合は1行目のコメントを外します。)

dhcpd.conf を作成したら、次はDHCPサーバ(dhcpd)のスタートアップ・スクリプト を編集します。 上の設定例では eth0 を定義していないので、dhcpd の起動の際に デバイスを明示する必要があるためです。

変更前の /etc/rc.d/init.d/dhcpd (部分) :

  start() {
          # Start daemons.
          echo -n $"Starting $prog: "
          daemon /usr/sbin/dhcpd ${DHCPDARGS}
変更後の /etc/rc.d/init.d/dhcpd (部分) :
  start() {
          # Start daemons.
          echo -n $"Starting $prog: "
          daemon /usr/sbin/dhcpd ${DHCPDARGS} eth1
(上記は Vine Linux の例です。Kondara では少しだけ違いがあります。)

DHCPサーバを起動します。

  # /etc/rc.d/init.d/dhcpd start
  dhcpdを起動中: [  OK  ]
端末側ネットワークに端末を接続して、DHCPで正しくアドレスが取得できる ことを確認します。 MS-Windows 9x 系ならば winipcfg コマンド、MS-Windows NT4.0/2000 ならば ipconfig コマンドでアドレスを確認できます。

PCのブート時からDHCPサーバが動くように、ntsysv コマンドで dhcpd を有効にします。

  # ntsysv

dhcpd のログは /var/log/messages に書き込まれます。 リースの更新間隔が短いので、 ログファイル (messages) のあふれには注意してください。


ゲートウェイ機能と Netfilter の設定

PCがゲートウェイとして動作するように、IP forwarding の機能を有効にします。 このためには、/etc/sysctl.conf の中で net.ipv4.ip_forward の設定を変更します。

  (変更前)  net.ipv4.ip_forward=0
  (変更後)  net.ipv4.ip_forward=1
これでネットワークの再起動後に IP forwarding が有効になりますが、 再起動せずに有効にしたい場合は以下のようにします。
  # echo 1 > /proc/sys/net/ipv4/ip_forward

端末からバックボーン側にアクセスできることを確認します。 以下は ping でDNSサーバの応答を調べる例です。

  (端末側)
  C:\> ping 192.168.1.1

このままでは認証もなしに端末からバックボーン側に素通りできてしまうので、 Netfilter のデフォルトのポリシーを変更して、 通信をブロックするように設定します。 Netfilter は Linux のカーネルに組み込まれているパケットフィルターの機能です。 Netfilter の設定には iptables (または ipchains) を使います。

  # iptables -P FORWARD DROP
  # iptables -L
  Chain INPUT (policy ACCEPT)
  target     prot opt source               destination         

  Chain FORWARD (policy DROP)
  target     prot opt source               destination         

  Chain OUTPUT (policy ACCEPT)
  target     prot opt source               destination        
iptables -L で ``Chain FORWARD'' のポリシーが上のように ``DROP''になっていることを確認します。 また、端末からバックボーン側にアクセスできない ことを確認します。

システムのブート時から通信をブロックできるように、Netfilter の状態を保存します。

  # /etc/rc.d/init.d/iptables save
  現在のルールを/etc/sysconfig/iptablesに保存中: [  OK  ]


無線LANアクセスポイントの設定

SSID (ESSID)
SSID は、隣接した他のシステムのアクセスポイントと本システムのアクセスポイントを、 端末から区別できるようにするために必要です (SSID はセキュリティ対策ではありません)。 ``ANY'' に設定してはいけません。 正規のユーザが覚えやすい文字列に設定するのが良いでしょう。
SSID (ESSID) ビーコン
通りがかりの他人からのカジュアルな攻撃を少しでも避けるため、 SSID をブロードキャストするビーコンの機能はできるだけ OFF にすることが推奨されています。 しかし、ユーザがあちらこちらのアクセスポイントを渡り歩いて使用するような場合は、 ビーコンを ON にしてあった方が接続がかなり楽になります。 ビーコンを使うか否かは、システムの利用形態によって決めます。
チャネル番号
隣接するアクセスポイントからできるだけ離れたチャネル番号を設定します。 同じシステムの中で複数のアクセスポイントを使用する場合も同様です。 物理的に近い位置にあるアクセスポイントに近いチャネル番号を設定すると、 周波数帯が大きく重なってしまうために、 性能が低下することがあります。
WEP
WEPでは共通鍵が使われるので、共通鍵を入手すれば盗聴が容易になります。 しかし、通りがかりの他人によるカジュアルな盗聴を避けるのにはある程度有効なので、 できるだけWEPは有効にして使います。 データの盗聴があまり問題にならなくて、盗聴よりも速度を優先させたい、 あるいは鍵共有の手間を減らしたいという場合は、WEPをOFFにする運用も考えられます。
MACアドレスフィルタリング
MACアドレスフィルタリングの機能はOFFにします。
IPアドレス
アクセスポイントのIPアドレスは、DHCP などに頼らず、 固定した値に設定しましょう。その方が安全です。
NAT モード
アクセスポイントによっては、NATをサポートしている場合があります。 CATV/xDSLモードなどと呼ばれている場合もあります。 アクセスポイントでアドレスがまとめられてしまっては個々の端末が区別できなくなるので、 NAT の機能はOFFにします。 言い換えれば、アクセスポイントはブリッジとして動作させます。
DHCP サーバ機能
アクセスポイントがDHCPサーバ機能を持っている場合があります。 DHCPサーバは認証ゲートウェイで提供されるので、アクセスポイントの方は 使わないように設定します。


Heartbeat/Watchdog 機能付き OpenSSH のインストール

無線LANやイーサネット・ジャックでは、不意のネットワーク接続の途切れや、 ユーザが正しいログアウト手順を踏まないことへの対策が非常に重要です。 使用中の端末が物理的にネットワークから切り離された後に、 正規のユーザが獲得して開いたままになったチャネルを介して 他人がバックボーン・ネットワークに到達できるようならば、 これは重大なセキュリティホールになるからです。 端末のネットワーク切断を検出できるようにするために、 ここでは Watchdog 機能付きの Secure Shell サーバを使います。

下記サイトから OpenSSH の Portable 版のソースパッケージと、 Heartbeat/Watchdog のパッチをダウンロードしてきます。

アーカイブを展開して、パッチの適用、configure、make を行います。 configure では PAM (Pluggable Authentication Modules) と tcp_wrappers を使うように指定します。 バイナリファイルなどは、Linux の標準の位置 /usr ではなく、 /usr/local の下にインストールするように指示します。
  # gtar zxf openssh-3.5p1.tar.gz
  # gtar zxf openssh-3.5p1-watchdog.patch.tgz
  # cd openssh-3.5p1
  # patch < ../openssh-3.5p1-watchdog.patch
  # ./configure --prefix=/usr/local --with-pam --with-tcp-wrappers
  # make

既存の OpenSSH のパッケージは削除せずに、 先ほどコンパイルした OpenSSH をインストールします。 ホストキーが変わると面倒なので、ホストキーもコピーしておきます。

  # make install
  # cp -p /etc/ssh/ssh_host* /usr/local/etc/
/usr/local/etc/sshd_config を編集して、次の行を追加します。
  PermitRootLogin no
  WatchdogTimeout1 20
  ClientAliveInterval 5
  ClientAliveCountMax 4
また、下記のように sftp-server の行をコメントにして、 sftp-server を無効にします。
  #Subsystem      sftp    /usr/local/libexec/sftp-server
/usr/local/etc/ssh_config を編集して、次の行を追加します。
  Heartbeat 5

古い sshd を止めます。

  # /etc/rc.d/init.d/sshd stop
新しい sshd を起動するために、/etc/rc.d/init.d/sshd の中で変数 SSHD を 変更します。
  (変更前)  SSHD=/usr/sbin/sshd
  (変更後)  SSHD=/usr/local/sbin/sshd
新しい sshd を起動します。
  # /etc/rc.d/init.d/sshd start


Simple Authenticating Gateway for Linux のインストール

認証ゲートウェイを実現するために必要な、 ``Simple Authenticating Gateway for Linux'' を導入します。 ソースパッケージを以下のサイトからダウンロードします。

アーカイブの展開、コンパイル、そしてインストールを行います。

  # gtar zxf authipgate-1.4.tgz
  # cd authipgate-1.4
  # make
  # make install
/usr/local/sbin/aipgd をテキストエディタで編集して、 ファイルの先頭で3つの変数を次のように設定します。
  CLIENTHOSTS="172.20.1.0/26"
  ALIASADDR="10.0.0.1"
  DNSSERVER="192.168.1.1"
(DNSサーバのアドレス 192.168.1.1 は DHCP の設定と合わせておきます。)

必要があれば、 認証ゲートウェイを常に通過させたいホストや、Netfilter にデフォルトで設定しておきたいルールを追加しておきます。 常に通過させておきたいホストやネットワークは、aipgd の先頭で 変数 THROUGHHOSTS に列挙します。デフォルトのルールは、

  #-------------------------------
  # Add your own rules here.
の下に書き加えます。

authipgate を起動します。

  # /etc/rc.d/init.d/aipgctl start
  Starting authipgate daemon:


端末側の設定

このシステムを使うためには、SSH2 protocol または SSH1 protocol に対応した Secure Shell クライアント・プログラムが端末側に必要です。 SSH2 は通常のクライアントが使えます。 SSH1 では heartbeat (または keep-alive null packet) の送出機能を持ったクライアントが必要です。 heartbeat 機能を持つクライアントには、以下のようなものがあります。

ユーザ認証は、いずれかのプログラムを用いて認証サーバにログインすること によって行なわれます。SSH1 protocol で接続する場合は、 heartbeat の送出間隔を5秒程度に設定しておきます。

認証ゲートウェイの上でウェブサーバを立ち上げておき、そこから MindTerm を起動できるようにしておくと、 ユーザが Secure Shell のクライアント・プログラムを持っていなくても ブラウザから容易にログインできるようになるので、大変に便利です。 MindTerm については「サポート用ウェブサーバの設定」 で説明します。


ユーザの作成

認証ゲートウェイを利用するユーザのアカウントを作っておきます。 スーパーユーザ (root) ではリモートログインができない上に、 日常的に root で作業を行うのは大変危険です。 ユーザの作成手順は Linux の通常の操作と変わりありません。 useradd コマンドを用いてローカルにユーザを作成してもよいし、 NIS や LDAP を利用することも考えられます。

一般ユーザの誤操作や故意の破壊工作から認証ゲートウェイを保護するために、 一般ユーザが任意のコマンドを実行できないようにしておくのが安全です。 ユーザのログインシェルとして通常は /bin/bash や /bin/tcsh などが用いられますが、 これらの代わりにダミーのシェルを設定しておくと良いでしょう。 authipgate-1.4以降のパッケージに含まれている Extremely Restricted Shell (exrsh) が利用できます。 ユーザを作成する際に、ログインシェルとして /usr/local/sbin/exrsh を指定するだけです。


動作確認

ここでは Windows 9x系/NT4.0/2000/XP を使った動作確認の手順を紹介します。 Windows 用の Secure Shell クライアントとして PuTTY を使います。

  1. まずPC(端末)を何らかの手段でインターネットに接続して、 PuTTY のウェブサイト から putty.exe (version 0.52 以降) を入手しておきます。
  2. PCを本システムの無線LANアクセスポイントに接続して、 DHCP でIPアドレスが割り当てられることを確認します。 Windows 9x系 ならば winipcfg コマンドで、Windows NT4.0/2000/XP ならば ipconfig コマンドでIPアドレスを調べることができます。
  3. ping や tracert を使って、バックボーン側の計算機に到達できないことを確認します。 例えば DNS サーバ (192.168.1.1) に対して tracert を実行する場合は、
      C:\> tracert -d 192.168.1.1
    
    のようにします。
  4. 先に入手しておいた putty.exe のアイコンをクリックして、PuTTY を起動します。 PuTTY の画面で Connection を選択し、``Seconds between keepalives'' の値を 5 (秒) にします。続いて Session を選択して、
      Host Name : 172.20.1.1      ← 10.0.0.1 でも良い
      Protocol  : SSH
    
    のように入力して、[Open]ボタンを押します。 ターミナルの画面に変わったら、指示に従って ID と パスワードを入力し、 認証ゲートウェイにログインします。
  5. 再び ping や tracert を使って、 今度はバックボーン側の計算機に到達できることを確認します。
      C:\> tracert -d 192.168.1.1
    
  6. PuTTY の画面で exit と入力して、認証ゲートウェイからログアウトします。 ping や tracert を使って、 バックボーン側の計算機に到達できないことを確認します。


続いて、ネットワークの切断が正しく検出されるかどうかを確認します。

  1. PuTTY を用いて認証ゲートウェイにログインし、 バックボーン側の計算機にアクセスできる状態にしておきます。
  2. PC の無線LAN機能を強制的にOFFにするか、PC を電波の到達しない所へ移動します。 この時、PuTTY には触れないようにします。
  3. 認証ゲートウェイ上でログイン中のユーザを監視しておき、 PC からログインしていたユーザが 約20秒後に強制的にログアウトさせられることを確認します。 またこの時、/var/log/messages に
      Warning: Command has been killed due to watchdog timeout.
    
    または
      Disconnecting: Timeout, your session not responding.
    
    というメッセージが記録されているのを確認します。


不要なサービスの停止

セキュリティの向上のために、 認証ゲートウェイの動作に関係の無いサービスは極力止めておくようにします。 ntsysv コマンドを使ってサービスを非動作に設定します (設定後にシステムの再起動が必要)。 OSのインストールの際にほとんどのサービスを止めてあるはずです。

  # ntsysv
webmin は便利ですが、この手のサービスは万一セキュリティホールが見つかると非常に危険なことが多いので、 止めておく方が無難です。

認証ゲートウェイでは、 Secure Shell 以外のログイン手段はセキュリティホールになります。 telnet が使えないようになっていることを、今一度確認しておきます。


サポート用ウェブサーバの設定 (オプション)

認証ゲートウェイの上でウェブサーバを動かしておき、 本システムの使い方などのドキュメントを閲覧できるようにしておくと、 とても便利になります。 利用者は認証ゲートウェイのIPアドレスとSSID (場合によってはWEPの暗号化鍵) を知っているだけでよく、無線LANに接続したらウェブブラウザで

  http://10.0.0.1/
にアクセスすればドキュメントが読めるようになります。

OSには Apache HTTP Server が標準添付になっているので、 下記の手順で設定すれば、ウェブサーバを立ち上げることができます。

  1. 設定ファイル (/etc/httpd/conf/httpd.conf) を適切に編集する。
  2. ウェブサーバで公開するドキュメントを /home/httpd/html に置く。
    (安全のために、.htaccess ファイルなどでアクセス制限をかけておくと良い。)
  3. ntsysv コマンドで httpd のサービスを有効にする。
    リブートせずにすぐに httpd を起動したいなら、次のコマンドを実行する。
      # /etc/rc.d/init.d/httpd start
    
優れたドキュメントが沢山あるので、ここでは Apache の詳しい設定方法については省略します。

Java で動く Secure Shell クライアントとして MindTerm があります。 MindTerm をウェブサーバで提供すれば、利用者は Secure Shell クライアント・プログラムを あらかじめインストールしておく必要がなく、 Java が使えるウェブブラウザさえ持っていれば本システムが利用できるようになります。
(注: MindTerm はここには置かれていません。)


(2002年6月)   大変残念なことに、 最近になって MindTerm のライセンス形態が非常に厳しいものになってしまいました。 現時点では事実上、個人はもちろん、小規模なサイトでも使うのが難しくなっています。 古き良き時代のバージョンでもよければ、 mindterm_2.1-bin.zip が入手できるようです。 (本家のサイトでは抹消されたようです。)

(2002年9月)   いつのまにか MindTerm の non-commercial license が復活していました。 AppGateのウェブサイトダウンロードできます。

(2002年11月)   新バージョン MindTerm 2.3.1 が出ましたが、 無償版では signed applet が提供されなくなったようです。


その他の有用な機能の設定 (オプション)

必須ではありませんが、 認証ゲートウェイで欲しくなるだろうと思われる機能とその設定方法を紹介します。

同時ログイン数の制限
ネットワークの帯域を独り占めするために、 認証ゲートウェイをパンクさせるほど多くのログインを行って、 他の利用者のログインを邪魔するような利用者が居るかもしれません。 このような攻撃をさせないために、1ユーザあたりの同時ログイン数を制限することが考えられます。 例えば、同時ログイン数の上限を2にするには、次のように設定します。

/etc/pam.d/sshd の中に次のような行が含まれていることを確認します。
  session    required     /lib/security/pam_limits.so
/etc/security/limits.conf を編集して、次のような一行を追加します。
  *       -       maxlogins       2


認証ゲートウェイでNATを使う
これまでの説明では、認証ゲートウェイは通常の IP forwarding を行うゲートウェイとして動作し、端末にはバックボーン側からも見える グローバルなIPアドレスが必要でした。

authipgate-1.3 以降では、認証ゲートウェイをNAT箱として設定することもできます。 NAT(厳密にはNAPT)を利用することにより、 端末側のサブネットではプライベートなアドレスが使えるようになり、 サブネット用のグローバルなアドレスを用意する必要が無くなります。 小規模なサイトではNATを使う運用の方が楽でしょう。

NATを使うには、/usr/local/sbin/aipgd をテキストエディタで編集して、
  USE_NAPT="no"
となっている所を
  USE_NAPT="yes"
に書き換えるだけです。

NATを使っている場合、バックボーン側の計算機から見ると、 端末からのアクセスは全て認証ゲートウェイ (ここでは 192.168.1.2) から発せられたようにしか見えません。 従って、外のサイトから寄せられた情報を元に利用者を追跡することは難しくなります。 利用者が不正アクセスを行う危険性が高いサイトでは、 NATを使う運用方法は避けて、 利用者の追跡を容易にしておいた方が良いでしょう。

ファイルハンドルの変更
一台の認証ゲートウェイで大量の接続を扱うようにすると、 ファイルハンドルの不足によって同時ログイン利用者数が制限されてしまうことがあります。 kernel 2.4 ではデフォルトのファイルハンドル数が 8192 になっており、 通常はかなり余裕があります。ファイルハンドル数を変更する必要があるなら、 以下のようにして設定の確認および変更ができます。

  # cat /proc/sys/fs/file-max 
  8192 
  # echo 16384 > /proc/sys/fs/file-max 
  # cat /proc/sys/fs/file-max 
  16384 
echo の行だけを /etc/rc.d/init.d の下のいずれかのファイルに追加しておくと良いでしょう (例えば aipgctl)。

複数の認証ゲートウェイの利用
Secure Shell は、ログイン先の計算機が正規のものかどうかを端末側から確認するための機能を持っています。 このホスト認証の機能によって、偽のサーバに接続させられることを防いでいます。 それぞれのサーバは固有の秘密鍵をホストキーとして持っており、この鍵がホスト認証に用いられます。

複数の認証ゲートウェイを設置して、 同じアドレスでいずれの認証ゲートウェイにもログインできるようにするには、 Secure Shell のホストキーも同一のものを使う必要があります。 さもなければ、最初に端末を接続してキーを受け入れたゲートウェイに対しては正しくホスト認証ができますが、 他のゲートウェイはすべて偽物とみなされてしまいます。

一台の認証ゲートウェイの設定が終わったら、 ファイル /usr/local/etc/ssh_host* を他の認証ゲートウェイにコピーします。 ssh_host_key、ssh_host_dsa_key、ssh_host_rsa_key の3つは秘密鍵なので、 内容を他人に知られてはいけません。これらのファイルのパーミッションが -rw------- になっていることを確認しておきます。 ホストキーをコピーした後で sshd の再起動が必要です。


Kondara MNU/Linux 2.1 編のトップへ
Vine Linux 2.6 編のトップへ
All Rights Reserved, Copyright (C) Hideaki Goto 2002, 2003