Opengate インストール手順


A インストール概要

A.1 システム構成

ゲートウェイマシンとして、NICを2枚以上持ち、FreeBSDをインストールすることが可能なものを用意する。

本文書の説明では、下に示す構成のシステムを仮定している。ここで端末接続のネットワークを下流側と呼び、利用するWebサーバー等が存在するネットワークを上流側と呼ぶことにする。

上流側ネット:192.168.0.0/24, 2001:1:2:3/64
ゲートウェイ上流側インターフェース:fxp1, 192.168.0.124, 2001:1:2:3::4
ゲートウェイ下流側インターフェース:fxp0, 192.168.1.1, 2001:5:6:7::1
下流側ネット:192.168.1.0/24, 2001:5:6:7/64

Opengateは、IPv4とIPv6の両アドレスを認識して、それぞれに対するファイアウォールを制御するが、IPv4だけを設定したFreeBSDシステムであっても問題なく利用できる。

A.2 インストール手順

Opengateのインストール手順を以下に示す。ただし、※は必須項目を示し、それ以外の手順は必要に応じて行なう。

back top

B FreeBSDのインストール

B.1 基本インストール

FreeBSD 4.x,5.x,6.xのどれかをインストールする。後にカーネルを再構築する必要があるので、インストールするDistributionsを選択する際に、Developer(Full sources,binaries and doc)を選択しなければならない。

FreeBSDをインストールした後に、ゲートウェイとしての機能を有効にするために、/etc/rc.confに次の設定を記述する。もしくは、FreeBSDをインストールする際に、ゲートウェイとしての機能を有効にするか否かを問われるので、ここでゲートウェイの機能を有効にしても構わない。

gateway_enable="YES"
back top

B.2 NATとファイアウォールの追加

ファイアウォール(ipfwおよびip6fw)を利用するためには、FreeBSDのカーネルを再構築する必要がある。FreeBSDインストール時にカーネル等の全てのソースをインストールしていなければならない。

以下のディレクトリにおいて、Opengate用のカーネルオプションを作成する。

# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL

コピーしたカーネルオプションに、次のオプションを追加する。

options IPDIVERT

options IPFIREWALL
options IPFIREWALL_FORWARD
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100

options IPV6FIREWALL
options IPV6FIREWALL_VERBOSE
options IPV6FIREWALL_VERBOSE_LIMIT=100

options IPSEC
options IPSEC_ESP
options TCP_DROP_SYNFIN

IPDIVERTについては、IPv4のNATを用いる場合に必要である。また、ファイアウォールのログを必要としない場合は、VERBOSEの項目は不要である。さらに、IPSECを必要としない場合は、IPSECの項目は不要である。またIPv6機能を使わない場合には、IPV6FIREWALL関連は不要である。

これらのオプションを追加した後に、カーネルのコンパイルとインストールを行なう。

# config MYKERNEL
# cd ../compile/MYKERNEL
# make depend
# make
# make install

FreeBSD 6.xでは、"make depend"を実行する前に、"make clean"が要求される場合もあるので、注意する。

再構築したカーネルによって、ファイアウォールを有効にするために/etc/rc.confに以下のオプションを記述する。ただし、ipv6XXXの行は、IPv6を利用しない場合は不要である。

firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_type="open"

ipv6_firewall_enable="YES"
ipv6_firewall_script="/etc/rc.firewall6"
ipv6_firewall_type="open"

natd_enable="YES"
natd_interface="fxp1"

ここでは、この後のチェックにおいて不可解な問題を起こさないように、ひとまず全ての通信を許可する設定とする。さらにNATが必要である場合は、natdを有効にし、アドレス変換を行うインタフェース(上流側)のIDを指定する。

下流側ネットワークにPCをつなぎ、IPv4におけるゲートウェイ機能を満たしていることを確認する。

まだDHCPは設定されていないので、PCのネットワークはマニュアルで設定しなければならない。

back top

B.3 IPv6の設定

IPv6機能を使わない場合には、この項は不要である。IPv6機能を使う場合には多くの設定を/etc/rc.confにする必要がある。複雑なために詳細は略すが、熟知した上で設定することが必要である。

##ENABLE IPv6
ipv6_enable="YES"
ipv6_network_interfaces="gif0 fxp0"

##TUNNELLING INTERFACE
gif_interfaces="gif0"
gifconfig_gif0="192.168.0.124 192.168.0.126"

##IPv6 ADDRESS 
ipv6_prefix_fxp0="2001:5:6:7"
ipv6_ifconfig_fxp0="2001:5:6:7::1 prefixlen 64"

##ADVERTISE
rtadvd_enable="YES"
rtadvd_interfaces="fxp0"

##DEFAULT GATEWAY
ipv6_default_interface="gif0"
ipv6_defaultrouter="fe80::a:b:c:d%gif0"

##ROUTING(RIPv6)
ipv6_gateway_enable="YES"
ipv6_router_enable="YES"
ipv6_router="/usr/sbin/route6d"
ipv6_router_flags="-O 2001:5:6:7::/64,gif0"

下流側ネットワークにPCをつなぎ、IPv6が有効であることを確認する。

WindowsPCにおいてIPv6を有効にするには、"ipv6 install"とコマンドを入れる必要があるかもしれない。

back&freebsd0;top

C BIND9のインストール(Optional)

C.1 インストール(ports)

IPv6機能を使う場合には、IPv4とIPv6の両アドレスが登録されたDNSが必要である。IPv6機能を使わない場合には、DNSを設定せずにIPアドレスで制御することも可能である。既存のDNSに追加することでも良いが、ここでは、BIDN9をサーバマシンにインストールする手順を記す。

# cd /usr/ports/dns/bind9/
# make clean
# make install clean ; rehash

インストールが完了すると、/etc/namedb(/var/named/etc/namaedb)以下のディレクトリに各種設定ファイルが生成される。

back top

C.2 認証キーの作成

BIND9では、セキュリティを確保するために認証キーを設定し、rndcコマンドを用いてnamedを制御する。

そこで、まず認証キーの作成を行う。認証キーの作成手順を以下に示す。

# /usr/local/sbin/dnssec-keygen -a hmac-md5 -b 512 -n user rndc

以上の作業において、"out of entropy"というエラーが発生する場合は、次の方法で認証キーを作成する。

# /usr/local/sbin/dnssec-keygen -r /dev/urandom -a hmac-md5 -b 512 -n user rndc

認証キーの作成に成功すると、次の二つのファイルが生成される。ただし、ファイル名に含まれる数字はランダムに生成される。

BIND9のインストール後に、/usr/local/etc/rndc.conf.sampleというファイルが生成されている。このファイルをコピーして、/usr/local/etc/rndc.confを作成する。

そして、rndc.confのkeyディレクティブを編集する。keyディレクティブでは、認証キーのアルゴリズムと生成した認証キーを指定しなければならない。認証キーはsecretの項目に指定する。また、認証キーと共に作成した

Krndc.+157+60849.private
のkey項目に表示されているものを指定する。

options {
        default-server  localhost;
        default-key     "rndc_key";
};

server localhost {
        key     "rndc_key";
};

key "rndc_key" {
        algorithm       hmac-md5;
        secret "......................";
};

今回のDNSサーバは、Opengateを導入するネットワークのみにサービスを行うものである。しかし、設定ファイルのパーミッションに十分注意し、認証キーのファイルはサーバ上に保存せずに、削除もしくはプリントアウトして厳重に保存することが望ましい。

back top

C.3 named.confの設定

namedの主な動作を制御するための設定ファイル/etc/namedb/named.confの設定を行う。

まず、認証キーの設定のためにkeyディレクティブの設定が必要である。前述したrndc.confの keyディレクティブと同様の設定をしなければならない。

key "rndc_key" {
        algorithm       hmac-md5;
        secret ".......................";
};

controls {
        inet ::1 allow {
                ::1;
        }
        keys {
                "rndc_key";
        };
        inet 127.0.0.1 allow {
                127.0.0.1;
        }
        keys {
                "rndc_key";
        };
};

また、keyディレクティブについては別ファイルに記述し、named.confでinclude することが望ましい。別ファイルに記述する場合は、パーミッションの設定よってさらにセキュリティを高めることが可能となる。

次に、optionsディレクティブの設定を行う。

options {
        directory "/etc/namedb";
        pid-file "/var/run/named/named.pid";
        auth-nxdomain yes;
        listen-on-v6 { any; };
};

named.pidファイルを置くディレクトリは適当に作成する必要がある。

back top

C.4 zoneの設定

Opengateで管理するドメインについて設定を行う。各ドメインはnamed.confのzoneディレクティブによって管理される。また、BIND9ではviewというディレクティブが実装されており、この子ディレクティブに zoneとして設定することによって、DNS問い合わせ元のIPアドレスやドメインによって返答するzoneを変更することが可能となる。

view "og" {
        match-clients
        {
        192.168.1.0/24;
        };

        recursion yes;

        zone "." {
                type hint;
                file "named.root";
        };

        zone "og.saga-u.ac.jp" {
                type master;
                file "og.saga-u.ac.jp";
        };

        zone "0.0.127.IN-ADDR.ARPA" {
                type master;
                file "master/localhost.rev";
        };

        // RFC 3152
        zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.\
              0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA" {
                type master;
                file "master/localhost-v6.rev";
        };

        // RFC 1886 -- deprecated
        zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.\
              0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.INT" {
                type master;
                file "master/localhost-v6.rev";
        };
};

以上の設定において、"og.saga-u.ac.jp"というzoneを設定した。この設定において、ドメイン"og.saga-u.ac.jp"に属するホストを設定したog.saga-u.ac.jpというファイルを読み込むように設定している。そこで、og.saga-u.ac.jpという、次のようなファイルを用意する。

$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
                        AAAA    2001:5:6:7::1
back top

C.5 起動確認

以上、全ての設定が完了した後に、起動確認を行う。

# /usr/local/sbin/named/ -u bind -c /etc/namedb/named.conf

問題なくnamedが起動していれば成功である。起動確認で問題がなければ、/etc/rc.confに以下の項目を記述し、自動起動するように設定する。

named_enable="YES"
named_program="/usr/local/sbin/named"
named_flags="-u bind -c /etc/namedb/named.conf"

DNSサーバは管理が複雑であるため、この他の資料も参考にし、マニュアルを熟読した上で設定することが望ましい。

back top

D isc-dhcp3のインストール(Optional)

D.1 インストール(ports)

Opengateを導入するネットワークでは、利用者端末が頻繁に入れ替わることが予測できる。そこで、様々な利用者端末に対して自動的にIPv4アドレスを割り当てることができるDHCPサーバを導入することが望ましい。

以下にisc-dhcp3のインストール手順を記す。

# cd /usr/ports/net/isc-dhcp3-server
# make clean
# make install clean ; rehash
back top

D.2 DHCPの設定

インストール作業が完了すると、/usr/local/etc以下にdhcpd.conf.sampleが生成されている。同ディレクトリにdhcpd.confとしてコピーし、dhcpd用の設定ファイルを作成する。

以下に、設定例を示す。リース時間は、時間監視の場合に使う許容最大時間(opengatesrv.conf内のDuration/Max)より長くすること。

option domain-name "og.saga-u.ac.jp";
option domain-name-servers 192.168.1.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;

default-lease-time 86400;
max-lease-time 604800;
ddns-update-style none;
log-facility local7;

subnet 192.168.55.0 netmask 255.255.255.0 {
  range 192.168.1.10 192.168.1.250;
}

また、dhcpdを自動起動するために、/etc/rc.confに以下の項目を記述する。

dhcpd_enable="YES"
dhcpd_ifaces="fxp0"
dhcpd_conf="/usr/local/etc/dhcpd.conf"

dhcpd_ifacesについては、dhcpを送信するインタフェースIDを記述する。

back top

E Apache2のインストール

E.1 インストール(ports)

IPv6機能を使う場合、IPv6をサポートしたApache2が必要である。また、認証を行うことから SSLをサポートすることが望ましい。Apache2は標準でSSLをサポートしているので、mod_ssl を別途インストールする必要はない。

以下に、portsを利用してインストールする手順を以下に記す。

# cd /usr/ports/www/apache2
# make clean
# make install clean ; rehash

インストール作業が完了した後、Apache2の起動とSSLを有効にするために、以下の項目を/etc/rc.confに記述する。

apache2_enable="YES"
apache2ssl_enable="YES"
back top

E.2 秘密鍵、証明書の作成

Apache2で、SSLを利用するために秘密鍵と証明書を用意する必要がある。正規の認証局から発行された証明書を用意することが望ましいが、自己署名を行った証明書と秘密鍵でも最低限のセキュリティを確保することが可能である。以下に、秘密鍵と証明書を作成する手順を示す。

# cd /usr/local/etc/apache2
# mkdir ssl.key ssl.crt
# chmod 700 ssl.key ssl.crt

# /usr/bin/openssl genrsa -out /usr/local/etc/apache2/ssl.key/server.key 1024

上記において作成した秘密鍵を用いて署名した証明書を作成する。

# /usr/bin/openssl req -new -x509 -days 365 \
    -key /usr/local/etc/apache2/ssl.key/server.key \
    -out /usr/local/etc/apache2/ssl.crt/server.crt

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Saga
Locality Name (eg, city) []:Saga-city
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Saga-university
Organizational Unit Name (eg, subsection) []:Information Science
Common Name (eg, YOUR name) []:opengate.og.saga-u.ac.jp
Email Address []:administrator@opengate.og.saga-u.ac.jp

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

back top

E.4  SSLの設定

以下にssl.confにおけるSSL設定例を示す。

ssl.conf
<VirtualHost _default_:443>
    DocumentRoot "/usr/local/www/data"
    ServerName opengate.og.saga-u.ac.jp:443
    ServerAdmin administrator@opengate.og.saga-u.ac.jp
    ErrorLog "|/usr/bin/logger -p local6.info"
    CustomLog "|/usr/bin/logger -p local5.info" combined

    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /usr/local/etc/apache2/ssl.crt/server.crt
    SSLCertificateKeyFile /usr/local/etc/apache2/ssl.key/server.key
</VirtualHost>

上記の設定例は、バーチャルホストの設定のためのディレクティブのみ記述している。この他にも多くの項目を設定しなければならないので、Apache2の設定を熟知した上で設定することが望ましい。

back top

E.5 その他の設定と動作確認

その他、/usr/local/etc/httpd.confにおいて以下の設定をする。

Opengateでは、利用者端末から送信されてくるHTTPリクエストを、Opengateが持つWebサーバに転送することによって、認証ページを提供している。このため、利用者端末から送信されてくるHTTPリクエストは予期することができない。よって、存在しないファイルに対するHTTPリクエストに対しても、認証ページを返すために、HTTP_ERROR 404(File Not Found)が発生した場合に、DocumentRootを返すように設定する。

ErrorDocument 404 /

また、CGIプログラムの動作を許可する。

<Directory "/usr/local/www/cgi-bin">
    ...
    Options ExecCGI
    ...
</Directory>

下の設定のコメントを外す。
AddHandler type-map .var

日本語が化ける場合には、文字セットの設定をコメントアウトする。

#AddDefaultCharset ISO-8859-1

Apache2の動作を確認する。SSLでのアクセスや存在しないファイルの要求にも対応できているかも確認する。

back top

F Opengateのインストール

F.1 Opengateパッケージ

Opengateのパッケージを適当なディレクトリに展開する。パッケージには以下のディレクトリが含まれる。

doc:各種文書
conf:設定ファイル、ファイアウォールスクリプト
javahtml:クライアントJava Applet、HTMLファイル
opengatesrv:サーバCGIプログラム
tools: 付加ツール
ezxml: XMLパーサ (copyright Aaron Voisine)
back top

F.2 コンパイル

