TL;DR
- 不要なコンテンツ(広告など)の取得をブロックするために,SquidとSquidGuardをゲートウェイとなるルータにインストールします
- Squidでキャッシュもできますが,家庭内での利用であるから,ブラウザのキャッシュで十分だろうと判断し,特段の設定はせず,コンテンツフィルタのみを行います
- キャッシュを使いたい場合は,/etc/squid/squid.confに必要な設定を追加することで,実現できます
- 「小規模LANの構築ノウハウ」シリーズの続きですが,この記事だけ読むこともできます
- Squidでキャッシュもできますが,家庭内での利用であるから,ブラウザのキャッシュで十分だろうと判断し,特段の設定はせず,コンテンツフィルタのみを行います
ネットワーク環境
- 以下のネットワーク構成で,ホストgwでSquid(Proxy)サーバを立てます
- gwは Debian 9 がインストールされており,
eth1->eth0
のルーティングが行われている状態からスタートします
- gwは Debian 9 がインストールされており,
- プロキシする際,SquidGuardを参照し,登録した禁止ドメイン,禁止URLに対するリクエストは,別のアドレス(ローカルホストのWebサーバ)にリダイレクトすることで,アクセスしないようにします
Squid+SquidGuardのインストール
パッケージマネージャでインストール
-
aptitude
コマンドで,squid3とsquidguardをインストールします
aptitude install -y squid3 squidguard
# 設定ファイルのコピー
cp /etc/squid/squid.conf /etc/squid/squid.conf.orig
# squidguardの設定ファイルは新しく作るので,参考のためリネームしておく
mv /etc/squidguard/squidGuard.conf /etc/squidguard/squidGuard.conf.orig
Squidの設定
- 以下のように設定ファイルを編集し,Squidの設定をします
vi /etc/squid/squid.conf
# TAG位置を検索して,該当する行を変更します
# squidGuardのリストにマッチした場合は,設定ファイルにしたがってURLを書き換えるように指定
url_rewrite_program /usr/bin/squidGuard -c /etc/squidguard/squidGuard.conf
acl CONNECT method CONNECT
# ↑の行の下に,アクセス許可範囲を記述
acl lan src 192.168.100.0/24
http_access allow lan
# 匿名性の向上
request_header_access Referer deny all
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all
# 内部IPアドレスを通知しない
forwarded_for off
SquidGuardの設定
(必要であれば)nginxのインストール
- 禁止ドメインや禁止URLにヒットしたリクエストの転送先に,ローカルで稼働しているnginxを指定します
- nginxを他の用途に使用しないのであれば,aptでインストールするだけです
# コンテンツフィルタした場合の表示用
# 特段設定しなくても80番は閉じているので,squid経由以外に外部からのアクセスはされない
aptitude install -y nginx
SquidGuardの設定ファイル
-
/etc/squidguard/squidGuard.conf
を新規に作成します- ServerWorld Squid + SquidGuardを参考にしました
/etc/squidguard/squidGuard.conf
# データベースの置き場所
dbhome /var/lib/squidguard/db
# ログファイルの置き場所
logdir /var/log/squidguard
dest deny{
domainlist deny/domains # 禁止ドメインリスト
urllist deny/urls # 禁止URLリスト
}
acl {
default {
pass !deny all
redirect http://localhost/index.html
}
}
- 禁止ドメイン,禁止URLの空リストを
touch
コマンドで作ります- さらに,ログや設定ファイルの所有者をproxyにします
- 記事の最後に,アクセス禁止ドメイン/URLの追加,更新方法を記載します
mkdir -p /var/lib/squidguard/db/deny
touch /var/lib/squidguard/db/deny/domains
touch /var/lib/squidguard/db/deny/urls
squidGuard -C all
chown -R proxy: /var/lib/squidguard /var/log/squidguard
(必要であれば)Squid用のポートを開ける
-
iptables
コマンドで,proxyポート(変えていないので3128/TCP)へのリクエスト受付を,internalネットワーク内部からのみ許可します
# 起動時に実行されるルーティング用スクリプトを編集
vi /usr/local/bin/fw.sh
# 以下の行を追加:internalネットワークからのみ,3128ポートへのアクセスを許可する
${IPTABLES} -A INPUT -s 192.168.100.0/24 -p tcp --dport 3128 -j ACCEPT
Squid+SquidGuardの起動+動作確認
- Squidサーバを稼働させます
# squidをいったん止める
/etc/init.d/squid stop
# キャッシュクリア
squid -z
# squidを再稼働する.エラーが出力されなければひとまずOK
/etc/init.d/squid start
- internalネットワークに接続されたマシンのプロキシ設定を,以下のように設定します
- 任意のWebサイトにアクセスできること
-
/var/log/squid/access.log
に履歴が出力されることを確認します
設定名 | 値 |
---|---|
タイプ | HTTP Proxy |
プロキシアドレス | 192.168.100.1 |
プロキシポート | 3128 |
アクセス禁止ドメイン,禁止URLの設定
- アクセスを拒否したいドメインをdomainsに,拒否URLをurlsに1行ずつ書きます.
-
squidGuard
コマンドで,リストの内容でデータベースを更新します - その後,squidをリロードし,データベースの内容でコンテンツフィルタを実施します
vi /var/lib/squidguard/db/deny/domains
xxx.org
yyy.net
ad.zzz.com
vi /var/lib/squidguard/db/deny/urls
www.foobar.co.jp
www.hogehuga.ne.jp
squidGuard -C all
/etc/init.d/squid reload