企業内でSquidプロキシサーバーを管理する多くの人々は、従業員によるインターネット使用の統計を定期的に管理者に示す必要があります。 統計を提供するために、Squidに加えて、SARG、Lightsquidなどのログアナライザーがインストールされています。 同時に、組織には多くの場合ディレクトリサービス(Active Directoryを想定)があり、すべての従業員がアカウントを持ち、プロキシサーバーでの承認はアカウントに基づいています。 当然、管理者にとっては、レポートを見るとき、名前と姓で従業員を識別する方が便利です。 驚くべきことに、多くのフォーラムやITポータルでは、ログアナライザーの構成ファイルに名前を入力して、この問題を手動で解決することが提案されています。 このソリューションには欠点があります-従業員を登録/解雇する場合、構成を編集する必要があります。
この記事では、ActiveDirectoryから従業員の姓と名のデータを自動的に取得し、Lightsquidレポートに挿入する方法について説明します。
目的:インターネットにアクセスした各Active Directoryユーザーの名前と姓を示すLightsquidを介したレポートの出力を提供する(今後、ADでこのフィールドは「表示名」に対応し、LDAPクエリでは変数displayNameが参照する) )
ソースデータ:
解決策:
最初に、名前データをActiveDirectoryからLightsquidに転送するメカニズムについて説明し、次にその実装を示します。
名前に関する情報は、ドメインユーザーのプロパティの[表示名]フィールドに表示されます。 ADから情報を取得するには、LDAPクエリを介して情報を操作する必要があります。 同時に、承認されたドメインユーザーに代わってのみ対話できます。 LightsquidはPerlで記述されているため、これらのクエリを完了するにはNet :: LDAPモジュールが必要です。 また、ADからレポートに情報を自動出力するには、squidからのログインの単純な受信をLDAPクエリに置き換える必要があります。
最初に、LDAPクエリを実行するために使用される、最も制限された権限を持つADのアカウントを作成する必要があります。 これを行うには、Active Directoryユーザーとコンピュータースナップインを起動し、新しいユーザーを作成します。 目的を表す名前を付けてください。 たとえば、LightSquidAgent。 次に、新しいGPOを作成し、そのプロパティ(または既存のオブジェクトのプロパティ)を入力します。 次に、コンピューターの構成-> Windowsの構成->セキュリティの設定->ローカルポリシー->ユーザー権利の割り当て。 [ネットワークからコンピューターへのアクセスを拒否する]オプションで、LightSquidAgentと入力します。 [ローカルログインの拒否]オプションで、LightSquidAgentも入力します。
次に、PerlでNet :: LDAPモジュールをインストールします。 bashまたは同様のコマンドシェルを実行して実行する
perl -MCPAN -e shell
。 cpanインタープリターに入った後、実行します
install Net::LDAP
。 次に、インストーラーは自動構成を実行するかどうかを尋ねます。 Enterキーを押すだけです。 最後に表示されるはずです
LDAP module was installed successfully
。
その後、レポートを生成するコードを編集できます。 LightSquidがインストールされているフォルダーに移動し、ip2nameフォルダーに移動して、ip2name.squidauthファイルを開きます。 次のようになります。
UPD:ユーザー名のキャッシュに関するLightsquidの作成者の推奨事項が考慮されています。
UPD2:権限のないユーザーを認識するときにスクリプトがフリーズするバグを修正
UPD3:ドメインコントローラーが利用できない場合、およびLightSquidAgentアカウントでログインできない場合にスクリプトがフリーズするバグを修正
ファイルヘッダーで、必要な関数が含まれる名前空間を登録し、3つの新しい変数を宣言する必要があります。
空のStartIp2Name定義を、ドメインコントローラーへの接続が確立されている私たちのものに置き換えます
sub StartIp2Name() { my $server = "ldap://ourserver.domain.com"; $ldap = Net::LDAP->new( $server ); return if(!defined $ldap); $message = $ldap->bind(q(domain\LightSquidAgent), password => "passwd"); }
Ip2Name関数の定義を置き換えます。この関数のバージョンは、従業員の名前によってドメインコントローラーから取得されます。
条件ステートメントのブランチでは、繰り返されるログインのスキップが提供され、各ユーザーに対して1つのLDAP要求のみが行われます。
代わりに
sub Ip2Name($$$) { # $Lhost,$user,$Ltimestamp my $Lhost=shift; my $user =shift; $user =URLDecode($user);
挿入する
sub Ip2Name($$$) { # $Lhost,$user,$Ltimestamp my $Lhost=shift; my $user =shift; $user =URLDecode($user);
最後:StopIp2Name関数で、ドメインコントローラーから切断します。
sub StopIp2Name() { return if (!defined $ldap); $message = $ldap->unbind; }
客観的な批判を歓迎します