ゲートウェイマシンとして、NICを2枚以上持ち、FreeBSDをインストールすることが可能なものを用意する。
本文書の説明では、下に示す構成のシステムを仮定している。ここで端末接続のネットワークを下流側と呼び、利用するWebサーバー等が存在す るネットワークを上流側と呼ぶことにする。
上流側ネット:192.168.0.0/24, 2001:db8:1:2:3/64 |
Opengateは、IPv4とIPv6の両アドレスを認識して、それぞれに対するファイアウォールを制御するが、IPv4だけを設定した FreeBSDシステムであっても問題なく利用できる。
Opengateのインストール手順を以下に示す。ただし、※は必須項目を示し、それ以外の手順は必要に応じて行なう。
Opengateの情報を下記のページにまとめている。
http://www.cc.saga-u.ac.jp/opengate/ |
FreeBSD6.1以降のどれかをインストールする。後にカーネルを再構築する必要があるので、インストールする Distributionsを選択する際に、Developer(Full sources,binaries and doc)もしくはAllを選択しなければならない。
FreeBSDをインストールした後に、ゲートウェイとしての機能を有効にするために、/etc/rc.confに次の設定を記述する。もし くは、 FreeBSDをインストールする際に、ゲートウェイとしての機能を有効にするか否かを問われるので、ここでゲートウェイの機能を有効にして も構わない。
gateway_enable="YES" |
ファイアウォール(ipfw)を利用するためには、FreeBSDのカーネルを再構築する必要がある 。 FreeBSDインストール時にカーネル等の全てのソースをインストールしていなければならない。
* 新しいカーネルでは標準でipfwが含まれており、再構築の必要はない。以下をスキップして/etc/rc.confの設定から始める。
以下のディレクトリにおいて、Opengate用のカーネルオプションを指定するファイルMYKERNELを作成する。
# cd /usr/src/sys/i386/conf |
MYKERNELの内容は次の通り。
include GENERIC |
MYKERNELを保存した後に、カーネルのコンパイルとインストールを行なう。
#cd /usr/src |
これが失敗するなら、古い方式を利用する。
# config MYKERNEL |
"make depend"を実行する前に、"make clean"が要求される場合もある。
再構築したカーネルによって、ファイアウォールを有効にするために/etc/rc.confに以下のオプションを記述する。
firewall_enable="YES" |
ここでは、この後のチェックにおいて不可解な問題を起こさないように、ひとまず全ての通信を許可する設定とする。さらにNATが必要である場 合は、 natdを有効にし、アドレス変換を行うインタフェース(上流側)のIDを指定する。
下流側ネットワークにPCをつなぎ、IPv4におけるゲートウェイ機能を満たしていることを確認する。
まだDHCPは設定されていないので、PCのネットワークはマニュアルで設定しなければならない。
IPv6機能を使わない場合には、この項は不要である。IPv6機能を使う場合には多くの設定を/etc/rc.confにする必要がある。 複雑なために詳細は略すが、熟知した上で設定することが必要である。
##ENABLE IPv6 |
下流側ネットワークにPCをつなぎ、IPv6が有効であることを確認する。
WindowsPCにおいてIPv6を有効にするには、"ipv6 install"とコマンドを入れる必要があるかもしれない。
IPv6機能を使う場合には、IPv4とIPv6の両アドレスが登録されたDNSが必要である。IPv6機能を使わない場合には、DNSを設 定せずにIP アドレスで制御することも可能である。既存のDNSに追加することでも良い。 ここでは、BIND9をサーバマシンにインストールする手順を記す。
*新しいFreeBSDでは、標準で含まれているUnboundを使うことを薦める。
インストールにはsysinstallコマンドを用いても良い。portsからインストー ルするには以下のコマンドを使う(標準で/usr/sbin/namedが存在する場合 は[1.インストール]を省略する)。
# cd /usr/ports/dns/bind9/ |
インストールが完了すると、/etc/namedb(/var/named/etc/namaedb)以下のディレクトリに各種設定ファイル が生成される。
BIND9では、セキュリティを確保するために認証キーを設定し、rndcコマンドを用いてnamedを制御する。
そこで、まず認証キーの作成を行う。認証キーの作成手順を以下に示す。
# cd /etc/namebd/ |
以下のようにキーを含む設定ファイルrndc.confが作成される。
# Start of rndc.conf |
namedの主な動作を制御するための設定ファイル/etc/namedb/named.confの設定を行う。
まず、認証キーの設定のためにkeyディレクティブの設定が必要である。前述したrndc.confの keyディレクティブと同様の設定をしなければならない。そこで、rndc.confの後半部分をコピーしてコメントを外す。さらにIPv6 設定(必要なら)を加える。
# Use with the following in named.conf, adjusting the allow list as needed: |
なおkeyディレクティブについては別ファイルに記述し、named.confでinclude することが望ましい。
次に、named.conf中のoptionsディレクティブの設定を行う。
options { |
pidファイルを置くディレクトリは適当に作成する必要がある。
Opengateで管理するドメインについて設定を行う。各ドメインはnamed.confのzoneディレクティブによって管理される。
zone "og.saga-u.ac.jp" { type master; file "og.saga-u.ac.jp"; }; |
以上の設定において、"og.saga-u.ac.jp"というzoneを設定した。この設定に おいて、ドメイン"og.saga-u.ac.jp"に属するホストを設定した og.saga-u.ac.jpというファイルを読み込むように設定している。そこで、 og.saga-u.ac.jpという名の、次のようなファイルを用意する。なお、ドメイ ン名とIPアドレスは、適切に設定する必要がある。IPv6が不要なら、"AAAA ...."の行は削除する。
$TTL 3600 $ORIGIN og.saga-u.ac.jp. @ IN SOA ns.og.saga-u.ac.jp. postmaster ( 2005051702 ; 3600 1200 2419200 86400 ) IN NS ns.og.saga-u.ac.jp. IN A 192.168.1.1 IN MX 10 opengate.og.saga-u.ac.jp. ns IN A 192.168.1.1 opengate IN A 192.168.1.1 IN AAAA 2001:db8:5:6:7::1 |
以上、全ての設定が完了した後に、起動確認を行う。
# /usr/local/sbin/named -u bind -c /etc/namedb/named.conf |
問題なくnamedが起動していれば成功である。問題がなければ、/etc/rc.confに以下の項目を記述し、自動起動するように設定す る。
named_enable="YES" |
DNSサーバは管理が複雑であるため、この他の資料も参考にし、マニュアルを熟読した上で設定することが望ましい。
Opengateを導入するネットワークでは、利用者端末が頻繁に入れ替わることが予測できる。そこで、様々な利用者端末に対して自動的に IPv4アドレスを割り当てることができるDHCPサーバを導入することが望ましい。
以下にisc-dhcp3のインストール手順を記す。"sysinstall"コマンドを用いても良い。
# cd /usr/ports/net/isc-dhcp3-server |
インストール作業が完了すると、/usr/local/etc以下にdhcpd.conf.sampleが生成されている。同ディレクトリに dhcpd.confとしてコピーし修正する。
以下に、設定例を示す。リース時間は、許容最大時間(opengatesrv.conf内のDuration/Max)より長くすること。
option domain-name "og.saga-u.ac.jp"; |
また、dhcpdを自動起動するために、/etc/rc.confに以下の項目を記述する。
dhcpd_enable="YES" |
dhcpd_ifacesについては、dhcpを送信するインタフェースIDを記述する。
IPv6機能を使う場合、IPv6をサポートしたApache2が必要である。また、認証を行うことから SSLをサポートすることが望ましい。Apache2は標準でSSLをサポートしているので、mod_ssl を別途インストールする必要はない。
以下に、portsを利用してインストールする手順を以下に記す。インストールは"sysinstall"コマンドを用いても良い。
# cd /usr/ports/www/apache22 |
Apache2で、SSLを利用するために秘密鍵と証明書を用意する必要がある。正規の認証局から発行された証明書を用意することが望ましい が、自己署名を行った証明書と秘密鍵でも最低限のセキュリティを確保することが可能である。以下に、秘密鍵と証明書を作成する手順を示す。
# cd /usr/local/etc/apache22 |
上記において作成した秘密鍵を用いて署名した証明書を作成する。
# /usr/bin/openssl req -new -x509 -days 365 \ |
以下に/usr/local/etc/apache22/extra/httpd-ssl.confにおけるSSL設定例を示す。
ssl.conf |
<VirtualHost _default_:443> |
上記の設定例は、バーチャルホストの設定のためのディレクティブのみ記述している。この他にも多くの項目を設定しなければならないので、 Apache2の設定を熟知した上で設定することが望ましい。
その他、/usr/local/etc/apache22/httpd.confにおいて以下の設定をする。
Opengateでは、利用者端末から送信されてくるHTTPリクエストを、Opengateが持つWebサーバに転送することによって、認 証ページを提供している。このため、利用者端末から送信されてくるHTTPリクエストは予期することができない。よって、存在しないファイル に対するHTTPリクエストに対しても、認証ページを返すために、HTTP_ERROR 404(File Not Found)が発生した場合に、DocumentRootを返すように設定する。
ErrorDocument 404 / |
また、CGIプログラムの動作を許可する。
<Directory "/usr/local/www/cgi-bin"> |
下の設定を有効にする。
AddHandler cgi-script .cgi |
index.html.varをDirectoryIndexに追加する。
DirectoryIndex index.html.var index.html |
SSL設定ファイルをインクルードする。
Include etc/apache22/extra/httpd-ssl.conf |
サーバ名を設定する。
ServerName opengate.og.saga-u.ac.jp |
日本語が化ける場合には、文字セットの設定をコメントアウトする。
#AddDefaultCharset ISO-8859-1 |
インストール作業が完了した後、"apachectl start"コマンドで起動して動く事を確認する。 SSLでのアクセスや存在しないファイルの要求にも対応できているかも確認する。その後、Apache2の起動とSSLを有効にするために、 以下の項目を/etc/rc.confに記述する。
apache22_enable="YES" |
もし"Failed to enable the 'httpready' Accept Filter"のメッセージが出た時は、/boot/loader.confに以下を記述する。
accf_http_load="YES" |
SQLiteのサイトからダウンロードしたアーカイブを解凍し、インストール する。portsまたはsysinstallコマンドを用いても良い。
# tar xzvf sqlite-amalgamation-3.xx.xx.tar.gz |
以下のコマンドでインストールを確認する。
# sqlite3 |
Opengateのパッケージを適当なディレクトリに展開する。
# tar xzvf opengatexxxx.tar.gz |
パッケージには以下のディレクトリが含まれる。
doc:各種文書 |
展開したファイルの中のopengatesrv/Makefileを確認する。もし以下のディレクトリが異なっていれば変更する。
HTMLTOP = /usr/local/www/apache22 |
# make clean |
設定ファイル/etc/opengate/opengatesrv.conf.sampleが作成されているので、これを /etc/opengate/opengtesrv.confにコピーして変更を加える。
cd /etc/opengate |
必須変更箇所は以下の部分である。
<OpengateServerName>opengate.og.saga-u.ac.jp</OpengateServerName> |
<OpengateServerName>には、サーバのHOSTNAME(FQDN)もしくはIPアドレスを記す。IPv6機 能を使うときには、IPv4とIPv6の両方が登録されたFQDNとする必要がある。
<AuthServer>には、認証サーバの設定を記す。各種プロトコルをサポートしているが、詳細は設定ファイルを参照のこ と。Opengateサーバと認証サーバの問題を切り分けるために、最初は以下の「全て許可」を試行すると分かりやすい。
****運用では用いないこと**** |
設定ファイルはXML形式である。コメントは<!-- Comment String -->と書く。#マークはコメントを意味しないので、コメントアウト時には注意すること。
Opengateは"userid@extid"のパターンによって認証を切り替えることができる。これにより、部門別ユーザや外部ユーザに 対する認証を分離できる。詳細は設定ファイルを参照の事。
Opengateは、最初の認証サーバが返答しない時、次のサーバへ問い合わせる設定ができる。詳細は設定ファイルを参照の事。
注意:不要の場合もIPv6関連の設定を削除しないこと。IPv6アドレスでのアクセスは、IPv6に対応したFQDNが設定されたときに実 行される。
Opengateの動作のために適切にファイアウォールのルールを記述しなければならない。
IPv4/IPv6の両者をipfwシステムで制御する。そのファイアウォールのルール設定のスクリプト例を、 "/etc/opengate/rc.firewall.sample"に用意している。
これを"/etc/opengate/rc.firewall"にコピーして、IPアドレス等を修正する。IPv6を使わない場合、 IPv6アドレスにはlocalhost(*net6="0", *ip6="::1")を設定する。
# cd /etc/opengate |
/erc/rc.conf内のファイアウォール設定を以下のように変更する。この設定後は、ファイアウォールが原則閉鎖になるので注意する。
firewall_enable="YES" |
実際にOpengateを導入する際には、ipfwの動作を熟知した上、各種ネットワークに適したファイアウォールを設置することが望まし い。
Opengateは、認証を通過した端末に対して、許可ルール(番号:10000-40000)を追加/削除する。また、最初から優先順位の 低い位置(番号:60000)に、フォワードルールが設定されている。よって、許可端末のパケットはゲートウェイを通過し、それ以外の端末の Webアクセスでは認証ページが表示される。
/etc/opengateには、もう一つipfwctrl.pl.sampleがある。これはipfw制御のperlスクリプトであるが defaultでは使用しない。
SYSLOGによるログ記録を有効にするために、/etc/syslog.confに以下の設定を行う。
local1.* /var/log/opengate.log |
設定と対応したログファイルを作る。このファイルは利用とともに大きくなるので適切なログ更新を設定する。
# touch /var/log/opengate.log |
設定を生かすためにリブートを行い、下流側ネットワークにPCをつないで、上流側のWebサイトをアクセスする。適切に動作しない場合、まずは、 doc/progflow.html, doc/protocol.txtを見て、動作の関連を理解するとともに、ログファイル(Opengate, httpd, システムなど)を参照して欲しい。詳細なログを出すには、opengatesrv.conf内の<Debug>を2に設定する。 また、関連ソフトウェアが独立で動作するかを確かめて欲しい。また、エラーチェックドキュメントerrcheck.html、質問回答 qa.html、Web上の recentqa.htmlも参考になるだろう。
表示ページの内容を変更するときには、HTMLドキュメントディレクトリ中の該当HTMLファイルを修正する。これらのファイルは CGIを経由してブラウザに送られる。なお、httpkeep.html内のURLには相対パスは使えない。フルパスで指定することが必要で ある。%%XXX%%のような記述は変数であり、CGIにおいて適切な値に置き換えられる。
Opengateはセッション情報を保持するためにSQLite3データベースを利用する。データベースファイルの位置は、 opengatesrv.conf中の、<SqliteDb>で指定する。 default値から、より適切なディレクトリ内に変えることが望ましい。なお、そのディレクトリには、下記の例のようにWWWからの書き込 み許可を与える必要がある。
Example: |
データベースファイルおよびテーブルの作成は自動的に行われる。
接続のたびにファイル容量が徐々に増加するため、cron(もしくは手作業)でファイル圧縮(もしくは削除)を定期的に行う必要がある。以下 は閉鎖から3日以上経過したレコードを削除するスクリプトの例である。
#!/bin/sh |
このインストールは任意である。Opengate の利用状況を監視するために、MRTGを用いることが可能である。必要になってからインストールすること。利用状況の監視を行なわない場合 は、MRTGのインストールは不要である。
MRTG(Multi Router Traffic Grapher)とは、本来ネットワークの負荷を監視するツールである。 SNMPエージェントよりトラフィックの値を取得し、グラフィックイメージを含むHTMLページを生成する。 詳細
MRTGを用いて、Opengateの利用状況を監視するにあたっては、Opengateを導入したゲートウェイにおいて MRTGをインストールしても構わないが、監視用の別のサーバにインストールしても構わない。また、 Opengateを分散配置するように設計されているため、複数のOpengateを管理するにあたっては監視用のサーバにおいてMRTGを インストールすることを推奨する。
以下に、MRTGをportsを用いてインストールする手順を示す。
# cd /usr/ports/net-mgmt/mrtg/ |
MRTGのインストールが完了すると、/usr/local/etc/mrtg/以下に設定ファイルが用意されている。同ディレクトリに、 opengate.cfgとして新たに設定ファイルを用意する。
################################################## |
WorkDirに指定したディレクトリを作成する。同ディレクトリに、MRTGが各種HTMLファイルとグラフィックイメージを作成する。
Target[opengate]には、MRTGにデータを渡すためのプログラムを設置する。以下に詳細を説明する。
以下にOpengateを導入したゲートウェイにおいて利用状況を監視する場合のシェルスクリプトを記す。
#!/bin/sh |
さらに、このシェルスクリプトを単独で実行し、以下のようなデータが取得できていることを確認する。
5 |
以下に外部サーバにおいて利用状況を監視する場合のシェルスクリプトを示す。
#!/bin/sh |
さらに、監視するOpengateサーバにおいて、CGIが実行可能なディレクトリに次のようなシェルスクリプトを用意する。これを、上記の シェルスクリプトの"url"に指定する。
#!/bin/sh |
Opengateサーバに、以上のシェルスクリプトを用意した後に、監視用の外部サーバにおいて、 input.shを単独で実行した際に、以下のようなデータが取得できていることを確認する。
5 |
以上の設定が完了した後に、mrtgを実行することが可能か確認する。
# /usr/local/bin/mrtg /usr/local/etc/mrtg/opengate.cfg |
以上を実行すると、1回目と2回目は様々なWARNINGが出力される。
mrtgを複数回実行し後に、WorkDirに指定したディレクトリに以下のファイルが生成されていれば成功である。
> ls -l |
以上の設定が完了したのちに、mrtgをcrontabによって定期的に実行する。
/etc/crontabに次の行を追加する。
*/5 * * * * root /usr/local/bin/mrtg /usr/local/etc/mrtg/opengate.cfg |
外部サーバにおいて、複数のOpengateを管理する場合は、設定ファイルを新たに作成する過程から行なう。
このインストールは任意である。Opengateのプロセスが異常終了したとき、極めて稀にではあるが、ファイアウォールルールが消されずに 残ることがある。そのような状況に対応するスクリプトを、tools/rulechkに用意した。OpengateVer.1.3.1以降の フォーマットにのみ対応する。このツールは、psコマンドから得られるOpengateプロセス一覧と、ファイアウォールから得られる許可 ルール一覧を比較して、余分なルールを削除するスクリプトである。コンソールから実行するか、もしくは上記と同様にcron実行する。