VirtualBoxを用いたOpengate/OpengateMの試用

目次

1 はじめに

Opengate/OpengateMを試す環境を構築するには、多くのマシン、NIC、ネットワークなどを組み合わせる必要があり、試してみるのが面倒である。 そこで、VirtualBoxを利用して、手元のPC1台の上に試用環境を構築する方法を示す。 またこの手順で構築した構築済み仮想マシンイメージを提供する。

物理マシン上への環境構築も同様の手順である。 ここで示した手順および構築済みイメージが、実際の運用環境構築の参考になるだろう。

structure

ここでは、左図の環境を構築する手順を示し、その後に右図の環境への変更方法を示す。 左図の環境は、新たなアドレス取得など外部環境の変更を必要とせずに、既存のPC1台で手軽に試せる。 さらに、もし複数のNICが利用できるPCであれば、右図のように物理端末を接続して試行することもできる。 この構築済みイメージを小規模の実運用に用いることも、推奨はしないが可能であろう。

2 構築済みアーカイブの提供

  • 下記のインストール手順で構築したゲートウェイ仮想マシンの仮想ドライブイメージを以下のダウンロードディレクトリ中に、 opengateYYYYMMDD-disk1.tgzとして置いている(YYYYMMDDは日付)。 これをダウンロードして解凍する。
    DOWNLOAD
  • VirtualBoxを起動して、ダウンロードしたvdiファイルを仮想ハードドライブとする仮想マシンを新規作成する。
      名前: opengate
      タイプ: BSD
      バージョン: FreeBSD(64bit)
      メモリサイズ: 512MB
      ドライブ: ダウンロードしたvdiファイルを指定
    
  • この仮想マシンは以下のユーザを登録している。
    userid password
    root pass-r
    user1 pass-1
    user2 pass-2
    user3 pass-3
  • 試行は、VirtualBox内に仮想ネットワークを作り、クライアント仮想マシンを接続して行う(5)。 PCが第2のNICを持つならば、VirtualBoxにそのNICを設定して、実際の物理マシンを接続して行うこともできる(9)。
  • クライアントマシンからWebブラウザで外部のURLへアクセスすると、Opengateの認証ページが提示される。 認証が通ればWebブラウザを閉じるまでネットワークを開放する。 また認証後に表示されるページにOpengateMの登録ページへのリンクがある。 OpengateMへ利用登録すると期限までパスワード入力無しで使える。
  • 認証は、ゲートウェイ仮想マシンで動作するFTPサーバで行っており、上記のユーザを認識する。 動作を確認できたら、FTPサーバは停止し、適切な認証方式を試すこと。認証設定は、Opengateは/etc/opengate/opengatesrv.confに、OpengateMは/etc/opengate/opengatemmng.confに記述がある。 POP3,LDAP,RADIUS,FTP,PAM,HttpBasic,Shibbolethをサポートする。
  • 提供システムでは、OpengateとOpengateMの両方が動いている。単独運用にするには、以下の方法を取る。
    • OpengateM単独運用: CaptivePortalページをOpengateからOpengateMに変更する。
    cd /usr/local/www/apache24/data
    cp index.html.var.opengatem index.html.var
    
    • Opengate単独運用: OpengateMのデーモンopengatemdを停止し、/etc/rc.conf内の自動起動記述をコメントアウトする。
    opengatemd -e   <= デーモンの終了
    --- /etc/rc.conf ---
    #opengatemd_enable="YES"
    
  • ドメイン名はopengate.example.comとなっている。 正規のドメイン名にしないと外部のメールサーバに拒否されることがある。 ドメイン名の変更には以下のファイルを編集する必要がある。 また修正後に、mailディレクトリでのmake installが必要であろう。
    /etc/rc.conf
    /etc/hosts
    /etc/mail/access
    /var/unbound/unbound.conf
    /usr/local/etc/dhcpd.conf
    /usr/local/etc/apache24/httpd.conf
    /etc/opengate/opengatesrv.conf
    /etc/opengate/opengatemmng.conf
    
  • ユーザuser1のホームにOpengate/OpengateMのプログラムソースが展開されている。 導入ソフトウェアのバージョンはログインして確認すること。

次の節からは、ゼロからシステムを構築する手順を示す。 構築のためのコマンドの多くは、rootユーザで実行する必要がある。

3 VirtualBoxのインストール

VirtualBoxのダウンロードサイトからホストOSに対応するバイナリを入手してインストールする。 インストール手順は単純である。詳細は他サイトを参照のこと。 ここでは、VirtualBox-4.3.28-100309-Win.exeを使った。

4 ゲートウェイ仮想マシンの作成

Opengate/OpengateMが稼働するゲートウェイ仮想マシンを作成して基本的な設定を行う。

