Squid と DansGuardian を使った透過プロキシの設定とトラブルシュート
重要: この文書は既存の設定ファイルを上書きする作業を含みます。作業前に必ずバックアップを取り、テスト環境で検証してください。
目的と想定
- 目的: ドメイン参加済みクライアントで自動 NTLM 認証を通し、Web フィルタリングを透過的に提供する。
- 想定環境: Ubuntu 系サーバー、Squid、DansGuardian、Samba/winbind、ipmasq、Webmin が利用可能。
- 用語: NTLM — Windows の統合認証プロトコル。透過プロキシ — クライアント側でプロキシ設定不要でトラフィックを差し替える方式。
1. 準備
- サーバー上で管理者(root)権限を持つこと。
- 変更前に構成ファイルをバックアップする。
例:
cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
nano -c /etc/squid/squid.conf
重要: 編集は慎重に行い、行番号参照がある場合は実際のファイルで行番号を確認してください。ファイルの行番号はバージョンやディストリにより変化することがあります。
2. Squid の設定
手順:
- /etc/squid/squid.conf を編集します。
- 次の変更を行います(行番号は元記事の指示に従った例です。あなたのファイル要確認)。
- line 73 を次に変更:
http_port 127.0.0.1:3128 transparent
- line 74 を次に変更:
http_port 8080
- line 593 を次に変更:
cache_peer 127.0.0.1 parent 8081 0 no-query login=*:nopassword
- NTLM/Basic 認証 helper の有効化(アンコメントと置換):
- line 1791 through 1783 をアンコメントして、
を次に置換:
/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
- line 1800 through 1803 をアンコメントして、
を次に置換:
/usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
- 追加の ACL とアクセス許可の変更:
- line 2449 を次に変更:
acl ntlm_auth proxy_auth REQUIRED
- line 2579 を次に変更:
http_access allow ntlm_auth
- line 3161 を次に変更(重要):
forwarded_for off
重要: forwarded_for がデフォルトのままだと、内部クライアントの IP が訪問先サイトに送信されるためプライバシー上の問題になります。
設定変更後、ファイルを保存してください。
3. winbind の権限問題と自動修正スクリプト
問題: Squid が /var/run/samba/winbindd_privileged にアクセスできないと NTLM 認証が失敗します。手動で権限を修正できますが、再起動すると戻るため起動時に権限を固定するスクリプトを導入します(原文では Jesse Waters による投稿を利用)。
/etc/init.d/winbind-ch.sh を編集して次の内容を貼り付けます(ファイルの内容は正確に次の通り)。
#!/bin/sh
#set -x
WINBINDD_PRIVILEGED=/var/run/samba/winbindd_privileged
chmodgrp() {
chgrp proxy $WINBINDD_PRIVILEGED || return 1
chmod g+w $WINBINDD_PRIVILEGED || return 1
}
case "$1" in
start)
chmodgrp
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac
#EOF
続けて起動時に有効化します:
update-rc.d winbind-ch.sh start 21 2 3 4 5 .
注: システムによっては systemd ユニットで同等の処理を行う方が好ましい場合があります。systemd を利用している場合は unit ファイルを作成し ExecStartPre で権限を設定する方法を検討してください。
4. DansGuardian の設定
手順:
- /etc/dansguardian/dansguardian.conf を編集し、行 3 をコメントアウトします。
- 行 62 のポートを 8080 から 8081 に変更します(Squid と組み合わせるため)。
- 行 102 の filtergroups = 1 を filtergroups = 2 に変更し、グループファイルを複製して作成します。
cp /etc/dansguardian/dansguardianf1.conf /etc/dansguardian/dansguardianf2.conf
nano -c /etc/dansguardian/dansguardianf2.conf
- dansguardianf2.conf の行 29 を次のように変更:
naughtynesslimit = 100
- ウイルス定義サイトは通常スキャンから除外してください。定義配布サイトを /etc/dansguardian/exceptionvirussitelist に追加します(例: activeupdate.trendmicro.com)。
- 同様にサイト例外リストにもドメインを追加します(例: trendmicro.com)。ファイルは /etc/dansguardian/exceptionsitelist です。
再起動:
/etc/init.d/dansguardian restart
注意: ウイルス定義サイトをフィルタすると定義の取得に支障が出るため、例外として扱ってください。
5. ファイアウォールと透過リダイレクト(ipmasq)
ipmasq を使って透過プロキシを実現します。ipmasq は自動でルールを管理するユーティリティです。
apt-get install ipmasq -y
透過プロキシを有効にするため、すべての発信 HTTP リクエストを DansGuardian のポート(ここでは 8081)にリダイレクトします。例として次のルールをコピーします:
cp /usr/share/doc/ipmasq/examples/basics/I89tproxy.rul /etc/ipmasq/rules/I89tproxy.rul
内部サーバーへのポートフォワードが必要な場合は次のサンプルを参照してください:
/usr/share/doc/ipmasq/examples/dnat/C50dnat.rul
ヒント: iptables ルールを直接編集する手順や nftables を利用する方法もあります。ipmasq は簡易運用向けです。
6. DansGuardian の Webmin モジュール導入
Web ブラウザで https://192.168.1.1:10000/ にアクセスし、root でログインします。
Webmin > Webmin Configuration > Webmin Modules を開き、「From ftp or http URL」を選択して以下の URL を貼り付け、モジュールをインストールします:
http://internap.dl.sourceforge.net/sourceforge/dgwebminmodule/dg-0.5.10-pr5.wbm
インストール後、Webmin から設定の確認・微調整が可能になります。
7. テストと検証手順
- サーバーを再起動します。
- ドメインに参加したクライアントのブラウザを、サーバーの IP アドレスとプロキシポート 8080 に設定します(透過プロキシなら設定不要のはずですが、テストでは明示的に指定するとログの確認が楽です)。
- ドメイン参加クライアントでアクセスした場合、自動的に NTLM 認証され、インターネットに接続できることを確認します。
- NTLM が失敗する場合、Internet Explorer はドメイン名\ユーザー名(例: DOMAIN\user)をユーザー名欄に指定する必要があります。
- ドメイン未参加かつプロキシ未設定の別クライアントでもアクセスできるかを確認します。
- Webmin の DansGuardian ログで、ドメイン参加クライアントのユーザー名とアクセスしたサイトが記録されていることを確認します。
注: 非ドメインマシンのログでは、127.0.0.1 が表示される場合があります。これはドメイン参加クライアントが Squid → DansGuardian → Squid の経路を通るためです。
受入基準
- ドメイン参加クライアントが自動 NTLM 認証でインターネットにアクセスできること。
- DansGuardian がフィルタリングログにユーザー名を記録すること。
- 非ドメインクライアントも透過的にフィルタを通過し、アクセスできること。
- syslog に重大なエラーを残さないこと。
管理者チェックリスト
- /etc/squid/squid.conf のバックアップを取った
- squid のポート設定(127.0.0.1:3128, 8080)を反映した
- cache_peer 設定を確認した
- ntlm_auth helper が正しく設定された
- forwarded_for off を適用した
- /etc/init.d/winbind-ch.sh を配置して update-rc.d を実行した
- DansGuardian の filtergroups を増やし、f2 を作成した
- ウイルス定義配布サイトを例外リストに登録した
- ipmasq のルールを配置し、透過リダイレクトを有効にした
- Webmin モジュールをインストールしログを確認した
ロール別簡易作業一覧
- ネットワーク管理者: サーバー設定、ipmasq ルール、ポートフォワーディング、ファイアウォールの監査。
- システム管理者: Squid/DansGuardian の設定、winbind スクリプト管理、サービス自動起動設定。
- ヘルプデスク: クライアントのブラウザ設定確認、NTLM 認証トラブル時のユーザー名入力指導。
トラブルシューティング(よくある問題と対処法)
- 問題: NTLM 認証が失敗する
- 対処: /var/log/squid/cache.log と /var/log/syslog を確認して ntlm_auth のエラーを探す。winbindd が起動しているか、winbind-ch.sh の権限設定が適用されているか確認する。
- 問題: ウイルス定義サイトがブロックされる
- 対処: /etc/dansguardian/exceptionvirussitelist と /etc/dansguardian/exceptionsitelist に該当ドメインを追加する。
- 問題: クライアントの実際の IP が送信される
- 対処: squid.conf で forwarded_for off が設定されているか確認する。設定適用後は squid の再起動が必要。
- 問題: Webmin モジュールが正しく動かない
- 対処: Webmin のログ(/var/webmin/miniserv.error)を確認し、依存ライブラリやファイル権限を見直す。
ログの確認コマンド例:
tail -f /var/log/syslog
tail -f /var/log/squid/cache.log
tail -f /var/log/dansguardian/access.log
ロールバック手順(簡易)
- サーバーで変更前に作成したバックアップを用意する。
cp /etc/squid/squid.conf.bak /etc/squid/squid.conf
- 作成したスクリプトや追加した ipmasq ルールを削除または無効化する。
- サービスを再起動し、元の状態に戻ったことを検証する。
テストケース / 受け入れテスト
- ドメイン参加クライアントから HTTP サイトにアクセスし、ユーザー名が DansGuardian のログに記録されること。
- 非ドメインクライアントから HTTP サイトにアクセスし、フィルタリングとログ記録が行われること。
- ウイルス定義サイトへアクセスできること(例外設定を確認)。
- syslog に重大なエラー(サービス起動失敗や権限エラー)が出ないこと。
セキュリティとプライバシーの注意点
- forwarded_for を off にしたことでクライアントの内部 IP の露出を防げます。企業ポリシーに合わせてログ保持方針を定めてください。
- NTLM 認証は内部ネットワークでの統合認証には便利ですが、外部ネットワークでは HTTPS や別の VPN を利用した保護を検討してください。
よくある失敗例と回避
- 失敗例: 行番号だけを鵜呑みにして設定した
- 回避: 他のディストリ/バージョンでは行番号が異なるので、該当設定行を検索して確実に変更する。
- 失敗例: winbind の権限を一時的に直しただけで再起動後に忘れる
- 回避: 起動時スクリプトまたは systemd ユニットで自動化する。
まとめ
- Squid と DansGuardian を組み合わせることで、透過的なフィルタリングとドメイン統合の認証を実現できます。
- 権限周り(/var/run/samba/winbindd_privileged)と forwarded_for 設定は特に重要です。
- 設定変更後はログを確認し、テストケースを全部通すことを忘れないでください。
参考リンク: