Opengate管理メモ

はじめに

これはOpengateの運用管理のために概要を記述したものです。インストールは「インストールメモ」を見て下さい。

概要

Opengateは、Webアクセスのパケットを捕らえて認証を要求し、その端末のIPアドレスに対するファイアウォールを開きま す。その後、端末にAjaxスクリプトの監視プログラムを送り込み、TCP接続を維持します。TCP接続が切れれば、ファイアウォー ルを閉じます。認証時に送ったCookieが有効であれば再認証時にはパスワードが不要です。詳細なフローは、このサイトの「システ ムフロー」のページを見て下さい。

制限

OpengateはWebブラウザによる認証を基本としており、Webブラウザの無い端末 では使えません。

Ajaxが有効な場合は、認証時に送付したスクリプトが動いている間だけネットワークを開放します。よってそのページを閉じないよう にする必要があります。Ajaxが無効な場合は、指定時間が経過したか、もしくはMACアドレスが変更されたり無通信状態が続くと ネットワークを閉鎖します。閉鎖後に再びWebアクセスした場合、HTTP Cookieが確認できればパスワード入力無しでネットワークを開放します。

Web以外のネットワークサービスの制御にも使えますが、最初にWebブラウザで認証を行う必要があります。認証したページを保持し たまま、別アプリケーションでネットワークを利用する形態が基本となりますので、Webブラウザとマルチプロセスの環境が望ましいで す。

ファイル

Opengateは以下のファイルを使用します。詳細は各ファイルを参照下さい。

/usr/local/www/data/index.html.var =ブラウザの要求言語に対応した送付ページの振り分け
/usr/local/www/data/opengate/* =Webコンテンツ、en/*は英語用、ja/*は日本語用
/usr/local/www/cgi-bin/opengate/* =CGIプログラム
/etc/opengate/opengatesrv.conf =設定ファイル
/etc/opengate/rc.firewall =ipfwのスクリプト
/var/log/opengate.log =syslog記録
/tmp/opengate.db =sqliteデータベース(インストール途中で/home/sqlite等に設定変更)
/tmp/opengate.lock =排他制御用(削除可能)

この文書で記述されているパラメータは標準値であり、opengatesrv.confで修正できます。

プロセス

OpengateはCGIとして起動し、端末毎に一つのプロセスが対応します。常駐サーバの起動は必要ありません。「ps ux」コマンドに際してOpengateプロセスの表示には、対応するユーザ名やIPアドレス等の情報が付加されます。不要なプロセスはKILLして結構 です。

ファイアウォール

Opengateは、ファイアウォールipfwを制御して、ネットワークの開放と閉鎖を行います。認証が通ると端末IPアドレスに対 応する通過ルールをipfwに追加し、利用終了時点でルールを削除します。追加ルールは番号10000~40000を使います。よっ て、このルールに優先する標準ルールは、より小さい番号を使って記述して下さい。例えば、特定のサーバへのアクセスは認証無しで許可 する場合などがあります。また非優先のルールは、より大きい番号を使って記述下さい。

Opengateが追加する許可ルールは、端末のIPアドレス(例:10.10.10.250 )に関連するパケットに、タグ番号(例:123)を付けるものです。

10000 count tag 123 ip from 10.10.10.250 to any
10000 count tag 123 ip from any to 10.10.10.250

そのタグ番号に対応するルールは、ルールの最下段に最初から記述しています。

 60000 allow ip from any to any tagged 123

これによって、該当端末に関連する全てのパケットが通過できるようになります。標準では全てのパケットを許可としていますが、ルール 番号60000付近を修正して、アクセス制限付きルールとすることも可能です。

タグ番号はOpengateの設定ファイルで指定します。ユーザグループ毎に別のタグ番号を指定して、別の利用制限を設けることも可 能です。詳しくは下の「ユーザグループ毎の設定」を参照下さい。

認証

Opengateは以下の認証方式に対応しています。また下に示すように、複数の認証サーバを順次参照するようにも設定したり、ユー ザグループ毎に別々の認証サーバに設定したりできます。

POP3 =POP3サーバにUserIDとPasswordを送りログインできれば認証
FTP =FTPサーバにUserIDとPasswordを送りログインできれば認証
RADIUS =RADIUSサーバに問い合わせることで認証
LDAP =LDAPサーバに問い合わせることで認証
PAM =PAMモジュールで認証


ログとDB

Opengateはsyslogを使ってログイン・ログアウトを記録します。syslog設定によって、出力をファイル保存やネット ワーク経由の転送、コンソール画面等にできます。詳細はsyslogのマニュアルを参照下さい。Opengateはsyslogの facilityとして、local1を使います(Opengate設定ファイルで変更可)。またHTTP-Cookieとユーザ情 報の対応関係を保持するためにSQLiteデータベースを用います。ここにも利用ログが残されます。

SQLiteデータベースおよびsyslogファイルのデータ量は、時間とともに増加しますので、ほおっておくとディスクが溢れま す。cron等で定期的に整理する方策を準備下さい。SQLiteファイルは単に削除しても良いですが、古いログを消すスクリプトを インストールメモの中で説明しています。

SQLiteデータベースには、以下のテーブルとインデックスが定義さ れています。

CREATE TABLE IF NOT EXISTS \
 session (cookie TEXT PRIMARY KEY,\
 userid TEXT, pid INTEGER, openTime TEXT, closeTime TEXT,\
 clientAddr4 TEXT, clientAddr6 TEXT, macAddr TEXT,\
 ruleNumber4 INTEGER, ruleNumber6 INTEGER,duration INTEGER,\
 durationEntered INTEGER, cookieAuth INTEGER, language TEXT, watchMode TEXT);

CREATE INDEX IF NOT EXISTS \
 clientAddr4Index ON session (clientAddr4);

CREATE INDEX IF NOT EXISTS \
 closeTimeIndex ON session (closeTime);

フィールド名
解説
cookie
セッション管理のためのHTTPクッキー、プライマリキー (eg: '1234567890abcdef.....')
userid
ユーザID(eg: 'watanaby@guest')
pid
監視プロセスのプロセスID(eg: 1234)
openTime
ネットワーク開放の日時(eg: '2012-01-02 12:34:56')
closeTime
ネットワーク閉鎖の日時(eg: '2012-01-02 14::56:01'、閉鎖前は'-')
clientAddr4
クライアントのIPv4アドレス(eg: '192.168.0.100')
clientAddr6
クライアントのIPv6アドレス(eg: '2001::1:2'、最初に取得されたもの)
macAddr
クライアントのMACアドレス(eg: '00:11:22:33:44:55')
ruleNumber4
IPv4を制御するIPFWルール番号(eg: 10000)
ruleNumber6
IPv6を制御するIPFWルール番号(eg: 10000)
duration
時間監視モード時の制限時間(秒)(eg: 300)
durationEntered
ユーザが入力した時間監視モード時の制限時間(秒)(未入力時 は0) (eg: 0)
cookieAuth
クッキーで認証したセッションか否か(1=auth by cookie,0=auth by password or other) (eg: 0)
language
ホームページ記述言語(ja、enなど)(eg: 'ja')
watchMode
監視モード(HTTP、TIME、NONE)(eg: 'HTTP')


設定ファイル

Opengateの各種設定は、/etc/opengate/opengatesrv.confにXML形式で記述します。XMLタグ記述に は必要外のスペースを入れないで下さい。

ファイル先頭にあるOpengateのサーバ名と認証方式は、ローカル環境に合わせて変更する必要があります。他の設定は必要に応じて変更し て下さい。サーバ名にはIPアドレスを指定することもできます。

 <OpengateServerName>opengate.og.saga-u.ac.jp</OpengateServerName>

 <AuthServer>
    <Protocol>pop3s</Protocol>
    <Address>192.168.0.2</Address>
 </AuthServer>

複数認証サーバの設定

認証サーバには以下のように複数を設定できます。この例では、最初のサーバ(192.168.0.1:pop3s)に問い合わせます。応答が 10秒だけ遅延するかまたは拒否応答の場合に次のサーバ(192.168.0.2:ftp)を参照します。一つのサーバから許可応答が得られ たら、ユーザは認証されます。

  <AuthServer>
     <Address>192.168.0.1</Address>
     <Protocol>pop3s</Protocol>
     <Timeout>10</Timeout>
  </AuthServer>
  <AuthServer>
     <Address>192.168.0.2</Address>
     <Protocol>ftp</Protocol>
     <Timeout>10</Timeout>
  </AuthServer>

ユーザグループ毎の設定

ユーザグループ毎に個別の設定をしたい場合は、設定ファイル内で<ExtraSet>タグを使って記述して下さい。例えば、以下 の記述はユーザIDの欄に@guestを付加したユーザ(例えば、foobar@guest) に対して、認証サーバとipfwのタグ番号を変更します。

<ExtraSet ExtraId="guest">
    <AuthServer>
         <Address>192.168.0.1</Address>
         <Protocol>ftp</Protocol>
    </AuthServer>
    <IpfwTagNumber>999</IpfwTagNumber>
</ExtraSet>

また以下の例では、@マーク以下の記述がなく(default)、ユーザIDのパタンがuser1またはuser2に一致するものを選択しま す。パタンは、「POSIX Extended Regular Expression」によります。ここでは、特定ユーザがログインしたときのsyslog出力先を変えています。コンソール表示やメール送信に使えるで しょう。なお入れ子タグ内の必須記述は省略できません。

<ExtraSet ExtraId="default" UserIdPattern="^user1$|^user2$"> 
    <Syslog>
        <Enable>1</Enable>
        <Facility>local2</Facility>
    </Syslog>
</ExtraSet>

<ExtraSet>で変更の必要がないタグは記述を省略できます。ただし、記述したタグの入れ子タグは記述して下さ い。例えば<Syslog>タグを記述するなら、その中の<Enable>タグ等も省略せずに記述します。


ページデザイン

Webペー ジの記述は、環境に合わせて変更することができます。HTMLドキュメントディレクトリ中の該当HTMLファイルを修正して 下さい。

HTMLファイル中の%%XXX%%の記述は、CGIにおいて適切な値に置き換えられる変数です。消したり変更したりしない で下さい。また、httpkeep.html内のURLには相対パスは使えません。フルパスで指定することが必要です。

言語として英語と日本語に対応しています。それ以外の言語に対応するときは、記述を参考にして、 index.html.varに言語を追加して、対応するコンテンツを準備下さい。また、設定ファイルに言語を追加下さい。 具体的には このサイトの「Recent QA」ページに記述しています。

障害対応

障害時には、まず原因を切り分けて下さい。関連サービスの不調による場合があります。以下のようなサービスがきちんと動いているかを 個別に確認下さい。また各サービスのログファイルを確認下さい。認証サーバの問題を切り分けることは面倒ですが、Opengate設 定ファイルで、一時的に簡易な方式に変えてみると良いでしょう。

 Apache、ipfw、nat、DNS、DHCP、SQLite、syslog、認証サーバ

Opengateが出力するsyslogファイルにエラーが出ていないかを確認下さい。

Opengate設定ファイル内の<Debug>タグは、通常は1が設定されていますが、これを2に変えると関数呼び出 しのトレースをsyslogに出します。

「RecentQA」に、寄せられた質問・応答があります。解決のヒントになるかも知れません。

Opengateは異常終了の場合も、できる限り後始末しようとしますが、場合によっては、ipfwルールの残留、プロセスの残留、 終了記録の喪失等が起こり得ます。そこでipfwルールとプロセスの対応を取って不要なものを消すスクリプトをインストールメモの中 で説明しています。また周期的にマシンのリブートを行うことを推奨します。なお、Opengateは常駐プロセスでなく、 Apacheから起動するCGIおよびその子プロセスです。よって異常終了しても、他のユーザのサービスは維持されます。また新たな ユーザへのサービスもできます。

バグを発見した場合は、当サイトの管理者にご報告頂ければ幸いです。