以前にこのような記事を公開しました。
Dnsmasq を使って特定のウェブサイトに OpenVPN 経由でアクセスできないようにする方法
Dnsmasq を利用して、VPN を経由したデバイスで特定のサイトにアクセスできないようにする方法を紹介した記事です。
しかし、あとになってよくよく考えてみると、別に VPN を利用しなくてもプロキシを設定すれば良いんじゃね……? ということに気づきました。しかも、わざわざ VPN サーバ(VPS など)を用意しなくても、自宅にある適当な PC をプロキシサーバ代わりにすれば良いのではないかと思いました。
というわけで今回は自宅にある Mac mini をプロキシサーバにしてみたのでその方法をご紹介します。
macOS Catalina(バージョン 10.15.2)
macOS での手順を紹介しますが、Linux でもできると思います。実行するコマンドや設定ファイルのパスが異なりますので適宜読み替えてください。
今回使用するプロキシサーバは Squid というものです。まずは Squid を Homebrew でインストールします。Linux の場合はそれぞれのディストリビューションのパッケージマネージャを使用してください。
$ brew install squid
Squid をインストールすると /usr/local/etc
直下に、以下の 3 つのファイルが追加されます。
squid.conf
squid.conf.default
squid.conf.documented
squid.conf.default
はデフォルトの設定ファイルですので編集せずにそのままにしておきます。squid.conf.documented
はドキュメントですので適宜参考にしてください。
今回編集するのは squid.conf
です。このファイルを開いて設定を編集します。
今回は例として、「0:00 〜 18:00 の間は YouTube にアクセスできないようにする」という設定にしてみたいと思います。
INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
と書かれたコメントがあるかと思いますので、このコメントのすぐ下あたりに設定を追加していきます。
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
acl blacklist dstdomain "/usr/local/etc/squid/blacklist"
acl blacktime time SMTWHFA 0:00-18:00
http_access deny blacklist blacktime
次に、ブラックリスト(自分が特定の時間帯・曜日にアクセスしたくないサイト)を作成します。/usr/local/etc
直下に squid
というディレクトリを作成し、blacklist
というファイルを生成します。
$ mkdir /usr/local/etc/squid
$ vi /usr/local/etc/squid/blacklist
blacklist
には以下を記述します。
.youtube.com
これで設定は完了です。上記の設定について解説していきます。
まず、1 行目の acl blacklist dstdomain "/usr/local/etc/squid/blacklist"
ではブラックリストのファイルを指定します。今回は /usr/local/etc/squid/blacklist
としましたが、自分のわかりやすい場所で構いません。
次に 2 行目の acl blacktime time SMTWHFA 0:00-18:00
でアクセスを禁止する時間帯と曜日を指定します。SMTWHFA
が曜日を表し、0:00-18:00
が時間帯を表しています。曜日に関しては以下のようになっています。
記号 | 曜日 |
---|---|
S | 日曜日 |
M | 月曜日 |
T | 火曜日 |
W | 水曜日 |
H | 木曜日 |
F | 金曜日 |
A | 土曜日 |
上記の設定では SMTWHFA
となっていますので、「毎日」という指定になります。MTWHF
とすれば「平日」です。MH
とすれば「月・木」となります。
時間帯のフォーマットに関しては説明不要かと思います。
なお、時間帯・曜日の設定は省略することができます。時間帯や曜日に関わらず、常に特定のサイトをブロックしたい場合は単純にこの行を書かなければ OK です。
最後に 3 行目の http_access deny blacklist blacktime
で、先ほど設定したサイト・時間帯・曜日でアクセス制限をします。blacklist
の箇所はブラックリストを設定したときの名前を、blacktime
は時間帯・曜日を設定したときの名前を指定します。deny
とすることでアクセス制限をすることができ、逆にホワイトリスト形式にしたい場合は allow
とします。
また、ブラックリストの書き方についてですが、先頭に .
をつけるとサブドメインを含めすべてブロックすることになります。上記の例では .youtube.com
としていますが、この場合は www.youtube.com
や music.youtube.com
、m.youtube.com
などがブロックされることになります。単純に www.youtube.com
のみをブロックしたい場合はそのように記述してください。
設定ファイルを編集できたら、Squid を起動します。
$ brew services start squid
起動しているかどうかを確認するには以下のコマンドを実行します。
$ brew services list
Name Status User Plist
squid started noraworld /Users/noraworld/Library/LaunchAgents/homebrew.mxcl.squid.plist
Name
が squid
となっている行の Status
が started
になっていれば起動しています。
Squid の停止方法は以下の通りです。
$ brew services stop squid
また、再起動は以下の通りです。
$ brew services restart squid
設定ファイルを書き換えたときには再起動する必要があります。
おそらくネットワークの設定を何もいじっていない場合は、IP アドレスの割当が自動(DHCP サーバを使用)になっているかと思います。何かしらの拍子に IP アドレスが変わってしまうと、そのたびにクライアント側のプロキシの設定を書き換えないといけなくなってしまうので固定化します。
まず、「システム環境設定」を開きます。
「ネットワーク」を開きます。
「IPv4 の設定」の箇所が「DHCP サーバを使用」になっていたら、「手入力」に変更してください。すると、IP アドレス、サブネットマスク、ルーターが入力できるようになりますので、入力してください。たいていの場合は「手入力」にする前に設定されていた値と同じものをそのまま入力すれば良いはずです。
これでプロキシサーバ側の設定は終了となります。
ここからクライアントの設定に移ります。プロキシサーバの指定方法はデバイスごとに異なりますので適宜調べてください。ここでは iOS、macOS、Nintendo Switch、PlayStation 4 での設定方法をご紹介します。なお、Nintendo Switch と PlayStation 4 では動作未検証です。
※ iOS 13.3 での設定方法です。バージョンによって多少異なる可能性があります。
i
マークをタップします3128
を入力します※ macOS 10.15.2 での設定方法です。バージョンによって多少異なる可能性があります。
3128
を入力します3128
を入力します※ システムバージョン : 9.1.0 での設定方法です。バージョンによって多少異なる可能性があります。
3128
を入力します※ システムソフトウェア 7.02 での設定方法です。バージョンによって多少異なる可能性があります。
3128
を入力しますApple TV は通常の方法(設定アプリ内)ではプロキシの設定をすることができません。Apple Configurator を利用することでプロキシを設定することができるようですが、未検証です。
Apple Configurator を使ってネットワーク上の Apple TV に接続する
Fire TV も Apple TV と同様に、通常の方法ではプロキシの設定をすることができません。開発者ツールを利用すればできるかもしれませんが、軽く調べただけで未検証なのでわかりません。
最後に、プロキシを設定したデバイスで、ブラウザを開き、特定のサイトにアクセスできなくなっているのを確認したら終了です。お疲れさまでした。
ちなみに、当たり前ですがプロキシを通過しないネットワークアクセスでは上記のアクセス制限はかからないことに注意してください。たとえば、ping
コマンドや curl
コマンドを実行する際はプロキシを通過しないのでふつうにアクセスできます。また、Nintendo Switch でも注意書きにある通り、一部のソフトではプロキシを使えないようです。
いかがだったでしょうか。自宅のマシンを利用するため、VPN に比べて手軽にできるのでおすすめです。これをするモチベーションとしては、Dnsmasq のときと同じ です。
もちろん VPN + プロキシという組み合わせでもできると思いますので、お好みの環境で試してみてください。
ちなみに、VPN + Dnsmasq の組み合わせができるなら、VPN を使わずに、自宅のマシンに Dnsmasq をインストールして DNS サーバ代わりにする、という手もありますが、調べた限りでは、Dnsmasq では時間帯や曜日によって切り替えるということができないのではないかと思います。もしできるのであればそっちのほうがお手軽かもしれません。Apple TV や Fire TV ではプロキシの設定がやや煩雑なので。
OpenVPN を利用した VPN 環境構築についても以前に記事にしていますので参考まで。
OpenVPNのインストールとセットアップからインターネット接続までのガイドブック