Ubuntu ServerでVPNサーバーを構築すると予定でしたが、ネットワークの関係で構築が滞っているため、
ちょっとVPNはおやすみして、プロキシサーバーをUbuntuServer18.03.4LTSに構築していきます。
プロキシサーバーの役割
インターネットの出口などに設置されているサーバーに「プロキシ」があります。
よく会社や学校でPCを使用して作業していると、プロキシという言葉はよく聞くと思います。
なんとなく、セキュリティ上何か危ないものを防いでいるのかな〜っという認識の人もいるでしょう。
ではプロキシとは何をするものでしょうか。
まず、プロキシサーバーには2種類あります。
それぞれについて説明します。
フォワードプロキシー
フォワードプロキシーは、企業のLANからインターネットへの出口へ配置されるサーバーです。
主にアクセスを高速化するために用いられます。
クライアントのアクセスにより、インターネットから取得したWebコンテンツなどのデータを一時的にサーバー内に保存し、
再びアクセスがあれば、そのデータを渡すキャッシュのような役割を果たすことで、アクセスの高速化を実現しています。
クライアントからのインターネットアクセスがプロキシーを経由するため、
データのフィルタリングや、不適切なコンテンツ遮断、文書を翻訳できる機能を提供できます。

リバースプロキシー
リバースプロキシーと呼ばれるサーバーは、インターネットに公開しているWebサーバーの直前に配置するサーバーです。
このサーバーの場合、インターネットからのアクセスは、リバースプロキシーを経由するので、
サーバーデータのキャッシュや加工が可能になります。
Webサーバーの負荷を分散させ動作を高速化することや、セキュリティ対策にも使用されます。

プロキシー構築:Squid
UbuntuServerだけでなく、Linux上でプロキシーを構築するソフトは、Squidが使用されます。
Squidの特徴は、前述の2つの用途のサーバーを構築できることです。
Ubuntuでそれぞれのサーバーを構築します。
Squidのインストール
まず、Squidをインストールします。
1 |
$ sudo apt install squid |
アプリケーションのインストールが完了したら、設定ファイルを変更します。
設定ファイルの編集:/etc/squid/squid.conf
ここで、フォワードプロキシーとリバースプロキシーで設定ファイルの編集方法が異なります。
フォワードプロキシーの構築
まず設定ファイルを編集します。
1 |
$ sudo vim /etc/squid/squid.conf |
今回設定を行うパラメータは、以下の4つです。
・プロキシサーバーのポート番号
・アクセスリストの定義
・アクセス制限
・キャッシュメモリ容量
プロキシサーバーのポート番号
クライアントからのプロキシサーバーに接続するためのポート番号を設定します。
初期値は、ポート番号3128が設定されています。
そのため、よくプロキシサーバーで使用される「8000」もしくは、「8080」を設定しましょう。
1 2 |
# 1612行目 http_port 8080 |
アクセスリスト
次に、アクセスリストの設定です。
アクセスリストは、LANに接続されたPCやネットワーク機器のアクセスには、localhostという名前で制御できるように設定します。
このとき、ネットワースアドレスも指定します。
1 2 |
# 980行目 acl localhost src 192.168.1.0/24 |
アクセス制限
http_accessはSquidへのアクセスを制限するためのパラメータです。
指定した、ユーザーをアクセス許可/アクセス禁止のどちらかに指定します。
1 2 |
# 1192行目 http_access allow localhost |
キャッシュメモリ容量
上記の他にも、cacheの最大容量を指定しましょう。
デフォルトでは有効になっていないので、以下のように変更して1000MBに変更しましょう。
今回はRaspberryPiに実装するので、1000MBは大きいサイズですが、
今どきのPCは大容量のメモリを保有しているので、1000MBでも問題ないでしょう。
1 |
cache_mem 1000 MB |
最後にまとめです。変更前後のパラメータの値は、以下の通りです。
項目 | 変更前 | 変更後 |
プロキシサーバーの接続ポート (1612行目) | http_port 3128 | http_port 8080 |
アクセスリスト (980行目) | (新規追加) | acl localnet src <ネットワークアドレス> 例:acl localnet src 192.168.11.1 |
アクセス制限 (1192行目) | (新規追加) | http_access allow localnet |
キャッシュメモリ容量 | #cache_mem 256MB | cache_mem 1000MB |
Squidの再起動
設定の変更が完了したら、Squidを再起動します。
1 |
$ sudo systemctl restart squid.conf |
クライアント側のプロキシ設定
次に、RaspberryPiから離れて、クライアントPCの設定をします。
今回は、クライアントPCはWIndows10を使用しました。
Windows10を立ち上げて、以下のように設定します。
「スタート」→「設定」→「プロキシ設定を開く」
以下の画面のように変更してください。

これで、Webにアクセスしてみてください。
リバースプロキシーとして設定する
Webサーバーと、その前段階で動作するプロキシーを別々のマシンで動作する環境を構築します。
Squidの設定ファイルを編集します。
1 |
$ sudo vim.tiny /etc/squid/squid.conf |
リバースプロキシーとして設定する場合、以下のように変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# プロキシのポート番号 http_port 80 # 公開しているWebサーバーの名前 visible_hostname サーバー名 # 80番ポートへのアクセスのみ許可 acl webserver port 80 http_access deny all http_access allow webserver # Webサーバーのリバースプロキシとして配置するために設定 http_port WebサーバーのIPアドレス:80 accel ignore-cc defaultsite=webサーバーのIPアドレス #キャッシュメモリの設定 cache_mem 512 MB cache_dir ufs /var/cache/squid 1000 32 128 # 動的なコンテンツをキャッシュさせないための設定 acl nocache urlpath_regex .*¥/cgi-bin¥/.* # CGIのキャッシュを不可にする acl nocache urlpath_regex .*¥.php$ # PHPのキャッシュを不可にする acl nocache urlpath_regex .*¥.php¥?.* #PHPのキャッシュを不可にする cache deny nocache |
以上が、設定ファイルの編集内容です。
また、Webサーバー側ではプロキシーからのアクセス以外を受け付けない設定を必要です。
Squidを再起動する
1 |
sudo systemctl restart squid.service |
以上のコマンドで、Squidを再起動して設定を反映すると、リバースプロキシーサーバーの完成です。
今回参考にした本
まとめ
今回は、RaspberryPiとUbuntuServerを使って、Squidを実装し、プロキシサーバーの構築をしました。
Squidw使うと、フォワードプロキシーとリバースプロキシーのどちらも設定でき、かつ設定も簡単でした。
プロキシサーバーの勉強のために、構築してみてください。
コメント