4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

小規模LANの構築ノウハウ(2) Squid+SquidGuardで快適コンテンツフィルタ(adblock)環境を作る

Posted at

TL;DR

  • 不要なコンテンツ(広告など)の取得をブロックするために,SquidとSquidGuardをゲートウェイとなるルータにインストールします
    • Squidでキャッシュもできますが,家庭内での利用であるから,ブラウザのキャッシュで十分だろうと判断し,特段の設定はせず,コンテンツフィルタのみを行います
      • キャッシュを使いたい場合は,/etc/squid/squid.confに必要な設定を追加することで,実現できます
    • 「小規模LANの構築ノウハウ」シリーズの続きですが,この記事だけ読むこともできます

ネットワーク環境

  • 以下のネットワーク構成で,ホストgwでSquid(Proxy)サーバを立てます
    • gwは Debian 9 がインストールされており,eth1->eth0のルーティングが行われている状態からスタートします
  • プロキシする際,SquidGuardを参照し,登録した禁止ドメイン,禁止URLに対するリクエストは,別のアドレス(ローカルホストのWebサーバ)にリダイレクトすることで,アクセスしないようにします

nw.jpg

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

# データベースの置き場所
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の設定

  1. アクセスを拒否したいドメインをdomainsに,拒否URLをurlsに1行ずつ書きます.
  2. squidGuard コマンドで,リストの内容でデータベースを更新します
  3. その後,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
  • 禁止ドメインは,サブドメインを含めて禁止します
    • 以下のように,禁止ドメインに指定した広告部分などが非表示になれば稼働しています

参考

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?