家に子供がいる場合は、特定の望ましくない Web サイトをブロックする必要性を感じたことがあるかもしれません。もう 1 つの一般的な問題領域は、ソーシャル メディア Web サイトです。子供 (および大人) が Facebook や Twitter などで時間を浪費しすぎていると感じ、それらをブロックするか、少なくとも 1 日の特定の時間にのみアクセスできるようにしたいと考えるかもしれません。
これを可能にするには、 ルーター と コンテンツ フィルター 、つまりラップトップ、スマートフォン、タブレットなどのすべてのデバイスがインターネットに接続するためのアプライアンスが必要です。このアプライアンスは、これらのデバイスがアクセスする Web サイトも傍受し、ブラックリストに登録された Web サイトにアクセスしようとするとブロックします。
市販のすぐに使えるコンテンツ フィルターが市販されていますが、DIY タイプの私たちにとっては、それでは面白くありません。したがって、実際に手を動かして、その仕事のために Raspberry Pi をセットアップします。このプロジェクトに Raspberry Pi を選択したのは、そのサイズが小さく、消費電力が無視できるためです。ただし、 これらの手順は、Debian Linux またはその派生版 (Ubuntu、Mint など) を実行しているほぼすべてのコンピュータで、ほとんど変更を加えることなく動作します 。
免責事項 : このガイドは、Linux に関する中級レベルの経験があり、問題が発生した場合にトラブルシューティングを行う意欲があることを前提としています。コマンド ラインとファイアウォールに関する以前の経験はボーナスです。
使い方
ハードウェア
Raspberry Pi 3 をルーター兼コンテンツフィルターとして使用します。このためには、 2 つのネットワーク インターフェイスが 必要になります。1 つはインターネットに接続するため、もう 1 つは他のデバイスが接続するための WiFi ホットスポットとして機能します。 Raspberry Pi 3 には、イーサネット ジャックと WiFi モジュールが内蔵されています。したがって、このシナリオでは、イーサネット ケーブル ( eth0 ) を使用してインターネットに接続し、WiFi モジュール ( wlan0 ) がホットスポットとして機能します。
もちろん、イーサネットを使用したインターネットへの接続は常に可能であるとは限りません。この場合、インターネットに接続するには互換性のある USB WiFi ドングル ( wlan1 ) が必要ですが、内蔵 WiFi モジュール ( wlan0 ) はホットスポットとして機能します。これは、このガイドで使用する構成です。
Raspberry Pi 3 は、数台のラップトップとスマートフォンを備えた家庭でのセットアップにはほぼ十分ですが、 大規模なオフィスでのセットアップに必要なパフォーマンスは得られないこと に注意してください。多くのクライアントがコンテンツ フィルターに接続する場合は、より高性能なハードウェアを検討してください。
ソフトウェア
優れた E2guardian を使用して、Web リクエストをインターセプトおよびフィルタリングします。コンテンツ フィルタリングは (ブロックリストのサイズに応じて) パフォーマンスに影響を与える可能性があるため、 Squid キャッシュを使用してこのパフォーマンス ヒットを相殺します。
前提条件
1. 最新バージョンの Raspbian OS がインストールされた Raspberry Pi 3 、およびインターネットへのアクセス。 Raspberry Pi を使い始めたばかりの場合は、Raspberry Pi 3 の使用を開始する方法に関するガイドを読むことをお勧めします。
2. [オプション] USB WiFi ドングル – これは、Raspberry Pi 3 をイーサネット ケーブルでインターネットに接続できない場合にのみ必要です。 WiFi をインターネットへの接続とホットスポットの両方に使用する予定がある場合、これは必須です。
3. Raspberry Pi への物理的アクセス – この記事の性質上、ヘッドレス モードで Pi を使用している場合、ファイアウォール設定の 1 つの間違いで Raspberry Pi からロックアウトされる可能性があります。したがって、すべての設定が完了するまでは、設定中にモニター、キーボード、マウスを接続することをお勧めします。
Raspberry Piをルーターとして使用する
1. Ethernet ( eth0 ) を使用して Pi をインターネットに接続します 。代わりに USB WiFi ドングル (おそらく wlan1 ) を使用している場合は、それをインターネットに接続します。内蔵 WiFi モジュール ( wlan0 ) は今のところそのままにしておきます。
2. 必要な 前提条件のソフトウェア を入手します。
sudo apt install iptables iptables-persistent hostapd dnsmasq squid3
3.
Pi が WiFi ホットスポットとして機能できる
ように、
hostapd
をセットアップします。このためには、お気に入りのテキスト エディター (例:
sudo nano /etc/hostapd/hostapd.conf
を使用して構成ファイルを作成し、
GitHub ページ
の内容を貼り付けます。
好みに応じて変更したい行をいくつか示します。
ssid=RaspberryPiAP
この行は、アクセス ポイントの名前を決定します。私は
RaspberryPiAP
を選択しました。
wpa_passphrase=.com
これは、ホットスポットへのアクセスに使用されるパスフレーズを指定します。私は
.com
を使用しましたが、選択した強力なパスフレーズに変更することをお勧めします。
4.
次に、
dnsmasq
を使用して
DHCP サーバーをセットアップします
。構成ファイル
/etc/dnsmasq.conf
を編集し、最後に次の行を追加します。
[ソースコード]interface=lo,wlan0
no-dhcp-interface=lo
dhcp-range=192.168.8.20,192.168.8.254,255.255.255.0,12h[/sourcecode]
これにより、
wlan0
(内蔵 WiFi モジュール) のインターフェイスが
192.168.8.20
~
192.168.8.254
の範囲の IP アドレスをクライアントに配布します。
5.
内蔵 WiFi モジュール
wlan0
の
静的 IP アドレス
を設定します。ファイル
/etc/network/interfaces
を開きます。おそらく次のようになります(私のものを強調してください)。
[ソースコード]ソースディレクトリ /etc/network/interfaces.d
オートロー
iface lo inet ループバック
iface eth0 inet マニュアル
許可-ホットプラグ wlan0
iface wlan0 inet マニュアル
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
許可-ホットプラグ WLAN1
iface wlan1 inet マニュアル
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf[/sourcecode]
ここで、
wlan0
を
扱う太字の行を見つけて
変更し
、ファイルが次のようになります。
[ソースコード]ソースディレクトリ /etc/network/interfaces.d
オートロー
iface lo inet ループバック
iface eth0 inet マニュアル
許可-ホットプラグ wlan0
iface wlan0 inet 静的
hostapd /etc/hostapd/hostapd.conf
アドレス 192.168.8.1
ネットマスク 255.255.255.0
許可-ホットプラグ WLAN1
iface wlan1 inet マニュアル
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf[/sourcecode]
これにより、wlan0 に静的 IP アドレス
192.168.8.1
が設定されます。このアドレスは、
後で Raspberry Pi と通信するために使用するアドレスな
ので、覚えておいてください。
6.
次に、
IP 転送を設定します
。ファイル
/etc/sysctl.conf
を編集し、次の行を追加します。
net.ipv4.ip_forward=1
7. 次に、ファイアウォールで ネットワーク アドレス変換 (NAT) を構成します 。これを行うには、次の 2 つのコマンドを入力します。
sudo iptables -t nat -A POSTROUTING -s 192.168.8.0/24 ! -d 192.168.8.0/24 -j MASQUERADE
sudo iptables-save | sudo tee /etc/iptables/rules.v4
最初のコマンドは NAT を設定し、2 番目のコマンドは現在のファイアウォール設定を
/etc/iptables/rules.v4
というファイルに保存します。これにより、再起動後も構成が確実に保持されます。
8. この時点で、 Raspberry Pi を再起動します 。これは、構成ファイルに加えたすべての変更が機能することを確認するためです。
9.
再起動後、ラップトップやスマートフォンなどの他のデバイス上に、新しく作成された
RaspberryPiAP
ホットスポットが表示されるはずです (ステップ 3 で名前を変更していない限り)。指定したパスワードを使用して接続し、インターネットにアクセスできます。
基本的な低電力ルーターが必要な場合に行う必要があるのはこれだけです。コンテンツ フィルターも設定したい場合は、読み続けてください。
E2guardian を使用したコンテンツ フィルタのセットアップ
E2guardian は、デフォルトの Raspbian リポジトリには存在しません。これをインストールするには、プロジェクトの
Github ページ
に移動し、
armhf.deb
で終わるファイルをダウンロードします。次に、ターミナルを開き、
ダウンロード
フォルダー (またはファイルのダウンロード先として選択した場所) に移動し、インストールします。
cd ~/Downloads
sudo dpkg -i ./e2guardian_*_jessie_armhf.deb
E2guardian をインストールするときに、不足しているパッケージに関するエラーがいくつか表示される可能性があります。これを修正するには、インストールを完了してから次のコマンドを入力します。
sudo apt-get install -f
コンテンツリストの使用
/etc/e2guardian/lists
ディレクトリにはいくつかのリストが存在します。これらのファイルには、bandextensionlist、baniplist、bandphraselist、bandsitelist、banurllist、Exceptionlist などが含まれます。これらのファイルはコメント付きで適切に文書化されています。それらを見てよく理解してください。
例として、
いくつかの人気のあるソーシャル ネットワークをブロックしたい
とします。
/etc/e2guardian/lists/bannedsitelist
ファイルを開き、
Blanket SSL/CONNECT
ブロックの下に (これらの Web サイトではプレーン
http
ではなく
https
が使用されるため)、次の行を追加します。
facebook.com
twitter.com
reddit.com
次に、コマンド
sudo service e2guardian reload
を使用して E2guardian サービスをリロードします (
構成ファイルを変更するたびにこのコマンドを実行する必要があります
)。コンテンツ フィルターを使用しているクライアントは、これらの Web サイトにアクセスできなくなります。携帯サイト(例:m.twitter.com)やスマホアプリも動作しません。
E2guardian は
デフォルトでポルノもブロックします
。これを許可したい場合は (私たちが判断しているわけではありません)、
/etc/e2guardian/lists/bannedphraselist
ファイルを開いて、次の行を見つけます。
.Include
先頭に ハッシュ (# 記号) を追加してコメントアウトすると、次のようになります。
#.Include
再度、
sudo service e2guardian reload
使用して設定をリロードすれば完了です。
クライアントの構成
プロキシ サーバーが設定されたので、クライアントの構成に進むことができます。コンテンツ フィルターを使用するには、すべてのクライアントが Rapberry Pi のホットスポットに接続され、プロキシを使用するように構成されている必要があります。プロキシの構成は、オペレーティング システムおよびデバイスごとに異なります。ただし、Windows と Android の方が一般的であるため、Windows と Android でのセットアップ方法を説明します。
ウィンドウズ
[コントロール パネル] > [ネットワークとインターネット] > [インターネット オプション] に移動します。開いたウィンドウで [接続] タブに移動し、 [LAN 設定] をクリックします。
ここで、
[詳細設定]
をクリックし、プロキシ アドレスとして
192.168.8.1
を入力し、ポートとして
8080
。
[すべてのプロトコルに同じプロキシ サーバーを使用する] ボックス
がオンになっていることを確認します。
「OK」
をクリックします。
必要なのはそれだけです。 Google Chrome や Firefox などのほとんどの一般的な Web ブラウザは、システムのプロキシ設定を自動的に取得します。
アンドロイド
[システム設定] > [WiFi]
に移動します。次に、Raspberry Pi ホットスポットを長押しし、
[ネットワークの変更]
を選択します。
[詳細オプション]
で、
[プロキシ]
オプションを
[手動]
に設定します。次に、
[プロキシ ホスト名]
に Pi の IP アドレス
192.168.8.1
を入力します。
[プロキシ ポート]
に
8080
と入力し、
[保存]
をタップします。
これで、プロキシの構成をテストできるようになりました。ブラックリストにある Web サイトにアクセスしてみてください。次のような「アクセスが拒否されました」ページが表示されます。
プロキシの使用を強制する
これまでのところ、私たちはクライアントがうまく機能し、コンテンツ フィルターを通じてインターネットを使用していることに依存しています。もちろん、現実の世界ではこのようなことはめったに起こりません。したがって、すべてのクライアントがプロキシを経由するように強制するには、次のコマンドを実行します。
sudo iptables -A PREROUTING -t nat -p tcp --destination-port 80 -j REDIRECT --to-ports 8080
sudo iptables -A PREROUTING -t nat -p tcp --destination-port 443 -j REDIRECT --to-ports 8080
sudo iptables-save | sudo tee /etc/iptables/rules.v4
これにより、Raspberry Pi のホットスポット上のすべての http (ポート 80) および https (ポート 443) トラフィックがコンテンツ フィルター プロキシに自動的にリダイレクトされます。デバイスでプロキシ設定を構成しないと、Facebook、Gmail、Twitter などの安全な https Web サイトにまったくアクセスできなくなります。これにより、Pi ホットスポットに接続したい人は必ずプロキシを経由する必要があります。
コンテンツ フィルターの基本的な使用法について知っておく必要があるのはこれだけです。高度な機能を学びたい場合は、読み続けてください。
高度な使用シナリオ
時間ベースのフィルターのセットアップ
上記の 「コンテンツ リストの使用」 セクションで説明した Web サイトを、 1 日の特定の時間にのみ ブロックしたいとします。私は個人的に、Reddit、Facebook、Twitter は生産性を低下させる悪夢であるため、平日の勤務時間中 (午前 9 時から午後 5 時まで) はブロックすることを好みます。
/etc/e2guardian/lists/bannedsitelist
ファイルを開き、次の行を追加します。
time: 9 0 17 0 01234
この行は次のように機能します。タイマーは 9 (午前 9 時) 0 (00 分) に開始し、 17 (24 時間形式で午後 5 時) 0 (00 分) まで、 0 (月曜日) から 4 (金曜日) までです。
別の例を見てみましょう。
time: 10 30 20 45 024
これにより、月曜日 (0)、水曜日 (2)、金曜日 (4) の午前 10 時 30 分 (10 30) から午後 8 時 45 分 (20 45) まで、構成されたサイトがブロックされます。
特定の IP アドレスにプロキシをバイパスさせる
特定の IP アドレスにコンテンツ フィルターをバイパスさせることができます。これは、
ファイアウォールを構成する
ことで設定できます。お気づきかもしれませんが、
dnsmasq.conf
では、
192.168.8.20
から
192.168.8.254
までの IP アドレスをクライアントに割り当てるホットスポットのみが設定されています。つまり、
192.168.8.2
から
192.168.8.19
までのアドレスはどのクライアントにも自動的に割り当てられません (
192.168.8.1
は Raspberry Pi 自体が使用しているため、使用できません)。
これを行うには、まず完全なアクセスを許可するデバイスに 静的 IP を設定します 。たとえば、Windows マシンに静的 IP 192.168.8.2 を設定するには、次の設定を使用します。
次に、Raspberry Pi で次のコマンドを実行します。
sudo iptables -t nat -A PREROUTING -p tcp -s 192.168.8.2 --destination-port 80 -j RETURN
sudo iptables -t nat -A PREROUTING -p tcp -s 192.168.8.2 --destination-port 443 -j RETURN
次に、 デバイス上のプロキシの使用を無効にして 、禁止された Web サイトを開いてみます。開けられるはずです。ホワイトリストにさらに追加したい IP アドレスがある場合は、上記の 2 つのコマンドを再度実行します。ただし、IP アドレスを必要なアドレスに置き換えます。ホワイトリストに満足したら、次のコマンドを実行してファイアウォール構成を保存します。
sudo iptables-save | sudo tee /etc/iptables/rules.v4
留意すべき重要な点の 1 つは、ホワイトリストに登録された IP アドレスを誰にも知らせないことです。それ以外の場合は、デバイスをその IP アドレスに設定するだけでプロキシをバイパスできます。
セキュリティ上の懸念
Raspberry Pi はすべての通信の出入口となるため、セキュリティを確保することが重要です。ここでは、セキュリティを向上させる方法についてのヒントをいくつか紹介します。これらは単なる基本的な指針であり、セキュリティ上の落とし穴の包括的なリストではないことに注意してください。セキュリティの程度は、ネットワークの性質 (自宅、小規模オフィスなど) とユーザーのいたずらの度合いによって異なります。
不要なサービスを無効にする
これはルーターなので、必要なサービスのみを実行するのが最善です。実行中のサービスが増えるということは、悪用される可能性のある脆弱性が増えることを意味します。 このシステムを通常のデスクトップとして使用しないでください 。
[メニュー] > [環境設定] > [Raspberry Pi 構成] に移動します。 「インターフェース」 タブで、必要のないサービスをすべて無効にします。
デフォルトのパスワードを変更する
Raspbian の新規インストールには、デフォルト ユーザー「pi」のデフォルト パスワード「raspberry」が付属しています。より安全なパスワードに変更することをお勧めします。これを変更するには、ターミナルを開いて次のコマンドを実行します。
passwd
モニターとその他の周辺機器を取り外します
この Pi 上で実行されるのは、この Pi をルーターと Web フィルターとして使用するために必要なソフトウェアだけであるため、モニターや、マウスやキーボードなどのその他の周辺機器を接続する必要はありません。設定などを変更する必要がある場合は、いつでも SSH を使用するか、必要に応じてモニターやキーボードを接続できます。
自動ログインをオフにする
Raspbian は、パスワードの入力を求めることなく、「pi」ユーザー資格情報を使用して自動的にログインするように設定されています。これは、一般的な家庭用デスクトップでは問題ないかもしれませんが、ルーターでは危険です。これを無効にするには、Raspbian デスクトップで、 [メニュー] > [設定] > [Raspberry Pi 構成] に移動します。 [システム] タブの [自動ログイン] 見出しの前にある [ユーザー ‘pi’ としてログイン] チェックボックスをオフにします。
同じダイアログ ボックスで、
[Boot]
設定を
[To CLI]
に設定することもお勧めします。ルーターに GUI が必要ないため、これによりリソースが節約されます。何らかの理由でデスクトップを使用したい場合は、ユーザー名でログインし、
startx
コマンドを実行してグラフィカル インターフェイスをオンにします。
一般的な問題のトラブルシューティング
インターフェースの名前が変更され続ける
これは、Pi で 2 つのワイヤレス インターフェイス を使用している場合に非常に一般的です。 Ethernet を使用して Pi をインターネットに接続している場合は、このセクションを無視しても問題ありません 。問題は、両方のワイヤレス インターフェイス ( wlan0 と wlan1 ) が再起動後に名前を交換する場合があることです。つまり、内蔵 WiFi モジュール wlan0 は wlan1 に名前変更され、その逆も同様です。設定ファイルの名前が一貫していることに依存しているため、これはもちろん大きな問題です。再起動しても一貫性を保つ方法は次のとおりです。
1.
インターフェイスの MAC アドレスを
確認します。コマンド
ifconfig | grep HWaddr
を実行します。 Raspberry Pi で
ifconfig | grep HWaddr
。次のような出力が表示されます。
wlan0 および wlan1 セクションの「HWaddr」という単語の右側にあるテキストをメモします。 eth0 セクションは無視しても問題ありません。これらは、ワイヤレス インターフェイスの MAC アドレスです。
どの MAC アドレスがどのインターフェイスに属しているかわからない場合は、USB WiFi ドングルを取り外し、コマンドを再度実行してください。ここで表示される WLAN インターフェイスは内蔵 WiFi インターフェイスで、もう 1 つは USB です。
2.
お気に入りのテキストエディタを使用して、新しいファイル
/etc/udev/rules.d/10-network.rules
を作成します。例えば :
sudo nano /etc/udev/rules.d/10-network.rules
3. このファイルに次のテキストを入力します。 xx:xx:xx:xx などを適切な MAC アドレスに置き換えます 。
[sourcecode]# 内蔵 WiFi モジュールを wlan0 として設定します。 xx:xx:xx などを次のように置き換えます。
# 内蔵モジュールのMACアドレス
SUBSYSTEM==”ネット”、ACTION==”追加”、ATTR{アドレス}==”xx:xx:xx:xx:xx:xx”、NAME=”wlan0″
# USB WiFi ドングルを wlan1 として設定します。 yy:yy:yy などを
# USBドングルのMACアドレス
SUBSYSTEM==”ネット”、ACTION==”追加”、ATTR{アドレス}==”yy:yy:yy:yy:yy:yy”、NAME=”wlan1″[/sourcecode]
このガイドではこれに従っているので、内蔵 WiFi インターフェイスの MAC アドレスが wlan0 に対応し、USB WiFi が wlan1 に対応していることを確認してください。
4. Raspberry Piを再起動します。これで、インターフェースが正しい名前で開始されるようになります。
ファイアウォール構成のリセット
もう 1 つの一般的な問題は、ファイアウォールの構成が不適切であることです。ネットワーク構成によっては、ファイアウォールを正しく設定するまでに数回試行する必要がある場合があります。ファイアウォールの構成を間違えた可能性があると思われる場合は、次のコマンドを実行して最初からやり直してください。
sudo iptables --flush
sudo iptables --table nat --flush
sudo iptables --delete-chain
sudo iptables --table nat --delete-chain
これにより、
すべての
ファイアウォール構成が削除されます。これで、ファイアウォールの構成を最初から始めることができます。満足したら、コマンド
sudo iptables-save | sudo tee /etc/iptables/rules.v4
を実行します。
sudo iptables-save | sudo tee /etc/iptables/rules.v4
を実行して、構成を永続的にします。
関連項目: 電子メールで Raspberry Pi でコマンドを実行する方法
Raspberry Pi をルーターおよびコンテンツ フィルターとして使用する
Raspberry Pi を強力なルーターとコンテンツ フィルター プロキシに変える方法は以上です。セットアップに使用した正確な構成ファイルは、 GitHub ページ で入手できます。ぜひ、その効果をお知らせください。何かが期待どおりに動作しない場合、または手順がわかりにくい場合は、下のコメントセクションでお気軽に質問してください。