cd /usr/src/sys/i386/conf cp GENERIC MYKERNEL edit MYKERNEL 次の3行を追加する。 options IPFIREWALL options IPFIREWALL_FORWARD options IPDIVERT config MYKERNEL cd ../compile/MYKERNEL make depend make make install
kern.ipc.somaxconn 受け付けるTCP接続の最大値(default=128)。利用端末毎にTCP接続が維持され るので、端末数に比べて十分に大きくする必要がある。 kern.ipc.nmbclusters mbuf(1cluster2KB)の最大数。送受信バッファサイズ(default=32KB)x接続数 分が必要。"netstat -m"で利用状況確認可能。これらの設定変更は以下で行う。以下の例ではmbuf領域は128MBとなる。必要なメ モリ容量にも注意をすること。
/etc/sysctl.conf に以下を追加 kern.ipc.somaxconn=4096 kern.ipc.nmbclusters=65536
必須:Apache、ipfw 任意:NATD、DHCP、SSL、perlなど*注意深くインストールのチェックを行い、各ソフトの動作に習熟すること。 これらのソフトの挙動が十分把握されていないと後のデバッグが苦労する。
gateway_enable="YES" <==NATD利用時不要 firewall_enable="YES" firewall_type="simple" natd_enable="YES" <==NATD利用時 natd_interface="fxp0" <== ”、名前はインターフェースに合わせること。
/etc/rc.firewall設定例
rc.firewall中で[simple]にマッチするルールは、
分散して存在する。実際の設定は、「ipfw list」コマンドで確認すること。
下のサンプルは理想的な設定を示したものではない。標準のrc.firewallを参
考にして適切に編集すること。
[Ss][Ii][Mm][Pp][Ll][Ee]) # set these to your outside interface network and netmask and ip oif="fxp0" onet="133.49.20.0" omask="255.255.252.0" oip="133.49.22.5" # set these to your inside interface network and netmask and ip iif="fxp1" inet="192.168.0.0" imask="255.255.255.0" iip="192.168.0.1" # 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 pass DNS) $fwcmd add pass udp from any 53 to any $fwcmd add pass udp from any to any 53 # Forwarding http connection from unauth client ############### $fwcmd add 60000 fwd localhost tcp from ${inet}:${imask} to any http $fwcmd add 60010 fwd localhost tcp from ${inet}:${imask} to any https # Allow TCP through if setup succeeded ######################## $fwcmd add 60100 pass tcp from any to any established設定上の注意
上の設定を抜きだしたOpengate専用のスクリプトをconf/opengatefw.confに 用意した。これを編集して利用することも可能である。
ipfw add 10000 allow ip from xx.xx.xx.xx to any <===発信開放 ipfw add 10000 allow ip from any to xx.xx.xx.xx <===受信開放 ipfw del 10000 <===閉鎖ipfwコマンドには十分に精通すること。 Opengateは、上記のようなコマンドの発行を行うソフトである。
order deny,allow deny from all allow from 133.49.0.0/255.255.0.0 (Example:アドレスは変更要) allow from 192.168.0.0/255.255.0.0CGI稼働を有効に
#ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/" ↓ ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/"FileNotFound時にtopページへ
#ErrorDocument 404 /missing.html ↓ ErrorDocument 404 /index.html
local1.* /var/log/opengate.log ↑ ここはTABで区切ること。
touch /var/log/opengate.log
tar zxvf opengatexxx.tar.gz (xxxはバージョンを示す。最新のものを利用すること)以下のディレクトリが出来るので、内容を確認する。 ここで設定を変更することもできるがインストール後でも良い。
doc: 各種文書 conf: configuration file sample, firewall control perl script sample javahtml: クライアント javaとhtmlファイル opengatesrv: サーバ CGIプログラム
javac Opengate.java jar cvf Opengate.jar *.class
opengatesrvに移動する。 opengatesrv下のMakefileとopengatesrv.hの内容を確認し、 ディレクトリ,アドレス設定等を設置環境にあわせて変更する(詳細は下記)。 **とくにHOSTADDRは、インストールマシンの端末側インターフェースに 合わせることを忘れないこと。** make コンパイルする。 su ルートになる。 make install インストールする。
ID:address=hostname|hostaddr:[port=portno:]protocol=ftp|pop3|pop3s: ID:protocol=radius:[conffile=filepath:] ID:protocol=pam:[servicename=name:]各項目は以下を意味する。
ID:認証サーバの識別子。任意長文字列ですが利便性を考えると、1〜3文字程度が適当だろう。 address: 認証サーバのIPaddressまたはドメイン名。名前解決ができないときは、 IPaddressで試すこと。 port: 認証リクエストを送る先のポート番号。省略時は/etc/services登録ポート番号。 protocol: 認証に用いるプロトコル。 現在、pop3,ftp,pop3s,pam,radiusをサポート。 conffile:RADIUS時に設定file のパスを指定。 省略すると「/etc/radius.conf」。 servicename:PAM時にservicenameを指定。/etc/pam.confにおける識別子である。 省略すると「opengate」。以下はopengatesrv.confの例。
*この例では、アドレスxx.xx.xx.xxへのftpが可能か否かで認証を行う。最初は、このような 単純な設定でOpengateの動作を確認すること。
default:tc=as as:address=xx.xx.xx.xx:protocol=ftp: (アドレスxx.xx.xx.xxへのFTPアクセスを前もって確認のこと)
*この例では、4つの認証サーバが設定されており、 csをdefaultとしている。 利用者がユーザIDのフィールドに[userID]のみを入力するとdefaultの「cs」サーバに認証に行く。 [userID@cc]の形式で入力すると、「cc」で指定された認証サーバへ認証を回す。[userID@pam] と入れると「pam」指定サーバへ、[userID@rad]と入れると「rad」指定のサーバへ回す。
default:tc=cs cs:address=noah.cs.is.saga-u.ac.jp:protocol=pop3: cc:address=himiko.cc.saga-u.ac.jp:protocol=ftp:port=21: pam:protocol=pam: rad:protocol=radius:*protocol=pamが設定されているときは、/etc/pam.confまたは/etc/pam.d/opengate を設定する必要がある。 opengateはauthとaccountのチェックを行う。 accountを利用しない時は、permitを指定すること。
opengate auth required pam_radius.so opengate account required pam_permit.so以下は、/etc/pam.d/opengateの設定例
auth required pam_radius.so account required pam_permit.so
*protocol=radiusが設定されているときは、/etc/radius.confを設定する必要がある。 以下はradius.confの設定例。
auth radius1.somewhere.com "password1" 5 6 auth radius2.somewhere.com "password2" 5 6
1)端末のブラウザから外部URLへアクセスする
2)認証ページが表示されたら、ユーザIDとパスワードを入力する。
3)許可ページが表示されたら、外部URLへアクセスする
4)外部ページが表示されたら、ブラウザを終了する。
5)再度、ブラウザを起動して、外部URLへアクセスする
6)認証ページが表示されたら、基本インストールが完了。
エラー
At 2) OpengateサーバのURLを指定してアクセスする。
成功ならipfw fwd ruleを疑う。失敗ならwww/dataディレクトリの設定を疑う。
At 3) 認証サーバアクセスをコマンドラインで試す(eg. ftp xx.xx.xx.xx)。
成功ならopengatesrv.confを疑う。
失敗なら、認証サーバのアクセス制限やユーザ登録を疑う
At 4)ファイアウオール設定を疑う。
At 6)他の新しい外部URLをアクセスする。
成功なら、ブラウザのキャッシュ効果である。
失敗なら、ファイアウオール設定をipfwでチェックする
*より詳細なデバッグ記述を別ファイルに用意した。
言語毎にディレクトリがある(en(english),ja(japanese)など) その中のHTMLを変更。 topindex.html(最初に送られる画面。認証入力へ自動JUMP) index.html(認証入力画面) deny.html(認証拒否時の画面) accept.html,accept2.html(認証許可時の画面) これらは、必要に応じて内容の変更を行うこと。 accept.html中の"**OpengateAppletHere**"は削除してはならない。 ここにJavaAppletが挿入される。 また%%HOSTADDR%%は、インストール時にアドレスに置き換えられる。 %%OPENGATEDIR%%は、インストールディレクトリに置き換えられる。
MakefileにおいてUSEFWSCRIPTが0であれば、CGIが直接にipfwコマンドを発行 する。このときは、許可後は全ての出入りパケットが通過可能となる。1であ れば、perlスクリプトを経由してipfwコマンドを発行する。ファイアウオール 開放用スクリプトconf/opengatefw.plを書き換える事により各種制御が可能で ある。ただし、パフォーマンスおよびセキュリティを保つため、可能な限りシ ンプルな構成とする事。このスクリプトは排他制御下で動いている。時間のか かる処理を入れるとパフォーマンスに大きく影響する。
利用者データベースを利用してファイアウォール開放の程度を決定したい場合、 このSCRIPTで行う事も可能であるが、別途用意したcomm-userdb.cでpropertyを 設定してこのSCRIPTに送る方が、パフォーマンス上から望ましい。
必要に応じてMakefileにて以下の項目が設定可能。
HOSTADDR = ゲートウェイのクライアント側IPアドレス HTMLTOP1 = HTMLファイルを置くディレクトリのトップ HTMLTOP2 = HTMLファイルを置くディレクトリのトップ(SSL側) OPENGATEDIR = Opengate関連ファイルをインストールするディレクトリ、Webトップ相対 CGIPATH = CGIを置くディレクトリ CGIPROG = CGIプログラム名 CONFIGFILE = 設定ファイル名 USEFWSCRIPT= Perlスクリプト制御か否か FWSCRIPT = Perlスクリプト名 FWSCRIPTPATH = Perlスクリプトパス LOCKFILE= ロックファイル名 HTMLDOCS= HTMLファイル一覧 DENYDOC = 拒否時のHTMLファイル ACCEPTDOC = 許可時のHTMLファイル HTMLLANGS= HTMLファイルとして準備した言語一覧、最初がdefault ARPPATH= arpコマンドのパス IPFWPATH= ipfwコマンドのパス
DEBUG : 1に設定するとデバッグメッセージをログに出力 関数間の呼び出しとその時の引数値が出る。 DURATIONDEFAULT : javaを送ってから接続してくるまでの待ち時間(秒) default値。応答がないとネットワークを閉鎖する。 待ち時間は認証ページで変更可能。 DURATIONMAX : javaが接続して来ない時には、利用者が認証ページで 指定した利用継続時間の間を利用可能とする。 DURATIONMAXは指定可能な最大値(秒) 利用者による指定が不要であれば、DURATIONDEFAULTと同一値にして、 認証ページから入力欄を削ること。 ACTIVECHECKINTERVAL : 端末の生存確認のためのチェック間隔(秒) java無しのときは、対応IPアドレスに対するMACアドレス およびゲートウェイ通過のPacket数でチェック。 java有りのときは、javaとのHELLO交換およびゲートウェイ 通過のPacket数でチェック。 COMMWAITTIMEOUT : 通信返答までの最大待ち時間(秒) NOREPLYMAX : 上記、メッセージ交換での無返答を許す回数 NOPACKETINTERVAL : 放置と判断する通信パケット通過無し時間(秒)(ただし、この チェックは、ACTIVECHECKINTERVALごとに行うので、 実際は切り上げてACTIVECHECKINTERVALの整数倍となる) LOCKTIMEOUT : ipfwの排他制御最大待ち時間。 IPFWMIN : Opengateの利用するipfwのルール番号範囲 IPFWMAX : 最小IPFWMINから最大IPFWMAXまで間隔IPFWINTERVAL IPFWINTERVAL : ごとに利用する。これを使いきるとそれ以上登録しない。 よって、クライアント数制限に利用可能。 PORTMIN : Opengateサーバの利用するポート番号の範囲(最小値−最大値) PORTMAX : 他の用途で利用しない範囲を指定。同時利用端末数以上必要。 FACILITY : syslogの出力先