ゲートウェイマシンとして、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システムであっても問題なく利用できる。
Opengateのインストール手順を以下に示す。ただし、※は必須項目を示し、それ以外の手順は必要に応じて行なう。
FreeBSD 4.x,5.x,6.xのどれかをインストールする。後にカーネルを再構築する必要があるので、インストールするDistributionsを選択する際に、Developer(Full sources,binaries and doc)を選択しなければならない。
FreeBSDをインストールした後に、ゲートウェイとしての機能を有効にするために、/etc/rc.confに次の設定を記述する。もしくは、FreeBSDをインストールする際に、ゲートウェイとしての機能を有効にするか否かを問われるので、ここでゲートウェイの機能を有効にしても構わない。
gateway_enable="YES" |
ファイアウォール(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のネットワークはマニュアルで設定しなければならない。
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"とコマンドを入れる必要があるかもしれない。
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)以下のディレクトリに各種設定ファイルが生成される。
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 |
認証キーの作成に成功すると、次の二つのファイルが生成される。ただし、ファイル名に含まれる数字はランダムに生成される。
Krndc.+157+60849.key
Krndc.+157+60849.private
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を導入するネットワークのみにサービスを行うものである。しかし、設定ファイルのパーミッションに十分注意し、認証キーのファイルはサーバ上に保存せずに、削除もしくはプリントアウトして厳重に保存することが望ましい。
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ファイルを置くディレクトリは適当に作成する必要がある。
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 |
以上、全ての設定が完了した後に、起動確認を行う。
# /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サーバは管理が複雑であるため、この他の資料も参考にし、マニュアルを熟読した上で設定することが望ましい。
Opengateを導入するネットワークでは、利用者端末が頻繁に入れ替わることが予測できる。そこで、様々な利用者端末に対して自動的にIPv4アドレスを割り当てることができるDHCPサーバを導入することが望ましい。
以下にisc-dhcp3のインストール手順を記す。
# cd /usr/ports/net/isc-dhcp3-server # make clean # make install clean ; rehash |
インストール作業が完了すると、/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を記述する。
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" |
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 []: |
以下に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の設定を熟知した上で設定することが望ましい。
その他、/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> |
日本語が化ける場合には、文字セットの設定をコメントアウトする。
#AddDefaultCharset ISO-8859-1 |
Apache2の動作を確認する。SSLでのアクセスや存在しないファイルの要求にも対応できているかも確認する。
Opengateのパッケージを適当なディレクトリに展開する。パッケージには以下のディレクトリが含まれる。
doc:各種文書 conf:設定ファイル、ファイアウォールスクリプト javahtml:クライアントJava Applet、HTMLファイル opengatesrv:サーバCGIプログラム tools: 付加ツール ezxml: XMLパーサ (copyright Aaron Voisine) |
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 |
設定ファイル/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が設定されたときに実行される。
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} ### Stop http from softeather $fwcmd add deny tcp from 192.168.0.0:255.255.255.0 to ${oip} 80 $fwcmd add deny tcp from 192.168.0.0:255.255.255.0 to ${oip} 443 ### 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の動作を熟知した上、各種ネットワークに適したファイアウォールを設置することが望ましい。
これは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についても動作を熟知した上で、各種ネットワークに適したファイアウォールを設置することが望ましい。
SYSLOGによるログ記録を有効にするために、/etc/syslog.confに以下の設定を行う。
local1.* /var/log/opengate.log ↑ ここはTABで区切ること。 |
設定と対応したログファイルを作る。このファイルは利用とともに大きくなるので適切なログ更新を設定する。
# touch /var/log/opengate.log |
下流側ネットワークにPCをつないで、上流側のWebサイトをアクセスする。適切に動作しない場合、まずは、doc/progflow.html,doc/protocol.txtを見て、動作の関連を理解するとともに、ログファイル(Opengate, httpd, システムなど)を参照して欲しい。詳細なログを出すには、opengatesrv.conf内の<Debug>を1に設定する。また、関連ソフトウェアが独立で動作するかを確かめて欲しい。また、エラーチェックドキュメントerrcheck.htmlと質問回答qa.htmlも参考になるだろう。
# touch /var/log/opengate.log |
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 |
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にデータを渡すためのプログラムを設置する。以下に詳細を説明する。
以下に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 |
以下に外部サーバにおいて利用状況を監視する場合のシェルスクリプトを示す。
#!/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 |
以上の設定が完了した後に、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 |
以上の設定が完了したのちに、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実行する。