opengatesrv/Makefileを確認する。もし以下のディレクトリが異なっていれば変更する。なお、これらを変更したときは、下で説明する設定ファイル内の対応設定も変更すること。

HTMLTOP = /usr/local/www/data
DOCPATH = /usr/local/www/data/opengate
CGIPATH = /usr/local/www/cgi-bin/opengate
CONFIGPATH = /etc/opengate
コンパイルとインストールを行う。
# make clean
# make install
back top

F.3 設定ファイルの設定

設定ファイル/etc/opengate/opengatesrv.conf.sampleが作成されているので、これを/etc/opengate/opengtesrv.confにコピーして変更を加える。必須変更箇所は以下の通りである。

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

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

<OpengateServerName>には、サーバのHOSTNAME(FQDN)もしくはIPアドレスを記す。IPv6機能を使うときには、IPv4とIPv6の両方が登録されたFQDNとする必要がある。

<AuthServer>には、認証サーバの設定を記す。各種プロトコルをサポートしているが、詳細は設定ファイルを参照のこと。Opengateサーバと認証サーバの問題を切り分けるために、最初は以下の「全て許可」を試行すると分かりやすい。

 ****運用では用いないこと****
	<AuthServer>
		<Protocol>accept</Protocol> 
	</AuthServer>

OpengateはユーザIDに付加したIDによって(userid@ID)、認証サーバその他の設定を切り替えることができる。これにより、部門別ユーザや外部ユーザに対する認証を分離できる。詳細は設定ファイルを参照のこと。

その他、設定ファイルで変更可能なパラメータについての詳細は設定ファイルを参照のこと。

注意:IPv6機能はIPv6アドレスでのアクセスを検出したときにのみ実行されるので、不要の場合もIPv6関連の設定を削除しないこと。IPv6アドレスでのアクセスは、IPv6に対応したFQDNが設定されたときに実行される。

back top

F.4 ipfwの設定

Opengateの動作のために適切にファイアウォールのルールを記述しなければならない。以下に記述するルールの例を示す。

注意:FreeBSD6.1からipfwがIPv6に対応した版になったため、Opengateのipfwルールも影響を受ける。FreeBSD6.1以降でのipfw設定を参照のこと。

### set these to your outside interface network and netmask and ip
oif="fxp1"
onet="192.168.0.0"
omask="255.255.255.0"
oip="192.168.0.124"

### set these to your inside interface network and netmask and ip
iif="fxp0"
inet="192.168.1.0"
imask="255.255.255.0"
iip="192.168.1.1"

fwcmd="/sbin/ipfw"

### divert packet to NATD 
$fwcmd add 1 divert natd ip from any to any via ${oif}

### Stop spoofing
$fwcmd add deny all from ${inet}:${imask} to any in via ${oif}
$fwcmd add deny all from ${onet}:${omask} to any in via ${iif}

### Allow from / to myself
$fwcmd add pass all from ${iip} to any via ${iif}
$fwcmd add pass all from ${oip} to any via ${oif}
$fwcmd add pass all from any to ${iip} via ${iif}
$fwcmd add pass all from any to ${oip} via ${oif}

### Allow DNS queries out in the world
### (if DNS is on localhost, delete passDNS)
$fwcmd add pass udp from any 53 to any
$fwcmd add pass udp from any to any 53
$fwcmd add pass tcp from any to any 53
$fwcmd add pass tcp from any 53 to any

### Forwarding http connection from unauth client 
$fwcmd add 60000 fwd localhost tcp from ${inet}:${imask} to any 80

### Allow TCP through if setup succeeded 
$fwcmd add 60100 pass tcp from any to any established

Opengateを動作させる際、ルール番号60000,60100が重要となる。認証ページを表示させるために、HTTP,リクエストはOpengateのWebサーバに転送しなければならない。また、既に確立されているTCP接続に関しては、Opengateによる通信路閉鎖後も利用可能とするため、60100のルールを追加する。

この例のスクリプトを、/etc/opengate/rc.firewall.sampleとして用意している。そこでこれを/etc/opengate/rc.firewallにコピーして変更後、/erc/rc.conf内のファイアウォールスクリプト設定を以下のように変更する。この設定後は、ファイアウォールが原則閉鎖になるので注意する。

