Ubuntu ServerでVPNサーバーを構築すると予定でしたが、ネットワークの関係で構築が滞っているため、
ちょっとVPNはおやすみして、プロキシサーバーをUbuntuServer18.03.4LTSに構築していきます。
プロキシサーバーの役割
インターネットの出口などに設置されているサーバーに「プロキシ」があります。
よく会社や学校でPCを使用して作業していると、プロキシという言葉はよく聞くと思います。
なんとなく、セキュリティ上何か危ないものを防いでいるのかな〜っという認識の人もいるでしょう。
ではプロキシとは何をするものでしょうか。
まず、プロキシサーバーには2種類あります。
それぞれについて説明します。
フォワードプロキシー
フォワードプロキシーは、企業のLANからインターネットへの出口へ配置されるサーバーです。
主にアクセスを高速化するために用いられます。
クライアントのアクセスにより、インターネットから取得したWebコンテンツなどのデータを一時的にサーバー内に保存し、
再びアクセスがあれば、そのデータを渡すキャッシュのような役割を果たすことで、アクセスの高速化を実現しています。
クライアントからのインターネットアクセスがプロキシーを経由するため、
データのフィルタリングや、不適切なコンテンツ遮断、文書を翻訳できる機能を提供できます。
リバースプロキシー
リバースプロキシーと呼ばれるサーバーは、インターネットに公開しているWebサーバーの直前に配置するサーバーです。
このサーバーの場合、インターネットからのアクセスは、リバースプロキシーを経由するので、
サーバーデータのキャッシュや加工が可能になります。
Webサーバーの負荷を分散させ動作を高速化することや、セキュリティ対策にも使用されます。
プロキシー構築:Squid
UbuntuServerだけでなく、Linux上でプロキシーを構築するソフトは、Squidが使用されます。
Squidの特徴は、前述の2つの用途のサーバーを構築できることです。
Ubuntuでそれぞれのサーバーを構築します。
Squidのインストール
まず、Squidをインストールします。
$ sudo apt install squid
アプリケーションのインストールが完了したら、設定ファイルを変更します。
設定ファイルの編集:/etc/squid/squid.conf
ここで、フォワードプロキシーとリバースプロキシーで設定ファイルの編集方法が異なります。
フォワードプロキシーの構築
まず設定ファイルを編集します。
$ sudo vim /etc/squid/squid.conf
今回設定を行うパラメータは、以下の4つです。
・プロキシサーバーのポート番号
・アクセスリストの定義
・アクセス制限
・キャッシュメモリ容量
プロキシサーバーのポート番号
クライアントからのプロキシサーバーに接続するためのポート番号を設定します。
初期値は、ポート番号3128が設定されています。
そのため、よくプロキシサーバーで使用される「8000」もしくは、「8080」を設定しましょう。
# 1612行目
http_port 8080
アクセスリスト
次に、アクセスリストの設定です。
アクセスリストは、LANに接続されたPCやネットワーク機器のアクセスには、localhostという名前で制御できるように設定します。
このとき、ネットワースアドレスも指定します。
# 980行目
acl localhost src 192.168.1.0/24
アクセス制限
http_accessはSquidへのアクセスを制限するためのパラメータです。
指定した、ユーザーをアクセス許可/アクセス禁止のどちらかに指定します。
# 1192行目
http_access allow localhost
キャッシュメモリ容量
上記の他にも、cacheの最大容量を指定しましょう。
デフォルトでは有効になっていないので、以下のように変更して1000MBに変更しましょう。
今回はRaspberryPiに実装するので、1000MBは大きいサイズですが、
今どきのPCは大容量のメモリを保有しているので、1000MBでも問題ないでしょう。
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を再起動します。
$ sudo systemctl restart squid.conf
クライアント側のプロキシ設定
次に、RaspberryPiから離れて、クライアントPCの設定をします。
今回は、クライアントPCはWIndows10を使用しました。
Windows10を立ち上げて、以下のように設定します。
「スタート」→「設定」→「プロキシ設定を開く」
以下の画面のように変更してください。
これで、Webにアクセスしてみてください。
リバースプロキシーとして設定する
Webサーバーと、その前段階で動作するプロキシーを別々のマシンで動作する環境を構築します。
Squidの設定ファイルを編集します。
$ sudo vim.tiny /etc/squid/squid.conf
リバースプロキシーとして設定する場合、以下のように変更します。
# プロキシのポート番号
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を再起動する
sudo systemctl restart squid.service
以上のコマンドで、Squidを再起動して設定を反映すると、リバースプロキシーサーバーの完成です。
今回参考にした本
まとめ
今回は、RaspberryPiとUbuntuServerを使って、Squidを実装し、プロキシサーバーの構築をしました。
Squidw使うと、フォワードプロキシーとリバースプロキシーのどちらも設定でき、かつ設定も簡単でした。
プロキシサーバーの勉強のために、構築してみてください。
コメント