質問
アクセスリストでパケットフィルタリングを行なうとき、条件式には 1 人のユーザー名しか書けないようです。たとえば同一のアクセスリストを、100 人のユーザーのうち、特定の 50 人のユーザーに対して適用したい場合、50 個のエントリを作成すれば良いと思いますが、これは非効率です。効率的な方法はありませんか ?
回答
2 種類の方法があります。
まず、それら 50 人のユーザーを 1 個のグループに所属させ、アクセスリストのマッチ条件にユーザー名の代わりに当該グループ名を指定すれば、この問題は解決します。
次に、別の方法として、特別なテキストファイルを使用する方法があります。テキストファイルには、条件に一致させたいユーザーの一覧を、1 行につき 1 ユーザーのフォーマットで指定します。たとえば、以下のようにします。
===
aho
baka
manuke
===
上記では、「aho」、「baka」、「manuke」の 3 ユーザーが定義されています。このテキストファイルを、たとえば「C:\userlist.txt」に保存します。
仮想 HUB のアクセスリストエントリにおけるユーザー名フィールドに、ユーザー名の代わりに「include:C:\userlist.txt」のように記載します。このようにすると、仮想 HUB はアクセスリストを評価しようとする際に、指定されたテキストファイルのすべての行を調べ、ユーザー名がいずれかの行に一致すればアクセスリストが適用されることになります。もちろん、テキストファイルの内容は内部的にメモリ上に置かれ、かつ数値化されてキャッシュされますので、この処理は大変高速です。
同様に、指定したテキストファイルに含まれていないユーザーに対してだけアクセスリストを適用するように指定するには、「exclude:C:\userlist.txt」のように指定します。
テキストファイルの最大サイズは、最大 1MB です。それ以上の部分は切り捨てられます。テキストファイル内のユーザーリストがメモリ内にキャッシュされる時間は、デフォルトで 30 秒間です。キャッシュが切れる度にテキストファイルは再読込されます。この有効期限は、仮想 HUB 管理オプションの「AccessListIncludeFileCacheLifetime」値で自由に変更できます。
この素晴らしい機能により、特定のアクセスリストエントリを適用したいユーザーのリストを、外部プログラムから、テキストファイルを書き換えるだけでいつでも変更できます。たとえば、VPN サービスを提供する事業者は、追加料金を支払ったユーザーに対してのみ、すべての TCP または UDP ポートの通信を可能にするというような処理を、とても簡単なプログラミングで自動化することができます。