4.1 FreeBSDのインストール

  • FreeBSDのダウンロードサイトからファイルを入手する。 ここではFreeBSD-10.1-RELEASE-amd64-disc1.isoを使った。
  • VirtualBoxを起動する。「新規」を選択し、以下の構成でFreeBSD用の仮想マシンを作成する。
      名前:opengate
      タイプ: BSD
      バージョン: FreeBSD(64bit)
      メモリサイズ:512MB
      ドライブ:仮想ハードドライブ作成、VDI、可変サイズ、10GB
    
  • 「起動」を選択し、「起動ハードディスク」にダウンロードしたISOファイルを指定して起動する (右端のフォルダーアイコンをクリックすると選択できる)。 マウスをゲスト環境からホスト環境へ切り替えるにはホストキーRight-Controlを使う。
  • 指示に従い、以下の例を参考にしてインストールする。
    Installation or live CD > Install
    Keymap > Japanese106 > Continue
    Hostname > opengate
    Partitioning > Auto(UFS) > Entire Disk > Finish > Commit
    Archive Extraction
    Root Password > pass-r
    Network Conf > em0 > IPv4=Yes > DHCP=Yes > IPv6=Yes
    local or UTC > No
    Time Zone > Asia > Japan > JST=Yes
    System Configuration > Default
    Add User > yes
    user > user1
    Final Config > Exit > Manual=No > Reboot
    
  • 仮想マシンの電源を落とし、ISOファイルを外す。
      設定 > ストレージ > FreeBSDxxxx.iso > 右クリック > 割当て除去
    
  • 以下の変更を行ってから「起動」する。
      設定 > ネットワーク > アダプタ1 > 割り当て=NAT
      設定 > ネットワーク > アダプタ2 > ネットワークアダプターを有効化 > 割り当て=内部ネットワーク
    
  • rootでログインして、em0,em1が作成されていることと、外部ネットワークが通じていることを確認する。
    ifconfig
    ping www.osdn.jp
    

    ただしホストOSとの間の通信はできない。 ホストOSとの間の通信が必要ならば、ネットワークアダプタ3を「ホストオンリーアダプター」として別に作成する。

4.2 ルータの設定

  • /etc/rc.confにおいて、内部ネットワークにつながるem1の固定アドレス192.168.10.1を設定する。 さらにルーティングとファイアウォール(全開放)、NATを設定する。
    --- /etc/rc.conf ---
    ifconfig_em1="inet 192.168.10.1 netmask 255.255.255.0"
    gateway_enable="YES"
    firewall_enable="YES"
    firewall_type="OPEN"
    natd_enable="YES"
    natd_interface="em0"
    
  • 再起動した後に、em0,em1のIPアドレスを確認する。
    reboot
    ifconfig
    

4.3 DNSの設定

  • FreeBSD10標準のunboundを使ってDNSキャッシュサーバを設定するために、/etc/rc.confに以下を記述する。
    --- /etc/rc.conf ---
    local_unbound_enable="YES"
    
  • 以下のコマンドを実行すると自動設定が行われる。
    service local_unbound start
    
  • 自動設定されたファイルを確認する。
    /var/unbound/forward.conf
    /var/unbound/lan-zones.conf
    /var/unbound/unbound.conf
    /etc/resolvconf.conf
    /etc/resolv.conf
    
  • /var/unbound/unbound.confに以下の設定を加えて(server:セクションの末尾)、再起動する。
    --- /var/unbound/unbound.conf ---
    interface: 127.0.0.1
    interface: 192.168.10.1
    access-control: 127.0.0.1/32 allow
    access-control: 192.168.10.0/24 allow
    local-data: "opengate.example.com. IN A 192.168.10.1" 
    local-data-ptr: "192.168.10.1 opengate.example.com."
    

4.4 DHCPサーバのインストール

  • pkgシステムを利用してインストールする。pkgの初期設定がまだならば以下を実行する。
    pkg update
    
  • pkgシステムでDHCPパッケージを探して、インストールする。パッケージ名は新しいものを指定する。
    pkg search dhcp
    pkg install isc-dhcp43-server
    
  • 表示されるメッセージに従い、/etc/rc.confに追加する。 ifacesにはDHCP配布のインタフェースを指定する。
    --- /etc/rc.conf ---
    dhcpd_enable="YES"
    dhcpd_flags="-q"
    dhcpd_conf="/usr/local/etc/dhcpd.conf"
    dhcpd_ifaces="em1"
    dhcpd_withumask="022"
    dhcpd_withuser="dhcpd"
    dhcpd_withgroup="dhcpd"
    
  • 設定ファイル/usr/local/etc/dhcpd.confを下記のように修正する。 他の項目は必要に応じて削除・修正する (修正失敗時はdhcpd.conf.exampleをコピーする)。
    --- /usr/local/etc/dhcpd.conf ---
    option domain-name "example.com";
    option domain-name-servers 192.168.10.1;
    
    default-lease-time 600;
    max-lease-time 7200;
    log-facility local7;
    
    subnet 192.168.10.0 netmask 255.255.255.0 {
            range 192.168.10.2 192.168.10.254;
            option routers 192.168.10.1;
            option broadcast-address 192.168.10.255;
    }
    

これでゲートウェイ仮想マシンの基本設定を終わったので再起動を確認して電源を切る。

