証明書のなりすましのないHTTPSフィルタリングを備えたSquid、Active Directory 2012R2 + WPADとの統合

このマニュアルは、ユーザーのトラフィック(httpおよびhttps)を監視する実稼働の必要性と、ホワイトリストおよびブラックリストへのアクセスの分布に関連して書かれています。 記事は基礎として取り上げられました: this and thisで、 peek-n-spliceテクノロジーが使用されました。 これらの記事では、構成にはsquidをゲートウェイとして使用するホストが含まれます。構成を完了した後、Active Directoryからグループにアクセス権を配布できる本格的なプロキシサーバーを取得します。 構成が完了すると、プロキシサーバーの設定をユーザーに転送するという質問が発生しました。 ラップトップはオフィスに持ち帰られることが多いという事実を考慮して、全体のアイデアは行き詰まりました。 当初は、DHCPを介してプロキシサーバー設定を発行するオプションが検討されましたが、最適ではありません。異なるサブネットおよび異なる機器のオフィスでは、WPADがこの状況から抜け出しました。 このテクノロジーについて簡単に説明すると、OS Windows上のクライアントマシンは、ネットワークで動作するための構成ファイルを要求するためにwpad.example.ru(最大3レベルドメイン)という名前のホストを探していると言えます。 この原則に基づいて、Webサーバーを上げる必要がありますが、これはwpad.datファイルを提供するだけで、プロキシサーバーを使用してホストでWebサーバーを上げ(完了)、DNSサーバーのプロキシサーバーでcname wpadを作成できます。 。 多数の選択肢があるため、統計を収集および表示する機能を持つプロキシサーバーを使用することをお勧めします。 いくつかの保守的な考慮事項により、SARGを選択することが決定されました。 最大100人の従業員がいるオフィスでは、設定が簡単で、かなり受け入れられる統計情報です。



内容




1.1簡略化されたWPADスキーム



-Windows OS上のクライアントは、ホストwpad.example.ruへのリクエストでDNSサーバーに接続し、DNSサーバー名に対応するレコードは、どこへ行くかを示します。 次に、クライアントは、設定ファイルの要求でwpad.example.ruに連絡します。 それを受け取ると、それはその中の指示に従って行動し始めます。



1.2この技術の良いところ



長所:



-すべてのGPOを介してプロキシアドレスを登録する必要はありません。

-従業員のモビリティ(オフィス外のインターネットへのアクセス)

-このテクノロジーの使用をオフにするには、[インターネットオプション]-[設定を自動的に取得する]でオフにします。



短所:



-「設定の自動取得」はすべてのユーザーに対して無効にできるため、この機能はオンのままにしておくとGPOを介した変更を防ぐことができます



1.3 Squid Peek-n-splice-仕組み



従業員がプロキシ経由でhttpsでサイトにアクセスしようとしています。 暗号化された接続をインストールすると、「あいさつ」が発生します。これは明確な形式で送信され、プロキシサーバーはそれを傍受し、設定に基づいて、squidは接続を許可または拒否します。 つまり 「挨拶」を見るためにインターセプトされ、接続を許可またはドロップしました。



1.4ピークアンドスプライスの長所と短所



長所:



-これはMITM攻撃ではなく、銀行のクライアントには問題ありません

-https経由でリクエストされたサイトの統計でのドメイン名の表示



短所:



-残念ながら、MITM攻撃中にどのWebページが開かれたかを正確に確認することは不可能です

-この設定はCentOSでのみうまく機能しました(しばらくの間カーネルパニックが発生した後、Debianで問題が発生しました)



1.5そして、今、与えられたものに注目する価値があります



-Active Directory 2012R2(ユーザー認証方法-Kerberos)10.0.0.9のホスト

-CentOS 7(x64)のホスト(別名wpad.datアップロード用のWebサーバー、別名プロキシサーバー)10.0.0.10

-Windowsでホストをテストして、操作10.0.0.11をテストします

「行こう」ガガーリン・ユ・ア


2オペレーティングシステムの設定とSquidのインストール



CentOSのインストールプロセスを説明する意味はありません。 したがって、CentOS 7 x64を新たにインストールしたことに留意してください。 したがって、Squidがhttpトラフィックとhttpsトラフィックで同等に機能するには、次のものが必要です。



2.1このようなパラメーターを使用してSquidをコンパイルする必要があります



イカ-v
$ squid -v

Squid Cache:バージョン3.5.16

サービス名:squid

設定オプション: '--build = x86_64-redhat-linux-gnu' '--host = x86_64-redhat-linux-gnu' '--program-prefix =' '--prefix = / usr' '--exec- prefix = / usr '' --bindir = / usr / bin '' --sbindir = / usr / sbin '' --sysconfdir = / etc '' --datadir = / usr / share '' --includedir = / usr / include '' --libdir = / usr / lib64 '' --libexecdir = / usr / libexec '' --sharedstatedir = / var / lib '' --mandir = / usr / share / man '' --infodir = / usr / share / info '' --verbose '' --exec_prefix = / usr '' --libexecdir = / usr / lib64 / squid '' --localstatedir = / var '' --datadir = / usr / share / squid '' --sysconfdir = / etc / squid '' --with-logdir = $(localstatedir)/ log / squid '' --with-pidfile = $(localstatedir)/run/squid.pid '' --disable -dependency-tracking '' --enable-follow-x-forwarded-for '' --enable-auth '' --enable-auth-basic = DB、LDAP、NCSA、NIS、PAM、POP3、RADIUS、SASL、 SMB、getpwnam、fake '' --enable-auth-ntlm = smb_lm、fake '' --enable-auth-digest = file、LDAP、eDirectory '' --enable-auth-negotiate = kerberos、wrapper ''- enable-external-acl-helpers = wbinfo_group、kerberos_ldap_group、LDAP_group、delayer、file_userip、SQL _session、unix_group、session、time_quota '' --enable-cache-digests '' --enable-cachemgr-hostname = localhost '' --enable-delay-pools '' --enable-epoll '' --enable-icap -client '' --enable-ident-lookups '' --enable-linux-netfilter '' --enable-removal-policies = heap、lru '' --enable-snmp '' --enable-storeio = aufs、 diskd、ufs、rock '' --enable-wccpv2 '' --enable-esi '' --enable-ssl-crtd '' --enable-icmp '' --with-aio '' --with-default- user = squid '' --with-filedescriptors = 16384 '' --with-dl '' --with-openssl '' --with-pthreads '' --with-included-ltdl '' --disable-arch-ネイティブ '' --enable-ecap '' --without-nettle '' build_alias = x86_64-redhat-linux-gnu '' host_alias = x86_64-redhat-linux-gnu '' CFLAGS = -O2 -g -pipe -Wall- Wp、-D_FORTIFY_SOURCE = 2 -fexceptions -fstack-protector-strong --param = ssp-buffer-size = 4 -grecord-gcc-switches -m64 -mtune = generic '' LDFLAGS = -Wl、-z、relro '' CXXFLAGS = -O2 -g -pipe -Wall -Wp、-D_FORTIFY_SOURCE = 2 -fexceptions -fstack-protector-strong --param = ssp-buffer-size = 4 -grecord-gcc-switches -m64 -mtune = generic -fP IC '' PKG_CONFIG_PATH =:/ usr / lib64 / pkgconfig:/ usr / share / pkgconfig '—enable-ltdl-convenience



または、アセンブルされたsquidとその依存関係を含むアーカイブをダウンロードできます。



2.2公式リポジトリから必要なパッケージをインストールする



squidをインストールするにはいくつかの依存関係が必要であることに注意してください。 残念ながら、CentOSの公式リポジトリはかなり少ないため、一部のパッケージは非公式のものからダウンロードする必要があります。 リポジトリから必要なパッケージをインストールします。



# yum install -y libtool-ltdl perl-DBI perl-Digest-MD5 cyrus-sasl-gssapi krb5-workstation
      
      





2.3 Squidおよびオプションパッケージの手動インストール



 # rmp -Uvh squid-3.5.8-4.el7.centos.x86_64.rpm libecap-1.0.0-3.el7.centos.x86_64.rpm squid-helpers-3.5.8-4.el7.centos.x86_64.rpm perl-Crypt-OpenSSL-X509-1.803-4.el7.x86_64.rpm
      
      





