[privoxy] 15分程度で構築するプロキシサーバー (とりあえず広告除外できれば良い編)

# 目的
任意のアクセスさせたくないページをブロックする。
今回はネットサーフィンしてると広告が邪魔なのでそれを除外することを目指す
**もう とりあえず動けば良いので細かい設定などはしない方針**

:::note warn
バージョンなどによって手順などが違う可能性もあるため、
自己責任で実施してください (書き終えた後に一度試してはいますが)
:::

今回はお試しとしてwikipediaをブロックして動確後、広告ブロックのリストを追記する。


# 環境 (※20240317時点)
Ubuntu Server 22.04
Privoxy version 3.0.33

 　
# 1. インストール
ubuntu環境があり、ネットワークの設定などもすでに完了している状態を想定。

インストールは以下コマンドを実行するのみ
```
sudo apt-get install privoxy -y
```
　
# 2. 設定変更 (configファイル)

### configファイルの編集
privoxyの設定ファイルを開く
```bash
# 一応configファイルをバックアップ
sudo cp /etc/privoxy/config /etc/privoxy/config_org

# configファイルを開く
sudo vi /etc/privoxy/config
```

### 編集する部分
大体790行目くらいに以下のような「listen-address」という行がある
ここをコメントアウトし、プロキシ(自分自身)のIPを追加する。ポートは「8118」
```bash
listen-address  127.0.0.1:8118
listen-address  [::1]:8118

 ↓
 
# listen-address  127.0.0.1:8118
# listen-address  [::1]:8118
listen-address  192.168.1.150:8118 
```

設定出来たら保存、終了してプロンプトに戻る。

　
# 3. ブロックするURL(ドメイン)のリスト作成
「/etc/privoxy/user.action」に記載する方法もあるが、色々な設定が書いてあり
見にくいため、別途ファイルを作成してそれを参照させる方向で作る。

## ・ファイルの作成
「/etc/privoxy/」配下にそれっぽい名前のファイルを作成する。
今回は「block.action」という名前のファイルで作成した

```bash
# ファイル作成
sudo vi /etc/privoxy/block.action
```
　
作成したファイルの一番上に「以下はブロックする」という呪文(たぶん)を記載する
```bash
{ +block{Nasty ads.} }
```
　
その配下にブロックしたいページのドメインを記載する。
今回はwikipedia (https://ja.wikipedia.org/)をブロックするので以下のように記載する。
※ mが付く方はスマホ版ページ
```bash
{ +block{Nasty ads.} }
.ja.wikipedia.org
.ja.m.wikipedia.org
```
ドメイン名の前に「 . 」をつけるらしい。書いたら保存して終了する
　
## ・configファイルにパスを記載
そのままだと何も起きないのでconifgファイルに上記ファイルのパスを記載する。

再度configファイルを開く
```bash
sudo vi /etc/privoxy/config
```
　
390行目あたりに「actionsfile ~」という行がある
ここに他の行と同じような感じで、先ほど作成した「block.action」を記載する。
```bash
actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.
actionsfile default.action   # Main actions file
actionsfile user.action      # User customizations
actionsfile block.action 　　 👈追加したやつ
```
　
config変更したら再起動が必要っぽいのでprivoxyを再起動
```bash
sudo systemctl restart privoxy
```
これでプロキシ側の設定はできているはず。


# 4. クライアント側の設定
ここからはOSのネットワーク設定などからプロキシ設定をする。

とりあえずの設定例としてwindowsとandroidを記載しますが、
それ以外のOSはいい感じに設定をしてください。 (投げやり)


## ・windowsの場合

windowsであれば、「設定」の「ネットワークとインターネット」から「プロキシ」を開く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594444/cb9c052a-2e85-7ce6-4c24-2a1218e89ec4.png)

　
「手動プロキシ セットアップ」を有効にし、作成したプロキシサーバーのIPとポート番号(8118)を入力して保存する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594444/6acab68c-a7fa-6689-fc8f-16a418edd701.png)

これでブラウザから「https://ja.wikipedia.org/」にし、表示されなければOK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594444/6b38a69f-4264-1068-99e9-29f4cd3e5b97.png)


**☆表示されてしまう場合**
ブラウザのキャッシュなどを削除すると効いたりする (忘れがち)
設定ファイルやwinのプロキシ設定が間違ってないか確認する。(アドレス入力後「保存」ボタン押し忘れて1敗)
privoxyを再起動すると反映されたりするかも (再起動やり忘れて1敗)

## ・androidの場合

androidは機種によってバラバラだと思うので参考程度に。

どうにかして接続しているネットワークの設定画面を開き、
 詳細オプションを開いてプロキシ情報を入れて保存する。
 ![Screenshot_20240317-220603.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594444/789ced8d-30c6-2c50-130e-5f51dc0bb5e7.png)
 ![Screenshot_20240317-220634.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594444/2840d306-4d98-2876-15ff-9d9e8dd9df5d.png)




# ここまでできれば一旦プロキシの構築は完了
あとは作成した「block.action」にブロックしたいドメインを記載していけばOK。
「やり方さえわかれば後は自分でどうにかしますよ」の人はここから先は見なくてもいいかも

:::note warn
お試しで記載したwikipediaの行は削除しておいてください。
消さないとwikipedia見れないです
:::

プロキシを作るのも目的ですが、今回の最終的な目的は広告ブロックなので
以降はblock.actionに広告のリストを記載する方法を記載します。



# 広告の除外

## ・広告のURLリストを拾ってくる
ネット上にはブロックしたい広告のをまとめたリストが配布されています。
例えば「豆腐フィルタ」「280 blocker」などで検索すると色々出てきます
PC向け、スマホ向け、国内向け、海外向けなど目的に合うものを拾ってきてください。


今回は280blockerのリストを使用してやってみようと思います。
　
## ・フィルタの中身をactionファイルのフォーマットに合わせる

### フィルタの用意
まず最新版のリストをとってきます。
https://280blocker.net/download/ の「ドメインテキスト方式」をクリックし、
URL末尾にある「xxxxxx」を現在の年月に変更してアクセスしてください。

```
例：
https://280blocker.net/files/280blocker_domain_xxxxxx.txt
↓
https://280blocker.net/files/280blocker_domain_202403.txt
```
ブラウザ上でテキストファイルが開かれるので、これをDLなりcurlなりで手元に持ってきます。
　
### フォーマットを合わせる
先ほどwikipediaをブロックした際に「.ドメイン名」みたいな形で記載したと思いますが
取ってきたリストはそのような書き方になっていないので、置換などで上記フォーマットに合わせてください。

今回は例としてubuntu上でsedコマンドでフォーマット調整してみます

```bash
# ubuntu上にコピーしたファイルの場所へ移動する
cd <280blocker ～.txtがあるディレクトリ>

# コメント行、空行を削除して行頭に「.」をつけたものをblock.actionに追記する (要root?)
# 「280～.txt」のファイル名は各自のファイルに合わせてください。
sudo sed -e '/#/d' -e '/^$/d' -e "s/^/./g" 280blocker_domain_202403.txt >> /etc/privoxy/block.action
```
　
一応再起動
```bash
sudo systemctl restart privoxy
```


これで広告のありそうなページなどを開き、広告が表示されなければOKです。

.
　
.
　
.
　
.
　
.
　
.
　
.

# ＃[備考]遭遇したエラー
```bash
$ sudo systemctl restart privoxy
Job for privoxy.service failed because the control process exited with error code.
See "systemctl status privoxy.service" and "journalctl -xeu privoxy.service" for details.
```
block.actionの先頭に`{ +block{Nasty ads.} }`を入れ忘ていた