5 クライアント仮想マシンによるテスト

  • VirtualBox上の内部ネットワークにつながるクライアント仮想マシンを新規に作成する。 OSはVirtualBox対応のものとする。
  • ここではPC-BSDのVirtualBox用vdiファイル、PCBSD10.1.2-x64-consumer-desktop.vdiを使ったが、他のOSでも良い。
  • VirtualBoxを起動する。「新規」を選択し、以下の構成で仮想マシンを作成する。
  名前:client1
  タイプ: BSD
  バージョン: FreeBSD(64bit)
  メモリサイズ:1024MB
  ドライブ:ダウンロードしたvdiファイルを指定
  • 標準設定では外部ネットワークへNAT接続されるので、pingやWebブラウザ等で外部ネットワークへの通信ができることを確認する。
  • 成功したら、VirtualBoxの設定で内部ネットワークに接続するマシンに変更する。
      設定 > ネットワーク > アダプター > 割り当て=内部ネットワーク
    
  • クライアント仮想マシンから、外部への通信ができることをpingやWebブラウザ等を使って確認する。 Opengate/OpengateM導入済みのゲートウェイの場合は、pingは通らず、Webアクセスには認証ページが返される。 導入前のゲートウェイであれば、普通に通信ができるはずである。
  • 通信できない場合は以下を確認せよ。Opengate/OpengateM導入済みの場合は、(10)も参照せよ。
    • 当然ながらゲートウェイ仮想マシンが稼働していないと通信できない。 またゲートウェイ仮想マシンを先に起動して、次にクライアント仮想マシンを起動することが必要である。
    • クライアント仮想マシンのネットワーク設定が正しいかをifconfig等で確認する。
      IPアドレス=192.168.10.2
      default router=192.168.10.1
      subnet mask=255.255.255.0
      
    • これらのネットワーク設定の値がおかしい場合はDHCPのミスであろう。
      • クライアント仮想マシンの設定とゲートウェイ仮想マシンの設定を確認せよ。
      • ゲートウェイ仮想マシンでDHCPを開始して表示されるエラーを確認して対処せよ。
        /usr/local/etc/rc.d/isc-dhcpd start
        
      • dhcpdの正常起動が確認されたら、クライアント仮想マシンを再起動するなどして情報を再取得せよ。
    • 上記が正常の場合、ゲートウェイの内部ネットワーク側IPアドレスを指定したpingは応答するか。 反応しないときは、VirtualBoxとFreeBSDのネットワーク設定を見直せ。
      ping 192.168.10.1
      
    • 上記が正常の場合、ゲートウェイを超えた外部ネットワークのIPアドレスを指定したpingは応答するか。 反応しないときはルータ設定を見直せ。 なおpingに応答しないアドレスも存在する。ホストOS上からpingが届くアドレスを指定せよ。
      ping 202.221.179.11
      
    • 上記が正常の場合、外部ネットワークのドメイン名を指定したpingは応答するか。 反応しないときはDNSの設定を見直せ。
      ping www.osdn.jp
      

6 稼働に必要なパッケージのインストール

Opengate/OpengateMの稼働に必要なソフトウェアを、ゲートウェイ仮想マシンにインストールする。