firewall_script="/etc/opengate/rc.firewall"

以上、示した例はOpengateを動作させるための設定例である。実際にOpengateを導入する際には、 ipfwの動作を熟知した上、各種ネットワークに適したファイアウォールを設置することが望ましい。

back top

F.5 ip6fwの設定

これはIPv6パケットのファイアウォール設定であり、IPv6機能を利用しない場合は不要である。Opengateの動作のために適切にファイアウォールのルールを記述しなければならない。以下に記述すべきルールの例(/etc/rc.firewall6)を示す。

注意:FreeBSD6.1からipfwがIPv6に対応した版になったため、Opengateのipfwルールも影響を受ける。FreeBSD6.1以降でのipfw設定を参照のこと。

### set these to your outside interface network and prefixlen and ip
oif="fxp1"
onet="2001:1:2:3::"
oprefixlen="64"
oip="2001:1:2:3::4"

### set these to your inside interface network and prefixlen and ip
iif="fxp0"
inet="2001:5:6:7::"
iprefixlen="64"
iip="2001:5:6:7::1"

### path to command "ip6fw"
fw6cmd="/sbin/ip6fw"

${fw6cmd} add pass all from ${iip} to any
${fw6cmd} add pass all from any to ${iip}
${fw6cmd} add pass all from ${oip} to any
${fw6cmd} add pass all from any to ${oip}

### Allow RA RS NS NA Redirect...
${fw6cmd} add pass ipv6-icmp from any to any

# Allow IP fragments to pass through
${fw6cmd} add pass all from any to any frag

# Allow RIPng
${fw6cmd} add pass udp from fe80::/10 521 to ff02::9 521
${fw6cmd} add pass udp from fe80::/10 521 to fe80::/10 521

### Allow TCP through if setup succeeded
${fw6cmd} add 60100 pass tcp from any to any established

# TCP reset notice message
${fw6cmd} add 60200 reset tcp from any to any 80
${fw6cmd} add 60300 reset tcp from any to any 443

ip6fwは、ipfwとは異なり転送を行うことができない。そこで、Opengateでは IPv6のHTTPリクエストがタイムアウトし、IPv4のHTTPリクエストを転送し、認証を行う仕組みをとっている。ただし、FreeBSD5.2以降では、ip6fwでTCP resetが実装されており、IPv6TCPパケットに対して到達不能メッセージを返すことが可能である。ルール番号60200,60300のように、TCP resetを利用することによって、IPv6 HTTPリクエストがタイムアウトするまでの時間を待つ必要がなくなる。

この例のスクリプトを、/etc/opengate/rc.firewall6.sampleとして用意している。そこでこれを/etc/opengate/rc.firewall6にコピーして変更後、/erc/rc.conf内のファイアウォール設定を以下のように変更する。この設定後は、ファイアウォールが原則閉鎖になるので注意する。

ipv6_firewall_script="/etc/opengate/rc.firewall6"

IPv6ではDHCPの代わりにRAによってIPv6アドレスを自動生成し、経路情報通知デーモンなど、ICMPやその他のプロトコルの扱いに気をつけなければならない。ipfwと同様に、ip6fwについても動作を熟知した上で、各種ネットワークに適したファイアウォールを設置することが望ましい。

back top

F.6 syslogの設定

SYSLOGによるログ記録を有効にするために、/etc/syslog.confに以下の設定を行う。

local1.*  /var/log/opengate.log
        ↑ ここはTABで区切ること。

設定と対応したログファイルを作る。このファイルは利用とともに大きくなるので適切なログ更新を設定する。

# touch /var/log/opengate.log
back top

F.7 動作確認

下流側ネットワークにPCをつないで、上流側のWebサイトをアクセスする。適切に動作しない場合、まずは、doc/progflow.html,doc/protocol.txtを見て、動作の関連を理解するとともに、ログファイル(Opengate, httpd, システムなど)を参照して欲しい。詳細なログを出すには、opengatesrv.conf内の<Debug>を1に設定する。また、関連ソフトウェアが独立で動作するかを確かめて欲しい。また、エラーチェックドキュメントerrcheck.htmlと質問回答qa.htmlも参考になるだろう。

# touch /var/log/opengate.log
back top

F.8 ページの修正

表示ページの内容を変更するときには、HTMLドキュメントディレクトリ中の該当HTMLファイルを修正する。これらのファイルはCGIを経由してブラウザに送られる。なお、httpkeep.html内のURLには相対パスは使えない。フルパスで指定することが必要である。%%XXX%%のような記述は変数であり、CGIにおいて適切な値に置き換えられる。

back top

G MRTGのインストール(Optional)

back top

G.1 MRTGのインストール

このインストールは任意である。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/
# make clean
# make install clean ; rehash
back top

G.2 MRTGの設定

MRTGのインストールが完了すると、/usr/local/etc/mrtg/以下に設定ファイルが用意されている。同ディレクトリに、opengate.cfgとして新たに設定ファイルを用意する。

##################################################
#  opengate user counter

WorkDir: /usr/home/user/public_html/mrtg/opengate/
Language: euc-jp

##### オプション
# growright: X軸の原点を左に integer: 整数表示 info: 3,4番目の出力の非表示
# gauge: 現在の値=入力値-前回の入力値をしない nopercent: パーセント非表示
Options[^]: growright,gauge,nopercent,integer

Target[opengate]:`/usr/home/user/bin/input.sh`
Title[opengate]: Opengate user counter

PageTop[opengate]: <h1>Opengate user counter</h1>
 <p>Opengate12 を利用している人数を表示しています。</p>

# 値の上限
MaxBytes[opengate]: 200
# 各グラフにおいて、グラフの上限を値の最大値でなく値の上限にする
#Unscaled[opengate]: ymwd

# グラフのY軸につくタイトル
YLegend[opengate]: Opengate User
# 値の単位
ShortLegend[opengate]: 人
# 値のタイトル LegendI: 1番目 LegendO: 2番目
LegendI[opengate]: IPv6 Users
LegendO[opengate]: Total Users

WorkDirに指定したディレクトリを作成する。同ディレクトリに、MRTGが各種HTMLファイルとグラフィックイメージを作成する。

Target[opengate]には、MRTGにデータを渡すためのプログラムを設置する。以下に詳細を説明する。

back top
F.2.1 Opengateサーバで監視する場合

以下にOpengateを導入したゲートウェイにおいて利用状況を監視する場合のシェルスクリプトを記す。

#!/bin/sh

#######################################
##
## shwo opengate status for MRTG
##
##   1 line : IPv6 Users
##   2 line : Total Users
##   3 line : uptime
##   4 line : comment for data
##
#######################################

LANG=C
COLUMNS=256

export LANG
export COLUMNS

### IPv6 prefix
prefix="2001:2f8:22:801:"

###opengateprocessname
process="opengatesrv.cgi"

###tmp file name
tmp_all="/tmp/og_count_all.tmp"
tmp_6="/tmp/og_count_6.tmp"

######################################################
ps ax | grep $process > $tmp_all 
COUNT = `wc-l $tmp_all | awk '{print $1}'`
grep $prefix $tmp_all >  $tmp_6
COUNT6=`wc -l $tmp_6 | awk '{print $1}'`
UPTIME=`uptime | awk '{print $3$4}' | sed -e "s/,//g"`

rm $tmp_all
rm $tmp_6

echo "$COUNT6"
echo "$COUNT"
echo "$UPTIME"
echo "Opengate User Counter"

さらに、このシェルスクリプトを単独で実行し、以下のようなデータが取得できていることを確認する。

5
48
10days
Opengate User Counter
back top
F.2.2 外部サーバで監視する場合

以下に外部サーバにおいて利用状況を監視する場合のシェルスクリプトを示す。

#!/bin/sh

#######################################
##
## input data for MRTG
##
##   1 line : IPv6 Users
##   2 line : Total Users
##   3 line : uptime
##   4 line : comment for data
##
#######################################