何かが間違っている場合、不足しているものが端末に表示されます。



2.4スワップディレクトリのパーミッションを設定する



 # chown squid:squid /var/spool/squid
      
      





2.5構成ファイル/etc/squid/squid.conf



squid.conf
###ケルベロスの交渉

auth_paramネゴシエートプログラム/ usr / lib64 / squid / negotiate_kerberos_auth -s HTTP/sq.example.ru@EXAMPLE.RU

auth_paramは子60をネゴシエートします

auth_paramネゴシエートkeep_aliveオフ



external_acl_type inet_medium ttl = 300 negative_ttl = 60%LOGIN / usr / lib64 / squid / ext_kerberos_ldap_group_acl -g Internet-medium@EXAMPLE.RU

external_acl_type inet_full ttl = 300 negative_ttl = 60%LOGIN / usr / lib64 / squid / ext_kerberos_ldap_group_acl -g Internet-full@EXAMPLE.RU

external_acl_type inet_low ttl = 300 negative_ttl = 60%LOGIN / usr / lib64 / squid / ext_kerberos_ldap_group_acl -g Internet-low@EXAMPLE.RU



acl localnet src 10.0.0.0/24

acl localnet src 192.168.0.0/24



acl my_full外部inet_full

acl my_medium外部inet_medium

acl my_low外部inet_low

acl auth proxy_auth必須



#デフォルトの443に加えて、オンラインビジネスでは追加が必要です。 ポート9443

acl SSL_portsポート443 9443

acl Safe_portsポート80#http

acl Safe_portsポート21#ftp

acl Safe_portsポート443#https

acl Safe_ports port 70#gopher

acl Safe_portsポート210#wais

acl Safe_ports port 1025-65535#未登録ポート

acl Safe_portsポート280#http-mgmt

acl Safe_portsポート488#gss-http

acl Safe_portsポート591#ファイルメーカー

acl Safe_ports port 777#multiling http

acl CONNECTメソッドCONNECT



#この構成では、ホワイトリストはユーザーグループInternet-low@EXAMPLE.RUの許可されたサイトのリストです(whitelist.txtにあるサイトのみにアクセスできます)

#また、blocked_http.txt-Internet-medium@EXAMPLE.RUグループの禁止サイトのリスト(blocked_http.txt内のサイトを除くすべてのサイトにアクセスできます)

acl white_list dstdomain "/etc/squid/whitelist.txt"

acl black_list dstdomain "/etc/squid/blocked_http.txt"

dns_nameservers 10.0.0.9



#アクセス規則



http_access deny!Safe_ports

http_access deny CONNECT!SSL_ports

http_access allow localhost manager

http_access拒否マネージャー

http_access deny!auth



http_access deny my_medium black_list

http_access allow my_medium

http_access allow my_low white_list

http_access deny my_low all

http_access allow my_full

#ローカルホストを許可

http_access allow localhost



#他のすべてを禁止する

http_accessすべて拒否



#クライアントホストがプロキシサーバーと対話するための不透明なポート



http_port 10.0.0.10:3130 options = NO_SSLv3:NO_SSLv2



always_directすべて許可

sslproxy_cert_errorすべて許可

sslproxy_flags DONT_VERIFY_PEER



#このオプションは、peek-n-spliceが正しく機能するために必要です。 blocked_https.txtファイル自体は何にも影響しませんが、空にしないでください。 魔法。





ACLブロックssl :: server_name "/etc/squid/blocked_https.txt"

acl step1 at_step sslbump1

ssl_bumpピークステップ1



#クライアントが禁止されたリソースにアクセスした場合、接続を終了します

ssl_bump終了ブロック

ssl_bump splice all



coredump_dir / var / spool / squid

refresh_pattern ^ ftp:1440 20%10080

refresh_pattern ^ gopher:1440 0%1440

refresh_pattern -i(/ cgi-bin / | \?)0 0%0

refresh_pattern。 0 20%4320



cache_dir aufs / var / spool / squid 20000 49 256

maximum_object_size 61440 KB

minimum_object_size 3 KB



#httpd_suppress_version_string on

#visible_hostname PROXYSERVER



cache_swap_low 90

cache_swap_high 95

maximum_object_size_in_memory 512 KB

memory_replacement_policy lru

logfile_rotate 4



2.6最初に、このコンテンツにファイル/ etc / hostsを持ってくる必要があります



 127.0.0.1 localohost 10.0.0.10 sq.example.ru sq
      
      





2.7 selinuxの構成



ファイル/ etc / selinux / configの値は次のとおりです。

 SELINUX=enforcing
      
      





selinuxを使用するためのパッケージをインストールします。

 # yum install policycoreutils-python
      
      





selinuxルールを追加する



squidへの接続を許可します。

 # setsebool -P squid_connect_any on
      
      





Kerberosを許可:

 # setsebool -P allow_kerberos on
      
      





ポート3130でのsquidへの接続を許可します。

 # semanage port -a -t squid_port_t -p tcp 3130
      
      





selinux設定を変更したら、システムを再起動してそれらを適用する必要があります。

 # reboot
      
      







2.8スワップ生成



 # squid -z
      
      





2.9 squidデーモンの有効化、設定ファイルの確認



 # systemctl enable squid # squid -k parse
      
      





警告とエラーはありません。 何かがある場合は、設定を確認する必要があります。



2.10トラフィック転送を許可する



 # echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
      
      





その場で設定を適用します。

 # sysctl -p
      
      







3 Active Directory 2012R2ドメインコントローラーとの統合



ドメインユーザーがKerberosプロトコルを使用してプロキシサーバーにログインできるように、ドメインコントローラーとの統合が必要です。 最も合理的な解決策は、この方法が最も安全であり、承認が自動的に行われるという事実を考慮して、Kerberosのみを残すことです。 ドメイン外にあるクライアントマシンについては、ここで問題はありません。認証ポップアップウィンドウでログインとパスワードを手動で入力できます。 チェック済み、動作します。



3.1構成ファイル/etc/krb5.conf



構成ファイル/etc/krb5.confは、次のように縮小する必要があります。



krb5.conf
[libdefaults]

default_realm = EXAMPLE.RU

ticket_lifetime = 24h

default_keytab_name = /etc/krb5.keytab



[レルム]

EXAMPLE.RU = {

kdc = dc1.example.ru

admin_server = dc1.example.ru

default_domain = example.ru

}



[domain_realm]

.example.ru = EXAMPLE.RU

example.ru = EXAMPLE.RU



3.2 DNSレコードの作成



Active DirectoryがDNSに密接に結びついていることは誰もが知っていることであり、認証が正しく機能するためには、ホスト名とそのIPアドレス(ホストアドレス(AまたはAAA))を作成する必要があります)



3.3ドメイン統合オプション



そのため、ドメイン統合オプションには2つの椅子があります。 最初のオプション-Windows( ktpass )を使用し、2番目のオプション-LinuxMsktutil )を使用します。 Windowsオプションは、 squidユーザーのパスワードの有効期限を無効にできるという点で優れています。 Linuxバージョンは、コンピューターアカウントを作成することでドメインに入力できるため、優れています。



3.3.1 Windows統合



ADでユーザーを作成します(例: squid)

ここでkrb5.keytabを生成します 。 管理者権限を持つドメインコントローラーのコマンドプロンプトで、次のコマンドを実行する必要があります。



 C:\Windows\system32> ktpass -princ HTTP/sq.example.ru@EXAMPLE.RU -mapuser squid@EXAMPLE.RU -crypto rc4-hmac-nt -pass Pa$$wd12 -ptype KRB5_NT_PRINCIPAL -out C:\
      
      





krb5.keytab ファイル自体は、 sq.example.ru上の/ etcディレクトリに移動できます (WinSCPを使用できます)。



3.3.2 Linuxの統合



squidと依存関係のあるアーカイブには、msktutilも添付されています。インストールしてください:



 # rpm -Uhv msktutil-0.5.1-2.el7.x86_64.rpm
      
      







次のコマンドを実行します。



 # msktutil -c -b "CN=COMPUTERS" -s HTTP/sq.example.ru -k /etc/krb5.keytab --computer-name sq-k --upn HTTP/sq.example.ru --server dc1.example.ru --verbose --enctypes 28
      
      





