- 追加された行はこの色です。
- 削除された行はこの色です。
#contents
* 目的 [#tba9012a]
-squidのログにAD認証したユーザ名を表示させたい。~
-ADのセキュリティグループ別にユーザがどこにアクセスできるか制限する。~
-外部へ直接抜けるルートはFWにて遮断されている。~
-外部へのwebアクセスはsquidでの直接取得か上位プロキシ経由での取得となる。~
* 実現方法 [#raf60b68]
+ユーザ別アクセス方法
++通常ユーザ~
ADの特定グループ(proxy_unlimit)に所属しているユーザ~
フルアクセスで利用させる~
++制限ユーザ~
ADの特定グループ(proxy_limit)に所属しているユーザ~
イントラネット内の特定サーバに限り利用させる~
++システムユーザ~
ADに所属していないユーザ~
特定サイト(セキュリティアップデートなど)に限り利用させる~
+接続先URL別アクセス方法
++制限なしサイト~
特定サイト(セキュリティアップデートなど)はNTLM認証を実施する場合や~
ADに所属していないユーザからリクエストを受けた場合などで動作できないため~
認証なしでアクセス可とする~
++社内イントラサイト~
ADのセキュリティグループにかかわらずアクセス可とする~
++その他の一般サイト~
ADの特定グループ(proxy_unlimit)に所属するユーザのみアクセス可とする~
* 環境 [#ha46e8c2]
>Active Directory
シングルフォレスト、シングルドメインの構成~
virtual.prosper2.org~
>ADサーバ#1(VMad01:192.168.10.204)~
WindowsServer2008R2SP1(試用版)~
ActiveDirectoryとDNSサービス稼動中~
>ADサーバ#2(VMad02:192.168.10.205)~
WindowsServer2008R2SP1(試用版)~
ActiveDirectoryとDNSサービス稼動中~
#1の情報を自動レプリケーション~
>プロキシ(VMproxy01:192.168.10.201):CentOS6.3~
squid(3.1.10)~
samba(3.5.10)~
yumでのインストール~
[VMproxy01]# yum install squid samba samba-winbind~
>通常上位プロキシ(VMpxext01:192.168.10.202):CentOS6.3~
squid(3.1.10)~
yumでのインストール~
[VMproxy01]# yum install squid~
>ブラウザ(192.168.20.0/24:DHCP):WindowsXP~
InternetExplorer8~
* 作業内容 [#q63a61b3]
** プロキシサーバのAD参加 [#k0ed7401]
*** リゾルバの設定でドメイン名とNSを指定 [#nf69de3b]
#vi /etc/resolv.conf
search VIRTUAL.PROSPER2.LOCAL
nameserver 192.168.10.204
*** hostsファイルに自サーバ名を登録 [#t5a1560f]
#vi /etc/hosts
127.0.0.1 VMproxy01
*** ADに登録されるコンピュータ名を設定 [#hd3aee40]
#vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=VMproxy01
*** 指定したADサーバに登録するための設定 [#za700cc6]
#vi /etc/samba/smb.conf
workgroup = VIRTUAL
server string = VMproxy01
security = ads
hosts allow = 127.
realm = VIRTUAL.PROSPER2.LOCAL
*** 認証系の設定ファイル書き換え(winbindを利用、kerberos認証を利用) [#i563b5a1]
#LANG=en_US ;authconfigがうまく動かない場合があるらしい
#authconfig --enablewinbind --update ;コマンドで/etc/nsswitch.confを書き換えてくれる
#authconfig --krb5kdc=192.168.10.204 --krb5realm=VIRTUAL.PROSPER2.LOCAL --update ;コマンドで/etc/krb5.confを書き換えてくれる
*** プロキシサーバ登録用ユーザをADに作成 [#r1654dff]
ユーザ名:squid~
パスワード:squidpass~
として設定する。~
一応ADのユーザになるわけだから、このユーザ名ではwindowsログオンできないようにしておいたほうがいいのかもしれない。
*** コンピュータをADに登録 [#i7544018]
#/etc/init.d/smb stop
#/etc/init.d/winbind stop ;テストでしくったときに影響を与えないようにサービスとしては停止しておく
# net ads join -U squid ;ADに参加しているユーザを指定(ここではプロキシ動作のためのADユーザを指定)
Enter squid's password:
Using short domain name -- VIRTUAL
Joined 'VMPROXY01' to realm 'virtual.prosper2.org'
No DNS domain configured for vmproxy01. Unable to perform DNS Update.
DNS update failed!
なんかエラーみたいだけどOK。ADで自動インストールされたDNSにも正引き、逆引きで登録しておく。
** 動作チェックなど [#vd96f18b]
*** デーモンの起動と自動起動の設定をいれておく [#c42ab582]
#/etc/init.d/smb start
#/etc/init.d/winbind start
#chkconfig --add smb
#chkconfig --add winbind
#chkconfig smb on
#chkconfig winbind on
*** サービス稼動状況 [#dfb1c62e]
#wbinfo -t
checking the trust secret for domain DOMAIN via RPC calls succeeded
と表示されていればOK(rootでのみ確認可能)
*** ユーザ一覧 [#x02ef5a2]
#wbinfo -u
VIRTUAL\administrator
VIRTUAL\guest
VIRTUAL\krbtgt
VIRTUAL\squid
VIRTUAL\u-limit
VIRTUAL\u-unlimit
でユーザがリストアップされていればOK
*** ユーザ認証 [#zb6e14ba]
#wbinfo -a VIRTUAL.PROSPER2.ORG\\UID%PWD
plaintext password authentication succeeded
challenge/response password authentication succeeded
と表示されていればOK
** sambaとsquidの連携設定(権限追加) [#i01bdb85]
*** squidにwinbindの権限を追加 [#n7f35c56]
# id squid
uid=23(squid) gid=23(squid) groups=23(squid)
# usermod -G wbpriv squid
# id squid
uid=23(squid) gid=23(squid) groups=23(squid),88(wbpriv)
でsquidがwbprivに所属していればOK
** squid.confの修正 [#pad3c7b5]
#基本的な設定~
visible_hostname VMproxy01
#NTLM認証の基本的な設定とACL
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -v 3 -b "OU=ALPHA,DC=VIRTUAL,DC=PROSPER2,DC=ORG" -h 192.168.10.204 -D "CN=squid,OU=ALPHA,DC=VIRTUAL,DC=PROSPER2,DC=ORG" -w squidpass -f "(&(objectclass=person)(sAMAccountName=%u)(memberOf=CN=%g,OU=ALPHA,DC=VIRTUAL,DC=PROSPER2,DC=ORG))" -S
acl gr_unlimit external ldap_group proxy_unlimit
acl gr_limit external ldap_group proxy_limit
acl whitelist url_regex -i "/etc/squid/whitelist.txt"
acl intrasite url_regex -i "/etc/squid/intrasite.txt"
acl clientlist src "/etc/squid/clientlist.txt"
#ADに登録されたメンバーにプロキシ利用の許可を与える
# deny : from unexpected clients
http_access deny !clientlist
# permit : any client to whitelist
# no logging username
http_access allow whitelist
# permit : AD Security Group
# logging username
http_access allow gr_unlimit
http_access allow gr_limit
# deny : default
http_access deny all
# 192.168.10.202 VMpxext01
cache_peer 192.168.10.202 parent 3128 0 no-query
# permit : any client to whitelist
cache_peer_access 192.168.10.202 allow whitelist
# permit : Unlimit group to any
cache_peer_access 192.168.10.202 allow gr_unlimit
# permit : Limit group to intrasite
cache_peer_access 192.168.10.202 allow gr_limit intrasite
cache_peer_access 192.168.10.202 deny gr_limit !intrasite
cache_peer_access 192.168.10.202 deny all
always_direct allow intrasite
never_direct allow all
** その他の注意事項など [#y370de44]
***ログ表示 [#oc1d2b8f]
#tailf /var/log/squid/access.log
1357570423.423 0 192.168.20.35 TCP_DENIED/407 4670 GET http://www.google.co.jp/ - NONE/- text/html
1357570423.815 373 192.168.20.35 TCP_MISS/200 25077 GET http://www.google.co.jp/ VIRTUAL\XXXX DIRECT/74.125.235.120 text/html
リターンコード407で認証が必要とされたあとにすぐ200で正常に完了している。
*** 設定ファイルの反映 [#h6b1d7c2]
whitelist.txt,intrasite.txt,clientlist.txt は squid の通常ACLを利用しているため~
テキストファイルを反映しても、設定ファイルの再読み込み(reload)をしないと
反映されない。
*** ログへのユーザ名表示 [#b1ed60a5]
ユーザ名は squid.conf のhttp_access ラインで判断するため http_accessのACLにユーザ判別の~
処理が含まれていないと表示することができない。~
そのため、whitelistのアクセス時にはユーザ名がロギングされない。
*** ホワイトリストの更新 [#p9752430]
システムユーザおよび制限ユーザがアクセスできるホワイトリストはアクセスしたいURLだけでなく~
同時に読み込まれるURLについても許可してあげないと、挙動がおかしくなる可能性があるので、注意~
(下記コンフィグにあるように、microsoftのサイトだが、別ドメインのファイルを読んでいる)~
制限ユーザであれば、アクセスできないだけだが、システムユーザだと407で弾かれるため、~
ブラウザでのポップアップやバックグラウンドで動作するプログラムでは正常に動作しない可能性がある。~
* 設定ファイル [#c125c949]
** squid.conf [#c9942f79]
[root@VMproxy01 ~]# cat /etc/squid/squid.conf
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -v 3 -b "OU=ALPHA,DC=VIRTUAL,DC=PROSPER2,DC=ORG" -h 192.168.10.204 -D "CN=squid,OU=ALPHA,DC=VIRTUAL,DC=PROSPER2,DC=ORG" -w squidpass -f "(&(objectclass=person)(sAMAccountName=%u)(memberOf=CN=%g,OU=ALPHA,DC=VIRTUAL,DC=PROSPER2,DC=ORG))" -S
acl gr_unlimit external ldap_group proxy_unlimit
acl gr_limit external ldap_group proxy_limit
acl whitelist url_regex -i "/etc/squid/whitelist.txt"
acl intrasite url_regex -i "/etc/squid/intrasite.txt"
acl clientlist src "/etc/squid/clientlist.txt"
acl manager proto cache_object
acl localhost src localhost
acl localhost src 127.0.0.1/32
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
# deny : from unexpected clients
http_access deny !clientlist
# permit : any client to whitelist
# no logging username
http_access allow whitelist
# permit : AD Security Group
# logging username
http_access allow gr_unlimit
http_access allow gr_limit
# deny : default
http_access deny all
# 192.168.10.202 VMpxext01
cache_peer 192.168.10.202 parent 3128 0 no-query
# permit : any client to whitelist
cache_peer_access 192.168.10.202 allow whitelist
# permit : Unlimit group to any
cache_peer_access 192.168.10.202 allow gr_unlimit
# permit : Limit group to intrasite
cache_peer_access 192.168.10.202 allow gr_limit intrasite
cache_peer_access 192.168.10.202 deny gr_limit !intrasite
cache_peer_access 192.168.10.202 deny all
always_direct allow intrasite
never_direct allow all
# Squid normally listens to port 3128
http_port 3128
# We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?
# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256
# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid
# Add any of your own refresh_pattern entries above these.
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
visible_hostname VMproxy01
** whitelist.txt [#jca7e7bd]
[root@VMproxy01 ~]# cat /etc/squid/whitelist.txt
adobe.com
adobe.co.jp
adobe.jp
windowsupdate.com
windowsupdate.co.jp
microsoft.com
microsoft.co.jp
aspnetcdn.com
webtrends.com
jquery.com
msn.com
atdmt.com
** intrasite.txt [#v4fe7349]
[root@VMproxy01 squid]# cat /etc/squid/intrasite.txt
www.prosper2.org
taruo.net
ugtop.com
** clientlist.txt [#l31f824c]
[root@VMproxy01 squid]# cat /etc/squid/clientlist.txt
192.168.10.0/24
192.168.20.0/24
~
~
#counter