サイト管理者の中には組織内のセキュリティ確保を考慮して、ユーザが利用するクライアント端末のOSやブラウザを制限したい場合があるかも知れません。
例えば、セキュリティサポートが終了してしまったWindows 95/98、また間もなくサポートの終了するWindows XPなどからのアクセスや、セキュリティ的に問題のある古いブラウザ(IE4,
IE5, IE6)などからのインターネットアクセスを強制的に排除したいかも知れません。
squidにアクセスしたユーザがどんなOSやブラウザを使っているかは、クエストされたHTTPプロトコル上のUser-Agentヘッダーを調べることができます。
squidは、ACLとしてこのUser-Agentを確認する方法が用意されており、このACLを使いアクセス制御を行うことで特定のOSやブラウザからのアクセスを制限することが可能です。
取りあえず自分のブラウザがどんなUser-Agentヘッダーを出しているかを見てみましょう。 squid を使っている環境でブラウザを起動して、存在しない適当なURL(ex.
http://www.aaa.bbb.ccc.jp )をアクセスしてみてください。以下のような画面になると思います。
ここでProxy管理者への連絡用リンク(上記では"root")をクリックしてみてください。するとメールクライアントが起動して次のような画面が表示されると思います。
表示されたメール本文にクライアントがリクエストした際のHTTPパケットの内容が自動的に貼り付けられています。 ここの「User-Agent:
」がクライアントがクエストした際のUser-Agentヘッダーになります。
User-Agentに書かれている意味はこちらを参考にしてください。
バージョントークンを調べることでブラウザのバージョンが、またプラットフォームトークンを調べることで端末のOSの種類が判断できます。
例えば、IEのバージョンは次のように分類できます。
バージョントークン | 説明 |
---|---|
rv:11.0 | Internet Explorer 11 |
MSIE 10.0 | Internet Explorer 10 |
MSIE 9.0 | Internet Explorer 9 |
MSIE 8.0 | Internet Explorer 8 |
MSIE 7.0 | Internet Explorer 7 |
MSIE 7.0b | Internet Explorer 7(Beta 1 プレリリース バージョンのみ |
MSIE 6.0 | Internet Explorer 6 |
MSIE 6.0b | Internet Explorer 6(プレリリース) |
MSIE 5.5 | Internet Explorer 5.5 |
MSIE 5.01 | Internet Explorer 5.01 |
MSIE 5.0 | Internet Explorer 5 |
MSIE 5.0b1 | Internet Explorer 5(プレリリース) |
MSIE 4.01 | Internet Explorer 4.01 |
また、Windowsの種類は次のようなプラットフォームに分類できます。
プラットフォームトークン | 説明 |
---|---|
Windows NT 6.3 | Windows 8.1 |
Windows NT 6.2 | Windows 8 |
Windows NT 6.1 | Windows 7 |
Windows NT 6.0 | Windows Vista |
Windows NT 5.2 | Windows Server 2003; Windows XP x64 Edition |
Windows NT 5.1 | Windows XP |
Windows NT 5.01 | Windows 2000, Service Pack 1 (SP1) |
Windows NT 5.0 | Windows 2000 |
Windows NT 4.0 | Microsoft Windows NT 4.0 |
Windows 98; Win 9x 4.90 | Windows Millennium Edition (Windows Me) |
Windows 98 | Windows 98 |
Windows 95 | Windows 95 |
Windows CE | Windows CE |
以下では、ACLによるアクセス制御を実施するために必要な設定について説明します。 なお、設定を行うファイルは次のファイルとなります。
ファイル名 | CentOS, Redhat | Debian, Ubuntu | 備考 |
---|---|---|---|
squid.conf | /etc/squid/squid.conf | /etc/squid3/squid.conf (Squid3の場合) /etc/squid2/squid.conf (Squid2の場合) |
|
エラーメッセージ フォルダ |
/usr/share/squid/errors/ja /usr/share/squid/errors/en |
/usr/share/squid-langpack/Japanese /usr/share/squid-langpack/English |
(日本語) (英語・デフォルト) |
squid.conf ファイルに対してACLを使ったアクセス制御を設定していきます。
上記の設定の内容は以下の通りです。
設定内容 | 備考 |
---|---|
acl DenyOS browser -i windows.95 acl DenyOS browser -i windows.98 acl DenyOS browser -i windows.me acl DenyOS browser -i windows.nt.5\.1 acl DenyOS browser -i windows.nt.4\.0 acl DenyBrowser -i MSIE.4 acl DenyBrowser -i MSIE.5 acl DenyBrowser -i MSIE.6 acl DenyBrowser -i MSIE.7 |
DenyOSとDenyBrowserいう名前でACLを定義します。 DenyOSではUser-Agentに含まれるトークン古いWindowsのものを判定します。 DenyBrowserには、古いIEとして判断するトークンを指定しています。 なお判断するトークン文字列は正規表現で指定できます。"-i" を指定することで大文字と小文字を区別しません。 正規表現について詳しい説明はここで行いませんが、"windows.95" の意味は > "windows"の後に何か1文字(.)があり、その後が "95" となる文字列 を意味します。また、"\"マークはその直後の文字をそのまま評価するという意味です。 |
http_access deny DenyOS http_access deny DenyBrowser |
ACLのDenyOSとDenyBrowserで指定されたトークンを使ってアクセスしてきた端末からの接続を拒否します。 |
deny_info ERR_SECURITY_DENY DenyOS deny_info ERR_SECURITY_DENY DenyBrowser |
DenyOSとDenyBrowserで拒否した場合のエラーメッセージとしてここでは ERR_SECURITY_DENY というファイルを使用します。 |
エラーメッセージフォルダ(日本語用)に ERR_SECURITY_DENY という名前でエラー表示のためのコンテンツファイルを作成します。 内容としては以下のような形で良いかと思います。
なお作成するファイルはUTF-8形式で保存してください。
英語版のメッセージが必要な場合には上記を参考にしてファイルを作成しエラーメッセージフォルダ(英語用)に ERR_SECURITY_DENY という名前で保存してください
参考: