IceWall

IceWallとは

Webベースのシングルサインオン製品で、Webサーバーの認証を一元管理する
情報継承機能を使うことで、Webサーバーへの認証はIceWallにログインするアカウントのみとなり、複数のパスワード管理が不要となる
それぞれのWebサーバーに対するアクセス権限についても一元管理される為、WEBサーバー毎の認証アプリ開発が不要となる

IceWallの基本構成

icewall_summary.png

サーバープロセス役割
フォワーダdfwリバースプロキシとしてクライアントとバックエンドサーバーとの通信中継を行う。CGIとして稼動する
認証モジュールcertdユーザー情報、アクセス制御、ログイン状況を一括管理する
認証DBOracleなどIceWallのアカウントを管理する
バックエンドサーバーhttpdフォワーダから転送されるWebサーバー

フォワーダの通信トランザクション

.ライアントからフォワーダへアクセスし、ログインフォームを表示する(ログイン済みであればい悄
▲罅璽供爾肇僖好錙璽匹鯑力し認証サーバーへ渡される
GЬ撻機璽弌爾認証DBへ問い合わせ正規ユーザーか確認し、問題なければコンフィグで指定されたカラムの値を全てcertdに渡す
 不要なDBアクセスを避ける為、certdはオンメモリで取得した情報を保持する
 カラムが多ければ多い程、メモリを食うので不要なカラムはコンフィグで削除する
ぅ侫ワーダと認証サーバーは画面遷移の度に該当ページに対するアクセス権限をチェックする
ゥ▲セス権限があればバックエンドサーバーへフォワードしWEBページを表示させる

インストール

全て/opt/icewall-sso/ディレクトリ以下にインストールされる

rpm -iv --nodeps IceWall-SSO-certd_<認証形式>_<バージョン>_<アーキテクチャ>.rpm
rpm -iv --nodeps IceWall-SSO-dfw_<バージョン>_<アーキテクチャ>.rpm
chown -R iwadmin /opt/icewal-sso/certd    ‥‥certdを実行するユーザーの権限にする
chown -R apache:apache /opt/icewall-sso/dfw  ‥‥Apacheを実行するユーザーの権限にする

Apacheの設定

httpd.confに以下の文言を追加する

Alias /img/ "/opt/icewall-sso/dfw/html/image/"
SetEnv LD_LIBRARY_PATH "/opt/icewall-sso/lib/dfw:/usr/lib64"
ScriptAlias /fw/ "/opt/icewall-sso/dfw/cgi-bin/"
<Directory "/opt/icewall-sso/dfw/cgi-bin/">
     AllowOverride All
     Options ExecCGI
     SetHandler cgi-script
     Order allow,deny
     Allow from all
</Directory>

ディレクトリ構成

/opt/icewall-sso/
 certd      認証モジュール
  bin      認証モジュールのプログラムやスクリプト
  config     認証モジュールの設定ファイル
 dfw       フォワーダ
  cgi-bin    フォワーダのCGIプログラム及び設定ファイル
  chtml     ログインやエラー画面のコンテンツ(携帯用)
  html      ログインやエラー画面のコンテンツ(PC用)

  

IceWallシステム用テーブルの作成

$ cd /opt/ice-wall/tools
$ sqlplus UID/PASS@oracleSID
SQL > @cre_tbl_test.sql    ‥‥ICEWALLTESTテーブルを作成する。名前を変えたければSQLを修正する
SQL > @cre_tbl_history.sql  ‥‥HISTORYテーブルを作成する
SQL > @cre_sequence.sql
ICEWALLTEST のカラム
名前                               NULL?    型
-------------------------------- -------- ----------------------------
USERID                           NOT NULL VARCHAR2(20)
PASSWD                           NOT NULL CHAR(37)
PASSCHANGE                       NOT NULL CHAR(1)
PASSWDEXP                                 CHAR(14)
PASSWDHIS                                 CHAR(37)
CHGDATE                                   CHAR(14)
LOGONDATE                                 CHAR(14)
LASTDATE                                  CHAR(14)
LOGONFAIL                                 CHAR(14)
FAILCOUNT                        NOT NULL NUMBER(38)
LOCKOUT                          NOT NULL CHAR(1)
LOGONSTOP                        NOT NULL CHAR(1)
LOCKDATE                                  CHAR(14)
LOGSTATUS                        NOT NULL CHAR(1)


作成したテーブルとカラムをマッピングする

どのカラムをユーザー名、パスワードとするか定義し、IceWall認証情報としてマッピングする
【ファイル】 /opt/icewall-sso/certd/config/dbattr.conf
【 書式 】 項目=DB側のカラム名

UID=USERID       ユーザーID
PASSWORD=PASSWD    パスワード
PWDEXPDATE=PASSWDEXP  パスワード有効期限
PWDHISTORY=PASSWDHIS  パスワード履歴
PCHGOK=PASSCHANGE   パスワード変更ON/OFF(1でON)
PCHGDATE=CHGDATE    パスワード変更日
PLOGINDATE=LOGONDATE  ログイン時刻
LLOGINDATE=LASTDATE  最終ログイン時刻
FLOGINDATE=LOGONFAIL  ログイン失敗時刻
PWDRETRY=FAILCOUNT   パスワードリトライ回数
PWDLOCK=LOCKOUT    アカウントロック有無(1でロック)
LOGINOK=LOGONSTOP   ログインOK/NG(1でOK)
LOCKDATE=LOCKDATE   アカウントロック時刻
LOGINSTAT=LOGSTATUS  ログインステータス(1でログイン中)


IceWallユーザーの作成

/opt/icewal-sso/tools/以下の3つのファイルを使用する
DATA.txt   TEMPLATE.sqlに引き渡すパラメータをカンマ区切りで記載
TEMPLATE.sql TABLEにINSERTするSQL文。DATA.txtで渡されたパラメータを以下のキーワードで置換する

キーワード説明
$n$nカラム目のデータに置換
$mn$nカラム目のデータをMD5でハッシュした値で置換(Oracleなどではこれを使う)
$sn$nカラム目のデータをSHA1でハッシュした値で置換(LDAPなど)
$hn$nカラム目のデータをSHA256でハッシュした値で置換
$an$nカラム目のデータを製品標準形式(鍵長128bit)で暗号化した値に置換
$bn$nカラム目のデータを製品標準形式(鍵長256bit)で暗号化した値に置換
# ./mkuser TEMPLATE.sql DATA.txt > outputfile.sql
$ sqlplus UID/PASS@oracleSID @outputfile.sql


認証モジュールの基本設定

使用するDB及びTABLEを定義する。定義内容はファイル名に説明あり
【ファイル】 /opt/icewall-sso/certd/config/cert.conf
【 書式 】 カラム=値 ※空白を入れないこと

IceWall認証に関する設定

カラム説明
DBHOSTOracleSID
DBUIDログインユーザー(certd再起動後、暗号化されるので平文で記載してOK)
DBPWDパスワード(certd再起動後、暗号化されるので平文で記載してOK)
DBTBLテーブル名(デフォルトはicewalltest)
DBEXATTR独自に使用するカラムを追加する場合に,区切りでカラム名を羅列する

ログに関する設定

カラム説明
ALEVELアクセスログレベル指定(↓低い 0〜4 ↑高い)
ELEVELエラーログレベル指定(↓低い 0〜4 ↑高い)
ACCESSアクセスログの場所
ERRORエラーログの場所

ログインログアウト・パスワードポリシーに関する設定

カラム説明
COOKIEEXP自動ログアウト設定(1で有効)
COOKIETIME上記が有効の場合の期限(分)
LOMETHOD自動ログアウトの有効期限の考え方(0でログインからの経過時間、1で最終アクセスからの経過時間)
DUPLOGIN同一IDでの多重ログイン設定(1で許可)
PWDMINLEN新しいパスワードの最終文字数
PWDMAXLEN新しいパスワードの最大文字数
PWDSAMEPASSUIDと同じパスワードを認めるか否か(1で不許可)
PWDALPHANUM新しいパスワードで使用可能な文字の使用ポリシーを定義(0〜13のルール番号のどれか)
LOCKCOUNTパスワードエラーが続いた場合にロックされるエラー回数
PWDEXPCHKパスワード変更後の有効期限を設けるか(1で有効。1回もパスワード変更してない場合は機能しない)
PWDEXPIREパスワード有効期限切れまでの日数
PWDEXPWARNパスワード有効期限切れが近づいた際に警告画面を何日前から出すか
PWDHISCHKパスワードの履歴チェック(1で有効)
PWDHISCNTパスワードの履歴保持件数を1〜20で指定
PWDFORBIDパスワードとして使用できないワードのディクショナリファイルを指定する

パフォーマンス調整に関する設定

カラム説明
MAXDBCONNECTDBへの同時接続数
MAXREQTHREADリクエストスレッド数
REQQUESIZEリクエストキューサイズ
MAXREPTHREADレプリケーションスレッド数
REPQUESIZEレプリケーションキューサイズ


アクセスグループの定義

ユーザーは特定のグループに必ず所属させる必要がある
バックエンドサーバーへのアクセス許可はグループ単位で制御する
【ファイル】 /opt/icewall-sso/certd/config/cert.grp
【 書式 】 グループ名,DBカラム名=値
DBカラム名はdbattr.conf及び、DBEXATTRで指定したカラムの指定が可能

USERIDの値にuserが付与しているREMOTE_ADDRが192.168.11.0/24のユーザーをnormalグループとする

normal,USERID=user.*&REMOTE_ADDR=192.168.11.1-192.168.11.254

正規表現及び、論理式 () ! & | の使用が可能


バックエンドサーバーへのアクセス定義

特定のグループに対して、バックエンドサーバーへの接続許可を定義する
パターンマッチングは前方一致でマッチしたらそれ以降のルールは参照しない
【ファイル】 /opt/icewall-sso/certd/config/cert.acl
【 書式 】 http://アクセスさせたいサーバーのホスト名[:ポート番号]/=グループ名

normal且つspecilに属するユーザーに対し192.168.11.2へのアクセスを許可する

http://192.168.11.2/=normal&special


認証モジュールの制御

/opt/icewall-sso/certd/bin ディレクトリ以下のスクリプトにて制御を行う

スクリプト説明
start-certcertdの起動
end-certcertdの停止
info-certcertdの稼働状況を出力
reload-cert設定ファイル再読み込み。反映されない項目もある
メモリ上の認証情報書き換えが行われる間、ユーザーからのリクエストはwait状態になる
logout-certログイン中の全ユーザー強制ログアウト
cdump-cert現在稼動している状態の設定内容を出力

info-cert

cert.confのACCESSで指定したログ(デフォルトは/opt/icewall-sso/logs/cert.log)に実行時の稼動状況を記録する

項目UsedMax%Over
CERTINFO USER現在ログインしているユーザーログイン可能なユーザーログイン可能ユーザーの割合
CERTINFO CACHE使用キャッシュサイズ最大キャッシュサイズキャッシュ使用率
CERTINFO REQUEST_QUEUE使用中のリクエストキュー数リクエストキューサイズリクエストキューの利用率キュー溢れ数(前回のinfo-certから今回のinfo-certまでの数)
CERTINFO ACCTHRED使用中のアクセススレッド数リクエストスレッド数スレッド使用率
CERTINFO REPRICA_QUEUE使用中のレプリケーション数レプリケーションキューサイズレプリケーションキュー使用率キュー溢れ数
CERTINFO REQUEST_THREAD使用中のスレッド数全体スレッド数スレッド使用率
CERTINFO REPRICA_THREAD使用中のスレッド数全体スレッド数スレッド使用率
CERTINFO DBCONNECT使用中のコネクション数全体コネクション数コネクション使用率


フォワーダの設定

【ファイル】 /opt/icewall-sso/dfw/cgi-bin/dfw.conf

認証モジュール(certd)の位置とアクセスポートの指定

CERT=認証モジュールホスト:ポート番号

ポート番号は cert.confPORT と同じ番号にすること

バックエンドサーバーのエイリアス名と位置指定

バックエンドサーバーへアクセスする際のURLは以下のようになる

http://forwarder.com/fw/dfw/back01/index.html
          ´◆     

.侫ワーダのFQDN
▲侫ワーダへのパス(固定)
バックエンドサーバーのエイリアス(dfw.confのHOSTで定義する)
ぅ丱奪エンドサーバーの上のURL

HOST=back01=192.168.11.2 ‥‥192.168.11.2のエイリアス名をback01とする
SHOST=back01=192.168.11.3 ‥‥192.168.11.3のエイリアス名をback02とする

バックエンドサーバーへのアクセス方法の指定

HOST/SHOSTと対をなす形で、それぞれのバックエンドサーバーへのアクセスする際の条件を指定した「ホスト設定」ファイルを指定する
予めsample.confが用意されており、これはプレーンなサーバーにアクセスするための条件が定義されている

SVRFILE=back01,./sample.conf
SVRFILE=back02,./sample.conf

html.conf

ログイン画面など、どのファイルを使用するか定義する

情報継承機能(認証代行)

IceWallで認証した際の情報を用いてバックエンドサーバーのBASIC認証やFORM認証を自動的に行わせる機能
cert.conf の DBEXATTR で独自のカラムを定義し、このカラムの値を使って認証を代行させる

BASIC認証の代行

ホスト設定ファイルをコピーし編集する

cd /opt/icewall-sso/certd/config
cp -ip sample.conf back01.conf
vi back01.conf
BASICAUTH=1          ‥‥BASIC認証代行を有効にする
SVRFILE=back01,./back01.conf ‥‥ホスト設定ファイルを変更する
BA-UID=<UID>         ‥‥認証に使うユーザー名のDBカラム名を指定(DEFAULTにするとIceWallの認証のUIDを使用)
BA-PWD=<PWD>         ‥‥認証に使うパスワードのDBカラム名を指定(DEFAULTにするとIceWallの認証のパスワードを使用)

FORM認証の代行

ホスト設定ファイルをコピーし編集する

cd /opt/icewall-sso/certd/config
cp -ip sample.conf back01.conf
vi back01.conf
FORM_FILE=FORM01,./form.conf  ‥‥FORM01というフォームグループ名を定義し、フォームの設定ファイルはform.confとする

フォーム設定ファイルを編集する

vi form.conf

【 書式 】 項目=フォームグループ名,設定値

項目説明
FORM_URLフォーム認証が行われる可能性のあるURLを指定。/で全体
/secure/で/secureディレクトリ以下。form.htmlのように特定ファイルの指定
FORM_KEYFORM認証と認識するキーワードの指定。複数指定した場合はAND条件になる
FORM_METHODform認証のメソッドを指定。<form>タグのmethod属性の値を記述
FORM_SENDリクエスト先のURL。<form>タグのaction属性の値を記述
FORM_DATA_STRFORMに入力する固定値を定義
FORM_DATA_USRFORMに入力する値を情報継承などから得られる可変値を定義

【 書式 】 FORM_DATA_STR=フォームグループ名,メソッド,name属性,固定値

FORM_DATA_STR=FORM01,POSTDATA,id,user01
FORM_DATA_STR=FORM01,POSTDATA,pwd,pass01
※メソッドはGETはQUERY_STRING、POSTはPOSTDATA

【 書式 】 FORM_DATA_STR=フォームグループ名,メソッド,name属性,DBカラム名

FORM_DATA_USR=FORM01,POSTDATA,id,EXTRAUID
FORM_DATA_USR=FORM01,POSTDATA,pwd,EXTRAPWD
※DBカラムはcert.confのDBEXATTRで定義したカラムを指定する


フォワーダのアクセスログ(dfw.log)

dfw.confのACCESSで指定した場所(デフォルトは/opt/icewall-sso/logs/dfw.log)に出力される

【出力例】[2012/03/12 09:21:16]  0.024  0.117  0.000 user1 POST [web.test.com:443/sdrive/download.php] 56 192.168.11.10 TID=TID201〜
項目説明
[2012/03/12〜日時
0.024.侫ワーダ起動からバックエンドサーバー接続までの経過時間(秒)
0.117▲丱奪エンド接続から切断するまでの経過時間(秒)
0.000バックエンドからコンテンツを受け取ってからクライアントに出力するまでの時間(秒)
user1リクエストしたユーザーID
POSTリクエストされたHTTPメソッド
[web.test〜リクエストされたURL(ALEVEL2以上で出力)
56コンテンツサイズ(byte)(ALEVEL2以上で出力)
192.168.11.10クライアントのIPアドレス(ALEVEL2以上で出力)
TID=〜トランザクションID(コンフィグで有効にすることで出力)

経過時間について

icewall_transaction.png
.侫ワーダが起動後、バックエンドサーバーへのTCP/IP接続が確立されるまでの経過時間
HTTPによるコンテンツ転送時間
TCP/IP接続が切断し、クライアントとの通信を開始するまでの時間
 URL・キーワード変換に掛かった時間でクライアントへのコンテンツ転送時間ではない

トランザクションID

フォワーダにより個々のリクエストを個別に割り振られたTIDでログに記録する
TIDは認証モジュール側でも同じ値で記録される為、ログの突合せが可能になる

dfw.conf
TRANSID=1    トランザクションID出力を有効にする
TRANSID_STR トランザクションIDの後に任意の文字列を追記する(フォワーダ毎に異なる文字列を入れることでサーバー切り分けが安易になる)
cert.conf
TRANSID=1  認証モジュールログへのトランザクションID出力を有効にする


認証モジュールのアクセスログ(cert.log)

cert.confのACCESSで指定した場所(デフォルトは/opt/icewall-sso/logs/dfw.log)に出力される

【出力例】[2012/03/12 09:21:05] User Login. TID=TID201〜 UserID=user1 [AC10124-25065]
項目説明
[2012/03/12〜日時
User Logoutログメッセージ
TID=〜トランザクションID(コンフィグで有効にすることで出力)
UserUD=ユーザーID
[AC10124メッセージID

認証DBアクセス時間の記録

ALEVELに1以上且つ、LOGPERF=1に設定した場合、認証DBへのアクセス時間が記録される

【出力例2】[2012/03/12 09:21:05] PERF 1104244 LOGINUID user1 0.007303 S:0.024 U:0.014 TID=20121〜 [AC28201-29999]
項目説明
[2012/03/12〜日時
PERFPERF固定
1104244スレッドID(内部処理のリクエストスレッドID)
LOGINUIDリクエスト種別(下記参照)
UserUD=ユーザーID
0.007303リクエスト処理時間
S:〜U:DB処理時間。S:Select、U:Update、I:Insert、B:bind処理
TID=〜トランザクションID(コンフィグで有効にすることで出力)
[AC10124メッセージID
リクエスト種別説明
LOGINUIDユーザーIDのログイン
FLOGINUID強制ユーザIDのログイン
LOGINCERT証明書ログイン
LOGINSAMLSAMLログイン
FLOGINSAML強制SAMLログイン
LOGINFEDEフェデレーションログイン
FLOGINFEDE強制ェデレーションログイン
ACCESSUIDユーザーIDのアクセス制御
ACCESSCERT証明書サクセス制御
PWDCHGパスワード変更
LOGOUTログアウト
AUTOLOGOUT自動ログアウト

トップ   編集 凍結解除 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-03-12 (月) 19:19:33 (2076d)