Squidインスタンス(EC2)でプロキシ構成のハンズオン


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

はじめに

検証環境のパブリックサブネットにNATインスタンスを構築したものの、プライベートサブネットに構築したインスタンス経由で、どんなインターネットにも接続できてしまうので、Squidインスタンスを用いて制限をかけようと思います。

【前回の構築ブログ】
・NATインスタンス(EC2)をハンズオン

【参考】
・squid ドキュメント

ざっくりSquid

Squidはオープンソースのプロキシサーバー及びキャッシュサーバー。
クライアントコンピュータがインターネット等のリクエストを送信する際に、中間でリクエストを処理しアクセス制御等の複数機能を提供する。

【参考】
・IT用語辞典


構成図

前回構築している構成に、squidを設定したEC2を構築


ハンズオン

構築のながれ

1.EC2(squid)インスタンス構築(マネジメントコンソール)

2.EC2(squid)インスタンスの設定(SSH接続)

3.EC2(クライアント)の設定(リモートデスクトップ)


1. EC2(squid)インスタンス構築(マネジメントコンソール)

1.1.Squidインスタンスをセットアップ

Amazon Web Services (AWS) アカウントにログインし、下記設定値のEC2インスタンスを作成。

項目 設定値
インスタンスタイプ t2.micro
AMI ID ami-0df2ca8a354185e1e(Amazon Linux)
サブネット パブリックサブネット
パブリック IP の自動割り当て ◯

1.2. セキュリティグループの設定

インスタンス作成時にセキュリティグループを設定し、プライベートサブネットからのアクセスのみを開放。

【インバウンド】

タイプ プロトコル ポート範囲 ソース CIDR
すべてのトラフィック すべて すべて カスタム 【プライベートサブネットCIDR】

【アウトバウンド】

タイプ プロトコル ポート範囲 ソース CIDR
すべてのトラフィック すべて すべて カスタム 0.0.0.0/0

1.3. IAMロールの設定

SSMよるフリートマネージャよりアクセスも出来るように作成

許可ポリシー タイプ
AmazonSSMManagedInstanceCore AWS 管理

1.4. インスタンスを起動

上記設定後、『インスタンスを起動』を押下

1.5.NATインスタンスのSG設定

NATインスタンスにSquidインスタンスからの3128のインバウンドを許可する

1.5.1.NATインスタンスのSGへ移動

『対象 NATインスタンス』 → タブ『セキュリティグループ』 → 『セキュリティグループ』を押下

1.5.2.SGの設定画面へ移動

『インバウンドルールの追加』を押下

1.5.3.SquidインスタンスのプライベートIP追加

手順1.4で立ち上がった、SquidインスタンスのプライベートIPから3128の受け入れを設定


2.EC2(squid)インスタンスの設定(SSH接続)

2.1.squidをインストール

squidをインストールする

sudo yum install squid

2.2.各サーバごとに設定ファイルを作成

sudo vi /etc/squid/squid.confするのではなく、今後の拡張性より各サーバごとに設定ファイルを編集するためconf.d配下に設定ファイルを作成

sudo mkdir /etc/squid/conf.d
sudo vi /etc/squid/conf.d/client1_restrictions.conf

2.3.設定ファイルを編集する

下記設定を設定ファイルに記載
・1行目:restricted_clientという名前のACLで、「172.16.10.119/32」のクライアントサーバを対象とする
・2行目:yahoo_domainsという名前のACLで、「.yahoo.com」「.yahoo.co.jp」ドメインを対象とする
・3行目:restricted_client は yahoo_domains にアクセスが出来ない

acl restricted_client src 172.16.10.119/32
acl yahoo_domains dstdomain .yahoo.com .yahoo.co.jp
http_access deny restricted_client yahoo_domains

2.4.Squidのメイン設定ファイル(/etc/squid/squid.conf)を編集し、conf.d ディレクトリ内の設定ファイルをインクルードするよう設定

2.4.1.Squidのメイン設定ファイルを編集
sudo vi /etc/squid/squid.conf

2.4.2.Squidのメイン設定ファイルに、インクルード設定

設定ファイルの最初に以下の行を追加して、conf.d ディレクトリ内のすべての設定ファイルを読み込むように設定します。

include /etc/squid/conf.d/*.conf

2.5.Squidの設定を反映し、Squidを再起動

sudo systemctl restart squid


3.EC2(クライアント)の設定(リモートデスクトップ)

3.1.フリートマネージャーからリモートデスクトップ(RDP)を選択

『AWS SystemsManager』 → 『フリートマネージャー』 → 『ノードアクション』 → 『リモートデスクトップ(RDP)との接続』を押下
※個人の環境の影響になるかと思いますが、自分はフリートマネージャーの画面にEC2が反映されるまで10分程度かかりました。

3.2.フリートマネージャーからリモートデスクトップ(RDP)でアクセス


3.3.Windowsの[インターネットオプション] > [接続] > [LANの設定]で、プロキシサーバーのアドレスとポート指定

アドレスにはSquidプロキシサーバーのプライベートIPアドレスを、ポートには3128を入力


挙動の確認

1.1.リモートデスクトップ(RDP)先から、インターネットへアクセス


1.2.Squidで制御したyahooへのアクセスが出来ない


2.EC2(Squid)でログの確認

下記コマンドでアクセスを制御していることを確認

sudo cat /var/log/squid/access.log | grep TCP_DENIED

レスポンスとして下記のようなログが出力される


さいごに

やっと”見ちゃダメ”なサイトを制御することができるようになりました。
Squidは他にもキャッシュなどの設定も出来ることなど、新しい発見が多い構築となりました。

Last modified: 2023-05-04

Author