# tmp file name
file="/tmp/opengate.tmp"

# URL of output.sh at opengate
url="http://opengate.saga-u.ac.jp/cgi-bin/output.sh"

fetch -o $file $url &> /dev/null

more $file

さらに、監視するOpengateサーバにおいて、CGIが実行可能なディレクトリに次のようなシェルスクリプトを用意する。これを、上記のシェルスクリプトの"url"に指定する。

#!/bin/sh

#######################################
##
## shwo opengate status for MRTG
##
##   1 line : IPv6 Users
##   2 line : Total Users
##   3 line : uptime
##   4 line : comment for data
##
#######################################

LANG=C
COLUMNS=256

export LANG
export COLUMNS

### IPv6 prefix
prefix="2001:2f8:22:801:"

###opengate process name
process="opengatesrv.cgi" 

###tmp file name
tmp_all="/tmp/og_count_all.tmp"
tmp_6="/tmp/og_count_6.tmp"

######################################################

ps ax | grep $process > $tmp_all
COUNT =`wc-l $tmp_all | awk '{print $1}'`
grep $prefix $tmp_all >  $tmp_6
COUNT6=`wc -l $tmp_6 | awk '{print $1}'`
UPTIME=`uptime | awk '{print $3$4}' | sed -e "s/,//g"`
rm $tmp_all
rm $tmp_6

echo "Content-type: text/plain; charset=iso-8859-1"
echo

echo "$COUNT6"
echo "$COUNT"
echo "$UPTIME"
echo "Opengate User Counter"

Opengateサーバに、以上のシェルスクリプトを用意した後に、監視用の外部サーバにおいて、 input.shを単独で実行した際に、以下のようなデータが取得できていることを確認する。

5
48
10days
Opengate User Counter
back top

F.3 MRTGの起動確認

以上の設定が完了した後に、mrtgを実行することが可能か確認する。

# /usr/local/bin/mrtg /usr/local/etc/mrtg/opengate.cfg

以上を実行すると、1回目と2回目は様々なWARNINGが出力される。

mrtgを複数回実行し後に、WorkDirに指定したディレクトリに以下のファイルが生成されていれば成功である。

> ls -l
-rw-r--r--  1 root  wheel    538 12 14 04:40 mrtg-l.png
-rw-r--r--  1 root  wheel    414 12 14 04:40 mrtg-m.png
-rw-r--r--  1 root  wheel   1759 12 14 04:40 mrtg-r.png
-rw-r--r--  1 root  wheel   2941 12 20 15:15 opengate-day.png
-rw-r--r--  1 root  wheel   2146 12 20 14:35 opengate-month.png
-rw-r--r--  1 root  wheel   2867 12 20 14:55 opengate-week.png
-rw-r--r--  1 root  wheel   1897 12 20 05:00 opengate-year.png
-rw-r--r--  1 root  wheel   5961 12 20 15:15 opengate.html
-rw-r--r--  1 root  wheel  48786 12 20 15:15 opengate.log
-rw-r--r--  1 root  wheel  48784 12 20 15:10 opengate.old
back top

F.4 crontabへの登録

以上の設定が完了したのちに、mrtgをcrontabによって定期的に実行する。

/etc/crontabに次の行を追加する。

*/5 * * * * root /usr/local/bin/mrtg /usr/local/etc/mrtg/opengate.cfg

外部サーバにおいて、複数のOpengateを管理する場合は、設定ファイルを新たに作成する過程から行なう。

back top

H. rulechkのインストール(Optional)

このインストールは任意である。Opengateのプロセスが異常終了したとき、極めて稀にではあるが、ファイアウォールルールが消されずに残ることがある。 そのような状況に対応するスクリプトを、tools/rulechkに用意した。OpengateVer.1.3.1以降のフォーマットにのみ対応する。 このツールは、psコマンドから得られるOpengateプロセス一覧と、ファイアウォールから得られる許可ルール一覧を比較して、 余分なルールを削除するスクリプトである。 コンソールから実行するか、もしくは上記と同様にcron実行する。

back top