成功した場合、コマンドの出力は素晴らしいものになります。ここにはポイントがありません。 エラーと警告はすべきではありません。 --computer-name sq-kはタイプミスではないことに注意する価値があります。 ホスト名は異なっている必要があります。



コンピューターアカウントのパスワードを更新する必要があるため、これはcronを使用して実行できます。

  # crontab -e
      
      





タスクを追加する必要があります。

 00 3 * * * msktutil --auto-update --verbose --computer-name sq-k
      
      







3.4 krb5.keytabファイルの推奨される許可



krb5.keytabを移動した後、ファイルのパーミッションを下げることをお勧めします



 # chown squid:squid /etc/krb5.keytab && chmod 644 /etc/krb5.keytab
      
      





3.5 ADアクセスグループ



OU ユーザーの ActiveDirectoryではインターネットアクセスの配布に応じて Internet- full、 Internet-mediumInternet-lowの 3つのグループを作成する必要があります。



3.6認可チェック



/etc/krb5.keytabファイルを使用したActive Directoryでの承認の確認



 # kinit -V -k -t /etc/krb5.keytab HTTP/sq.example.ru@EXAMPLE.RU
      
      





コマンドからの出力は次のようになります。



 Using default cache: /tmp/krb5cc_0 Using principal: HTTP/sq.example.ru@EXAMPLE.RU Using keytab: /etc/krb5.keytab Authenticated to Kerberos v5
      
      





また、 klistは次を表示する必要があります。



klist
チケットキャッシュ:FILE:/ tmp / krb5cc_0

デフォルトのプリンシパル:HTTP/sq.example.ru@EXAMPLE.RU



有効な開始有効期限サービスプリンシパル

10/09/2016 10:19:20 10/10/2016 08:19:20 krbtgt/EXAMPLE.RU@EXAMPLE.RU

10/10/2016 10:19:20 PMまで更新



これでSquidのセットアップはほぼ完了しました。ホストを再起動して設定を適用します。 テストのためにリブートした後、ポート3130を指定することによりsq.example.ru設定でプロキシを手動で登録できます。



4 WPAD



4.1 apache2 Webサーバーのインストールと設定



Webサーバーのインストール:



 # yum install -y httpd
      
      





インストール後、スタートアップに含めます:



 # systemctl enable httpd
      
      





以下を開始します。



 # systemctl start httpd
      
      





ブラウザでsq.example.ruドメイン名を開こうとすると、apache2テストページが開きます。



次に、次の内容の/ var / www / html / wpad.datファイルを作成する必要があります。



wpad.dat
関数FindProxyForURL(URL、ホスト)

{

// var ip_host = dnsResolve(ホスト);

// var localnet = "192.168.0.0";

// var localhost = "127.0.0.0";

// var localnet = "10.0.0.0";

if(isInNet(host、 "192.168.0.0"、 "255.255.255.0")||

isInNet(ホスト、「10.0.0.0」、「255.255.255.0」)||

isInNet(ホスト、「127.0.0.0」、「255.0.0.0」)||

shExpMatch(ホスト、「* .example.ru」))

{「DIRECT」を返す; }

if(dnsDomainIs(host、 "* .inet-example.ru"))

{「DIRECT」を返す; }

return "PROXY sq.exmaple.ru:3130";

}



4.2 wpad.datファイルの説明