6.1 Apacheのインストール

  • 以下のコマンドでApacheのパッケージを探してゲートウェイ仮想マシンにインストールする。
    pkg search apache
    pkg install apache24
    
  • 以下のコマンドでApacheを起動する。
    service apache24 onestart
    
  • 先に作成したクライアント仮想マシンからゲートウェイ仮想マシン(192.168.10.1)にWebアクセスを行い、応答があることを確認する。
  • /etc/rc.confにApacheの自動起動を追加する。
    --- /etc/rc.conf ---
    apache24_enable="YES"
    
  • 必要に応じて、設定ファイル/usr/local/etc/apache24/httpd.confを編集する。 ServerNameはインストール時に与えた名前(opengate.example.com)とする。
    --- /usr/local/etc/apache24/httpd.conf ---
    ServerName opengate.example.com:80
    
  • 以下の手順でApache SSL(自己証明)の設定を行う。 正規の証明書の導入手順は他のサイトを参照のこと。
    • 秘密鍵server.key、CSRファイルserver.csr、サーバ証明書server.crtを作成する。
      cd /usr/local/etc/apache24
      openssl genrsa 2048 > server.key
      openssl req -new -key server.key > server.csr
      openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt
      
    • Apacheの設定ファイル/usr/local/etc/apache24/httpd.confを修正する (以下の行頭の#を削除する)。
      --- /usr/local/etc/apache24/httpd.conf ---
      LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
      LoadModule socache_dbm_module libexec/apache24/mod_socache_dbm.so
      LoadModule socache_memcache_module libexec/apache24/mod_socache_memcache.so
      LoadModule ssl_module libexec/apache24/mod_ssl.so
      
      Include etc/apache24/extra/httpd-ssl.conf
      
    • ApacheのSSL設定ファイル/usr/local/etc/apache24/extra/httpd-ssl.confを修正する。
      --- /usr/local/etc/apache24/httpd-ssl.conf ---
      <VirtualHost _default_:443>
      DocumentRoot "/usr/local/www/apache24/data"
      ServerName opengate.example.com:443
      ServerAdmin you@example.com
      
      SSLCertificateFile "/usr/local/etc/apache24/server.crt"
      SSLCertificateKeyFile "/usr/local/etc/apache24/server.key"
      
  • Apacheを再起動して、クライアント仮想マシンからSSL付き/無しのWebアクセスができることを確認する。
    service apache24 restart
    

6.2 PHPのインストール

  • pkgを使って、PHPとmod_phpのインストールを行う。
    pkg search php
    pkg install php5
    pkg install mod_php5
    
  • php.iniを設定する。 /usr/local/etc/にphp.ini-developmentとphp.ini-productionがある。 どちらかをコピーしてphp.iniを作る。
    cd /usr/local/etc
    cp php.ini-development php.ini
    
  • /usr/local/etc/php.iniにtimezone設定をする。
    --- /usr/local/etc/php.ini ---
    [Date]
    date.timezone = "Asia/Tokyo"
    
  • PHPの起動を確認する。
    php -r "echo test;"
    
  • Apacheの設定ファイル/usr/local/etc/apache24/httpd.confを、PHP連携できるように修正して、Apacheを再起動する。
    --- /usr/local/etc/apache24/httpd.conf ---
    LoadModule php5_module  libexec/apache24/libphp5.so
    
    <IfModule mime_module>
      AddType text/html .php
    </IfModule>
    
    <FilesMatch "\.php$">
      SetHandler application/x-httpd-php
    </FilesMatch>
    
  • 以下のファイルをApacheのDocumentRootに置き、ブラウザでアクセスして確認する。確認後は削除すること。
    --- DocumentRoot/phpinfo.php ---
    <?php phpinfo(); ?>
    

6.3 MySQLのインストール

  • pkgを使って、MySQLクライアント機能を追加する。 ローカルでDBサーバ運用も行うならMySQLのサーバ機能も追加する。 OpengateMが不要ならこの節をスキップして良い。 OpengateはMySQLを使用しない。
    pkg search mysql
    pkg install mysqlxx-server
    pkg install mysqlxx-client
    
  • /etc/rc.confにMySQLサーバを有効にする。
    --- /etc/rc.conf ---
    mysql_enable="YES"
    
  • MySQLの初期設定をする。
    /usr/local/etc/rc.d/mysql-server onestart
    
  • MySQLの起動を確認する。
    mysql
    mysql> quit
    

6.4 SQLite3のインストール

  • pkgを使って、SQLite3のインストールを行う。
    pkg search sqlite3
    pkg install sqlite3
    
  • SQLite3の起動を確認する。
    sqlite3
    sqlite> .quit
    

以上で標準的なゲートウェイの設定が終わった。 問題を切り分けるために、各パッケージの正常動作を確認できてから、Opengateによる制御を組み込むことを推奨する。 Opengateは通信を邪魔する存在なので、不安定環境に入れると、デバッグが難しくなる。

7 Opengateのインストール

OpengateとOpengateMは併用することも単独使用することも可能である。 OpengateMのみを使用する場合はこの節をスキップする。

7.1 Opengateソースアーカイブの取得とインストール

  • Opengateのソースアーカイブを取得する。 ここではテキストWebブラウザlynxを使って取得している。 リスト先頭の最新アーカイブを利用することを薦める。
    pkg search lynx
    pkg install lynx
    lynx http://opengate.osdn.jp/download
    
  • 作業ディレクトリ/home/user1に移動して、Opengateのソースアーカイブを展開する。
    mv opengatexxx.tar.gz /home/user1
    cd /home/user1
    tar xzvf opengatexxx.tar.gz
    
  • ソースアーカイブには以下のディレクトリが含まれる。
    ディレクトリ 説明
    conf 設定ファイル、ファイアウォールスクリプト
    doc 各種文書
    ezxml XMLパーサ (copyright Aaron Voisine)
    javahtml クライアントプログラム、HTMLファイル
    opengatesrv サーバCGIプログラム
    tools 付加ツール
  • 展開したファイル中のopengatexxxx/opengatesrv/Makefileを確認する。 もしファイル中のWWWDIRの記述が、実際のApacheの配置位置と異なっていれば変更する (例えば、apache22からapache24に変更する)。
    --- Makefile ---
    WWWTOP = /usr/local/www/apache24
    
  • コンパイルとインストールをopengatexxxx/opengatesrvディレクトリにおいて行う。
    cd opengatexxx/opengatesrv
    make clean
    make install
    

7.2 Opengate設定ファイルの編集

  • Opengateをインストールすると、設定ファイル /etc/opengate/opengatesrv.conf.sampleが作成されているので、これを /etc/opengate/opengtesrv.confにコピーして変更を加える。
    cd /etc/opengate
    cp opengatesrv.conf.sample opengatesrv.conf
    vi opengatesrv.conf
    
  • 必須の変更箇所は以下の部分である。
    --- /etc/opengate/opengtesrv.conf ---
    <OpengateServerName>opengate.example.com</OpengateServerName>
    
    <AuthServer>
        <Protocol>pop3s</Protocol>
        <Address>192.168.0.2</Address>
    </AuthServer>
    
  • <OpengateServerName>には、サーバのHOSTNAME(FQDN)もしくはIPアドレスを記す。 ここでは、opengate.example.comに変更する。 IPv6機能を使うときには、IPv4とIPv6の両方が登録されたFQDNとする必要がある。
  • <AuthServer>には、認証サーバの設定を記す。各種プロトコルをサポートしているが、詳細は設定ファイルを参照のこと。 Opengateサーバと認証サーバの問題を切り分けるために、最初は以下の「全て許可」を試行すると分かりやすい。
    --- /etc/opengate/opengatesrv.conf ---
    <AuthServer>
        <Protocol>accept</Protocol>   <!-- ****運用では用いないこと**** -->
    </AuthServer>
    
  • 設定ファイルはXML形式である。コメントは以下のように書く。 #マークはコメントを意味しない。
    <!-- Comment String -->
    
  • Opengateは"userid@extid"のパターンによって認証を切り替えることができる。 これにより、部門別ユーザや外部ユーザに対する認証を分離できる。 詳細は設定ファイルを参照の事。
  • Opengateは、最初の認証サーバが返答しない時、次のサーバへ問い合わせる設定ができる。 詳細は設定ファイルを参照の事。
  • 不要の場合もIPv6関連の設定を削除しないこと。

7.3 Apacheの設定

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

  • Opengateでは、利用者端末から送信されてくるHTTPリクエストを、 ゲートウェイ上のWebサーバに転送することによって、認証ページを提供している。 存在しないファイルに対するHTTPリクエストに対しても、認証ページを返すために、 HTTP_ERROR 404(File Not Found)が発生した場合に、DocumentRootを返すように設定する。
    --- /usr/local/etc/apache24/httpd.conf ---
    ErrorDocument 404 /
    
  • cgi-binディレクトリでのCGI稼働を許可する。 また、mod_cgiのロードを有効にする(コメントを外す)。
    --- /usr/local/etc/apache24/httpd.conf ---
    <Directory "/usr/local/www/cgi-bin">
     ...
      Options ExecCGI
     ...
    </Directory>
    
    LoadModule cgid_module libexec/apache24/mod_cgid.so
    LoadModule cgi_module libexec/apache24/mod_cgi.so
    
  • 拡張子cgi、varのハンドラを有効にする。 また、mod_negotiationのロードを有効にする(コメントを外す)。
    --- /usr/local/etc/apache24/httpd.conf ---
    AddHandler cgi-script .cgi
    AddHandler type-map .var
    
    LoadModule negotiation_module libexec/apache24/mod_negotiation.so
    
  • index.html.varをDirectoryIndexに追加する。
    --- httpd.conf ---
    DirectoryIndex index.html.var index.html
    
  • 日本語が化ける場合には、文字セットの設定をコメントアウトする。
    --- /usr/local/etc/apache24/httpd.conf ---
    #AddDefaultCharset ISO-8859-1
    
  • もし"Failed to enable the 'httpready' Accept Filter"のメッセージが出た時は、 /boot/loader.confに以下を記述する。
    --- /boot/loader.conf ---
    accf_http_load="YES"
    

7.4 ipfwの設定

  • Opengateの動作のためには、適切にファイアウォールのルールを記述しなければならない。 IPv4/IPv6の両者をipfwシステムで制御する。Opengateを導入する際には、 ipfwの動作を熟知した上、運用するネットワークに適したファイアウォールを設置することが望ましい。
  • Opengateは、認証を通過した端末に対して、許可ルール(番号:10000-40000)を追加する。 また、Defaultルールとして、優先度の低い位置(番号:60000)に、Webパケットに対するフォワードルールが設定されている。 よって、許可ルールにマッチしたパケットはゲートウェイを通過し、マッチしないWebパケットは認証ページへ誘導される。 それ以外は拒否される。
  • Opengateで使うファイアウォールのルール設定のスクリプト例を、 "/etc/opengate/rc.firewall.sample"に用意している。これを "/etc/opengate/rc.firewall"にコピーして、IPアドレス等を修正する。 oxxxにはインターネット接続ネットワークを、ixxxは端末接続ネットワークを設定する。 下に設定例を示す。 IPv6を使わない場合は、 IPv6にはlocalhost(onet6=inet6="0", oip6=iip6="::1")を設定する。
    cd /etc/opengate
    cp rc.firewall.sample rc.firewall
    
    --- /etc/opengate/rc.firewall ---
    oif="em0"
    onet="10.0.2.0"
    omask="255.255.255.0"
    oip="10.0.2.15"
    onet6="0"
    oprefixlen6="64"
    iif="em1"
    inet="192.168.10.0"
    imask="255.255.255.0"
    iip="192.168.10.1"
    inet6="0"
    iprefixlen6="64"
    iip6="::1"
    
  • /etc/rc.conf内のファイアウォール設定を以下のように変更する。 この設定後は、ファイアウォールが原則閉鎖になるので注意する。 原則開放に戻すには、firewall_type行のコメント(#)を外して、firewall_script行にコメントを付ける。
    --- /etc/rc.conf ---
    firewall_enable="YES"
    #firewall_type="OPEN"
    firewall_script="/etc/opengate/rc.firewall"
    
  • /etc/opengateには、もう一つのファイルipfwctrl.pl.sampleがある。 これはipfw制御のperlスクリプトであるが通常は使用しない。 ほとんどの制御はipfwルールの組み合わせで調整できるはずである。 どうしても無理な場合に利用を検討して欲しい。

7.5 syslogの設定

  • syslogによるログ記録を有効にするために、/etc/syslog.confに以下の設定を行う。
    --- /etc/syslog.conf ---
    local1.* /var/log/opengate.log
           ↑ ここはTABで区切ること。
    
  • 設定と対応したログファイルを作る。このファイルは利用とともに大きくなるので適切なログ更新を設定すること。
    touch /var/log/opengate.log
    

7.6 動作確認

  • 設定を生かすために再起動する。 下流側ネットワーク上のクライアント仮想マシンから、上流側のWebサイトをアクセスすると、認証ページが表示される。 認証が成功すると黄色のバーが表示されたWebページが表示される。 このページが開いている間はネットワークは開いている。このページを閉じるとネットワークが閉じる。
  • 適切に動作しない場合、(10)を参照すること。 また、Opengateのホームページも参考になるだろう。

7.7 ページの修正

  • 表示ページの内容を変更するときには、DocumentRoot下のopengateディレクトリにあるファイルを修正する。 これらのファイルはテンプレートである。 CGIは、ファイル中の%%XXX%%のような記述を書き換えてから、ブラウザに送る。 なお、httpkeep.html内のURL記述に相対パスは使えない。 フルパスで指定することが必要である。

7.8 SQLite3の設定

  • Opengateはセッション情報を保持するためにSQLite3データベースを利用する。 データベースファイルの位置は、 opengatesrv.conf中の、<SqliteDb>で指定する。 適切なディレクトリ内に変えることが望ましい。 そのディレクトリには、WWWからの書き込み許可を与える必要がある。
    --- /etc/opengate/opengatesrv.conf ---
    <SqliteDb>/home/sqlitedb/opengate.db</SqliteDb>
    --- shell commands ---
    mkdir /home/sqlitedb
    chown www /home/sqlitedb
    
  • データベースファイルおよびテーブルの作成は自動的に行われる。 ファイル容量は徐々に増加するため、cron(もしくは手作業)でファイル圧縮(もしくは削除)を定期的に行う必要がある。 以下は閉鎖から3日以上経過したレコードを削除するスクリプトの例である。
    #!/bin/sh
    echo "delete from session where closeTime < datetime('now','localtime','-3days');" | sqlite3 /tmp/opengate.db
    exit 0
    

7.9 rulechkのインストール

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

8 OpengateMのインストール

OpengateMが不要ならばこの節をスキップする。

  • OpengateMは以下のようなデーモンおよび管理プログラム群から構成される。
    プログラム名 説明 設置場所
    opengatemd パケット監視デーモン 全てのゲートウェイ
    opengatemown/fwd.cgi Web端末用登録ページ 全てのゲートウェイ
    opengatemchk/reg.cgi 非Web端末用登録ページ 管理部署のゲートウェイ
    opengatemup.cgi 登録更新ページ 管理サーバ
    opengatemmail 警告メール送信プログラム 管理サーバ
    MySQL 管理データベース 管理サーバ
  • 端末の登録と更新はWebブラウザを使って利用者本人が行う。
  • Webブラウザを持たない端末は管理者が介在して登録する。 管理者が登録業務を負担できない場合は、非Web端末をサービスから除外する(この場合はopengatemchk/reg.cgiは不要である)。
  • 各プログラムの設置場所は表の通りであるが、ここでは全てを一つのマシン上に導入するものとして説明する。

8.1 OpengateMソースアーカイブの取得

  • OpengateMのソースアーカイブを取得する。 ここではテキストWebブラウザlynxを使って取得している。 リストの先頭の最新アーカイブを利用することを薦める。
    pkg search lynx
    pkg install lynx
    lynx http://opengatem.osdn.jp/download
    
  • 作業ディレクトリ/home/user1に移動して、OpengateMのソースアーカイブを展開する。
    mv opengatemxxx.tar.gz /home/user1
    cd /home/user1
    tar xzvf opengatemxxx.tar.gz
    
  • ソースアーカイブには以下のディレクトリが含まれる。
    ディレクトリ 説明
    conf 設定ファイル、ファイアウォールスクリプト
    doc 各種文書
    ezxml XMLパーサ (copyright Aaron Voisine)
    html HTMLファイル
    mdsrc デーモンプログラムソースファイル
    mngsrc 管理用プログラムソースファイル
    phpsrc PHPによる付加的プログラム
    rc.d 自動起動設定
    sqlscript MySQLスクリプト

8.2 デーモンプロセスOpengateMdのインストール

  • OpengateMのアーカイブディレクトリ中のmdsrcからインストールする。
    cd opengatemxxx/mdsrc
    make install
    
  • opengatemdが稼働中であるとインストールに失敗する。この場合には、以下のように、一時的に停止してインストールする。
    opengatemd -s <=一時停止
    make install  <=インストール
    opengatemd    <=再稼働
    
  • Defaultでは以下の場所に実行ファイルと設定ファイルサンプル、起動スクリプトが追加される。
    /usr/local/bin/opengatemd   <=実行ファイル
    /etc/opengate/opengatemd.conf.sample  <=設定ファイルサンプル
    /etc/rc.d/opengatemd   <=起動スクリプト
    
  • 設定ファイルサンプルをコピーしてOpengateMdの設定ファイルopengatemd.confを作成し、 環境に合わせて調整する。 変更の必要があるのは、MySQLとの接続設定 (MySqlDb/Server, User,Password)、 Pcapのキャプチャデバイス設定(Pcap/Device)である。 詳細は設定ファイルを参照のこと。
    cd /etc/opengate
    cp opengatemd.conf.sample opengatemd.conf
    
    --- /etc/opengate/opengatemd.conf ---
    <MysqlDb>
      <Server>localhost</Server>
      <User>root</User>
      <Password></Password>
      ...
    </MysqlDb>
    
    <Pcap>
      <Device>em1</Device>
      ...
    </Pcap>
    
  • Layer2でのipfwを有効にするために、/etc/sysctl.confに以下を設定する。
    --- /etc/sysctl.conf ---
    net.link.ether.ipfw=1
    

8.3 管理プログラム群のインストール

  • OpengateMのソースアーカイブディレクトリmngsrcからインストールする。 なおMakefile中のWWWTOPなどが実際の位置と異なっていれば修正する。
    cd opengatemxxx/mngsrc
    make install
    

    個別にインストールするときは以下のようにする。

    cd opengatemxxx/mngsrc
    make installmreg  <=opengatemchk/reg.cgi
    make installmup   <=opengatemup.cgi, opengatemmail
    make installmown  <=opengatemown/fwd.cgi
    
  • 設定ファイルサンプル/etc/opengate/opengatemmng.conf.sampleをコピーして設定ファイルを作成し、 環境に合わせて調整する。
    cd /etc/opengate
    cp opengatemmng.conf.sample opengatemmng.conf
    

    少なくとも<Device>(ネットワークインターフェース名)、<MySqlDb>(MySQL設定)、<AuthServer>(認証方法)を変更する必要がある。 また、<DocumentRoot>(Apache Documentのディレクトリ位置)が間違っていれば修正すること。 下記の設定例では、「ネットワークインターフェース名はem1」に、「MySqlはローカル・パスワードなし設定」に、 「管理者認証と一般利用者認証は共にPOP3S」に設定している。 また管理者はuser1,user2の2人のみを認めるように設定している。

    --- /etc/opengate/opengatemmng.conf ---
    <Device>em1</Device>
    
     <MySqlDb>
      <Server>localhost</Server>
      <User>root</User>
      <Password></Password>
      <Database>opengatem</Database>
     </MySqlDb>
    
     <AuthServer>
      <UserType>admin</UserType>
      <Protocol>pop3s</Protocol>
      <Address>192.168.10.1</Address>
      <AcceptUsers>user1 user2</AcceptUsers>
     </AuthServer>
    
     <AuthServer>
      <Protocol>pop3s</Protocol>
      <Address>192.168.10.1</Address>
      <MailDomain>opengate.example.com</MailDomain>
     </AuthServer>
    
  • 最初は、以下のように両認証ともに「全て許容」の設定をして、システムの正常な動きを確認してから制限した方が分かりやすい。
    <Protocol>accept</Protocol>
    
  • 認証は「管理者認証」と、「一般利用者認証」のそれぞれについて、独立に方式を設定する。 ただし非Web端末のサービスをしないときは、「管理者認証」は不要である。 POP3、 FTP、LADIUS、LDAP、PAM、Shibboleth、HttpBasicに対応する。 管理者と一般利用者の両認証には同一のサーバ/方式を設定して良い (HttpBasicとShibbolethを除く)。
  • MailDomainは、警告メールのDefaultドメイン名である。登録時のDefaultメールアドレスはこれとUserIDから作る。 Shibboleth認証では、UidAttributeとMailAttributeにShibbolethの環境変数名を設定する。
  • 認証方式にHttpBasicまたはShibbolethを用いる場合は、対応ディレクトリの.htaccessに以下の対応記述を追加する。 また、httpd.confでAllowOverrideとRequireを変更する必要がある。 他の認証方式の場合は記述不要である。
    --- .htaccess ---
    <FILES opengatemchk.cgi>
    AuthType Basic
    AuthUserFile /tmp/passwd.dat
    AuthName "Admin"
    Require valid-user
    </FILES>
    
    <FILES opengatemreg.cgi opengatemown.cgi opengatemup.cgi>
    AuthType shibboleth
    ShibRequestSetting requireSession 1
    ShibRequireSession On
    ShibUseHeaders On
    Require valid-user
    </FILES>
    
  • HttpBasicは管理者認証と一般利用者認証の両者で同時に使用することはできない。 同じくShibbolethも両者で使用できない。

8.4 MySQLデータベースの設定

  • 「必要テーブル群の作成」をインストール後に1度だけ実行する。
    cd opengatemxxx/sqlscript
    mysql < createtablescript
    
  • 「NICベンダーテーブルの作成・更新」をインストール後に1度だけ実行する (非Web端末のサービスを行わないならば不要である)。 NICベンダーリストoui.txtをIEEEのサイトからダウンロードしてPHPプログラムと同じディレクトリに置く。 次に、PHPプログラムupdatevendortable.phpを使い、ファイルoui.txtのデータをMySQLテーブルに格納する (IEEEのサイトから直接にMySQLテーブルに格納できるが、トラブル時に問題を切り分けるため上記の方法を取った)。
    cd opengatemxxx/phpsrc
    fetch http://standards.ieee.org/develop/regauth/oui/oui.txt
    php < updatevendortable.php
    
  • 利用者端末のMACアドレス登録は、利用者自身が利用時に行うことが基本である。 しかし、大量にバッチ登録したい場合を想定してスクリプトを用意した。 以下のように実行する。通常は不要である。
    cd opengatemxxx/sqlscript
    vi insertmacscript
    mysql < insertmacscript
    

8.5 Apache、ipfw、syslogの設定

  • Opengateのインストールをスキップした場合は、ここでOpengateの節に記述した Apache、ipfw、syslogの設定を行う。

8.6 デーモンの起動

  • デーモンを起動し、ゲートウェイ下流に接続した端末でアクセスして試す。 起動はルートユーザで「opengatemd」とコマンド入力する。 デーモン起動後は、許可された端末からのアクセスはゲートウェイを通過する。 そうでない場合は、Webアクセスに対して認証が要求され、その後に登録または更新ページが表示される。

    デーモンの操作は以下の通りである。

    コマンド 意味
    opengatemd 起動
    opengatemd -e 終了(開放状態を全て閉鎖してから終了)
    opengatemd -s 一時停止(開放状態をそのままにして終了)
    opengatemd -r 再起動(動作中のデーモンをリセット)
    opengatemd -c コンソールモード(シェル上で動作)
  • システム起動時にデーモンを自動起動するには、/etc/rc.confに以下の行を追加する。
    --- /etc/rc.conf ---
    opengatemd_enable="YES"
    
  • 一日に一度の再起動を行うには、以下の内容を/etc/crontabに追加する(この例では毎朝3時48分に再起動する)。 もしくは、/etc/periodic/dailyディレクトリに、コマンドを実行するファイルを用意する。
    --- /etc/crontab ---
    48      3       *       *       *       root    /usr/local/bin/opengatemd -r
    

8.7 期限警告メールの発信設定

  • テストのために、opengatemxxx/sqlscript/insertmacscriptを修正して、期限日が翌日である端末を登録する。
    --- insertmacscript ---
    insert into opengatem.macaddrs values(
          '01:23:45:67:89:ab',
          'A',
          'iPad2',
          'user1',
          '',
          'user1@opengate.example.com', <= 利用者のメールアドレス
          now(),
          now(),
          adddate(now(), interval 1 day)); <= 期限日が明日
    -----------------------
    mysql < insertmacscript
    
  • 警告メールのサンプルは、/etc/opengate/warningmail.sampleにある。 これを/etc/opengate/warningmailにコピーして編集する。 %%DEVICENAME%%と%%LIMITDATE%%はプログラムopengatemmailが適切な値に書き換える。
  • opengatemmailをルート権限で実行すれば、警告メールが届く。 おかしい場合はopengate.logやmaillog等を確認する。 送信アドレスが正規なドメイン名でないときは、外部メールサーバで拒否されることがある。 上のサンプルでは内部メールサーバに送っている。
  • 警告メールの送信時期、利用期間の長さなどは設定ファイル/etc/opengate/opengatemmng.confで設定できる。
  • 警告メールの送信をcron起動するため、以下の内容を/etc/crontabに追加する。 以下は、毎日07:46に利用期限をチェックして、期限が近付いた利用者に警告メールを送る設定である。 もしくは、/etc /periodic/dailyディレクトリに、コマンドを実行するファイルを用意する。 なお、ゲートウェイ・管理サーバを複数運用している場合には、そのうちの単一サイトにのみ設定すること。 複数サイトに行うと複数のメールが届くことになる。
    --- crontab ---
    46      7       *       *       *       root    /usr/local/bin/opengatemmail
    

8.8 CGIリンクの設置

  • CGIの動作を、内部ネットワークのクライアントからWebアクセスして確認する。
    http://opengate.example.com/cgi-bin/opengate/opengatemown.cgi
    http://opengate.example.com/cgi-bin/opengate/opengatemup.cgi
    http://opengate.example.com/cgi-bin/opengate/opengatemchk.cgi
    

    opengatemreg.cgiはopengatemchk.cgiと連携するcgiであり、直接アクセスは拒否される。

  • opengatemup.cgiは任意の端末から使える更新プログラムである。 よって運営部局のトップページなどの分かりやすい場所にリンクする。 また、このURLを期限警告メール内に記述してアクセスを促す。
    <a href=https://opengate.example.com/cgi-bin/opengate/opengatemup.cgi?lang=en>OpengateM(English)</a> 
    <a href=https://opengate.example.com/cgi-bin/opengate/opengatemup.cgi?lang=ja>OpengateM(Japanese)</a>
    
  • opengatemown.cgiは、利用者自身が、登録・更新したい端末を使ってアクセスするプログラムである。 このプログラムはクライアントのMACアドレスを認識して動作する。
    • Opengateとの併用時には、Opengateの認証後に表示されるページhttpkeep.htmlに、説明とともにリンクを配置する。
      <a href="https://opengate.example.com/cgi-bin/opengate/opengatemown.cgi?lang=%%LANGUAGE%%&redirectedurl=%%REDIRECTEDURL%%" >OpengateM</a>
      
    • OpengateMの単独使用の場合は、Active Portal設定とする。 このためには、DocumentRootにあるindex.html.var.opengatemをindex.html.varにコピーする。
      cd /usr/local/www/apache24/data
      cp index.html.var.opengatem index.html.var
      

      上に記したipfwとApacheの設定によって、不許可端末のWebアクセスは、index.html.varからopengatemown.cgiへ誘導される。

9 Virtual ClientからReal Clientへの変更

  • VirtualBoxを導入したPCが2つのNICを持つならば、一つをインターネット接続に、 他方を端末接続のネットワークとして使うことで、任意の物理マシンを接続して試用できる。
  • これを行うには、VirtualBoxにおいてゲートウェイ仮想マシンのネットワーク設定を変更する。
      設定>ネットワーク>アダプター2>割り当て=ブリッジアダプター、名前=第2のNIC(右端▼から選択)。
    
  • 上記のアダプター2に相当するホストOSのネットワークアダプターはDHCP設定をオフにすること。 DHCP自動設定ではこちら側のデフォルトルータが配布されるため経路が混乱する。

10 動かないとき

  • まずは、関連するソフトウェア(Apache,MySQL,PHP,ipfwなど)が独立して動くことを確認する。また、それらのログファイルを確認する。
  • 認証が通らないときは、Opengate/OpengateMの設定ファイルで、AuthServer/Protocolをaccept(全許可)に変えてみる。 それで治るなら、認証サーバ側の問題か、パスワードの入力ミスだろう。
  • ネットワークがおかしいときは、ipfwを開放に戻してifconfig,ping等で調べる (/etc/rc.conf内で、firewall_type="OPEN"を生かし、firewall_scriptをコメントにする)。
  • Opengate/OpengateMは、/var/log/opengate.logにログを出力する。 エラー時は参照すること。下記の設定ファイルでDebugタグを2にすると、大量のログを吐く。
  • Opengate/OpengateMの設定ファイルは/etc/opengate下にある。 変更が必要な個所は、注記しているので確認すること。
    ファイル名 説明
    opengatesrv.conf Opengateの設定
    opengatemd.conf OpengateMデーモンの設定
    opengatemmng.conf OpengateM管理プログラムの設定
    rc.firewall IPFWのルールセット
    warningmail 警告メールのひな形
  • プログラム中にerr_msg()関数の呼び出しを挿入すれば、ログファイルにデバッグ出力を得ることができる。 printf()関数と同じ使い方である。プログラムに多数の呼び出し例があるので参考にすること。

このページに関する要望・質問等は以下までお願いします。

渡辺義明 Email: watanaby(at)users.osdn.jp