デフォルトでは、/ var / www / html / wpad.datディレクトリで、ファイルは追加のapache2設定なしで全員に与えられます。これは、Windows上のクライアントマシンとの正しい対話に必要です。







 if (isInNet( host, "192.168.0.0", "255.255.255.0") || isInNet( host, "10.0.0.0", "255.255.255.0") ||
      
      





これは、192.168.0.0 / 24、10.0.0.0 / 24、および127.0.0.0/8サブネット(後者はlocalhostにアクセスするときにサービスが正しく機能するために必要です)上のホストへの呼び出しが直接転送され、.exampleドメインホストへの接続も直接転送されることを意味します.ru:



行:



 if (dnsDomainIs( host, "*.inet-example.ru" )) { return "DIRECT"; }
      
      





ドメイン名にアクセスするときに.inet-example.ruが直接発生することを示します



要求されたリソースが上記の条件に該当しない場合、次のことが当てはまります。



 return "PROXY sq.exmaple.ru:3130";
      
      





4.3 CNAMEの作成



Active Directory DNSサーバーで、 sq.example.ruに cname wpad (FQDN wpad.example.ru)を作成します。



確認するには、ブラウザでwpad / wpad.datを開く必要があり、wpad.datファイルが自動的にダウンロードされます。 したがって、すべてのホストは指定されたファイルをダウンロードし、コンテンツから続行します。 ファイルがダウンロードされるように、Windows OS上のドメイン内のすべてのコンピューターを再ログまたは再起動することをお勧めします。



5統計



5.1ソースからのSARGのインストール



gccがまだインストールされていない場合、今がその時です。



 # yum install -y gcc gd gd-devel make wget # wget http://liquidtelecom.dl.sourceforge.net/project/sarg/sarg/sarg-2.3.10/sarg-2.3.10.tar.gz # tar -xvzf sarg-2.3.10.tar.gz # cd sarg-2.3.10 # ./configure # make
      
      





po / Makefile.in.inファイルでは、gettextバージョンは0.18に指定されているため、makeインストール中にエラーが発生しないため、0.19に変更する必要があります。



 # make install
      
      





5.2 SARGの構成



標準の設定ファイル/usr/local/etc/sarg.confをバックアップすることをお勧めします。



 # mv /usr/local/etc/sarg.conf /usr/local/etc/sarg.conf.default
      
      





次に、次の内容でsarg.confファイルを作成します。



 access_log /var/log/squid/access.log output_dir /var/www/html/squid-reports date_format e overwrite_report yes language UTF-8
      
      





5.3 cronを使用したレポートのスケジュール



 # crontab -e
      
      





次の行を追加します。



 55 23 * * * /usr/local/bin/sarg -xd day-0
      
      





この行は、毎日23:55にレポートが生成されることを示しています



5.4 Webサーバーの構成



以前にインストールされたWebサーバーでは、レポートを表示するタスクと、承認のためのログインとパスワードの入力を要求するタスクを割り当てることもできます。 次の内容で/etc/httpd/conf.d/sarg.confファイルを作成します。



sarg.conf
エイリアス/レポート/ var / www / html / squid-reports /



<ディレクトリ/ var / www / html / squid-reports />



AuthType Basic

AuthName「基本認証」

AuthUserFile /etc/httpd/conf/.htpasswd

有効なユーザーが必要

AddDefaultCharset UTF-8





5.5統計付きのサイトでの承認



認証のためのログインおよびパスワードファイルの生成



 # htpasswd -c /etc/httpd/conf/.htpasswd administrator
      
      





apache2を再起動します



 # systemctl restart httpd
      
      





sq.example.ru/reportsを開こうとすると、ログイン名とパスワードの入力を求められます。 認証が成功した場合、統計を表示できます。



6グループポリシー



ここのすべては曖昧であり、いくつかの機能に依存する場合があります。 現在のタスクでは、ユーザープロキシサーバーのインストール、または「設定の自動検出」の無効化の可能性を除外することが合理的な決定でした。



6.1 GPOの編集



プロキシサーバーの入力またはパラメーターの自動決定の設定の変更を禁止するには、グループポリシーを使用できます。 グループポリシーを作成し、 officeなどのOUに関連付けます。



グループポリシーの編集:



ユーザー→ポリシー→管理用テンプレート→Windowsコンポーネント→Internet Explorer


このディレクトリで、パラメータを見つけて「有効」ステータスに変換します。



「プロキシ設定の変更を禁止する」

「自動設定変更を無効にする」


結論として、私はこれを言うことができます、この構成は2016年の春から現在まで正常に機能しており、それ自体が優れていることが証明されています。 すべての質問にお答えできてうれしいです。



UPD No. 1:11/12/16

1ポート3128および3129の余分な行がsquid構成から削除されました。

2にはselinuxが含まれ、ルールが追加されました。

3証明書の生成がマニュアルから削除されました(それがなくても機能します)

4マイナーな修正

UPD No. 2:11.20.16

1 krb5.conf構成から余分な行が削除されました

2 Msktutilを介したADとの統合方法を追加

3追加された転送

4 squidと依存関係を含む更新されたアーカイブ



All Articles