【AWS メモ⑥】プロキシサーバの構築(Squid3.5)

この記事はQiitaの記事をエクスポートしたものです。内容が古くなっている可能性があります。

Squid3.5を仕事で使う機会があったので備忘録的なものを残しておく。

前提

以下の環境で実行。

サブネット

サブネット名 ルートテーブル設定
public-subnet ・local
private-subnet ・local
・インターネットゲートウェイ

セキュリティグループ

セキュリティグループ名 設定
public-sg ・社内グローバルIPアドレスからのアクセスを許可(ポート22)
・public-sgからのアクセスを許可(ポート3128) ※ Squidのポート
private-sg ・public-sgからのアクセスのみ許可(ポート22)

EC2

ホスト名 OS セキュリティグループ
proxy-server Amazon Linux 2 public-sg
private-server Amazon Linux 2 private-sg

Squidの動作モードは、フォワードプロキシで行い、プライベートサブネット内のEC2のパッケージ更新は、Squidをインストールしたプロキシサーバーを中継して行う。

スクリーンショット 2019-09-12 12.34.18.png

プロキシサーバーの設定

proxy-server にSquid3.5をインストールする。

$ sudo yum install squid -y

自動起動を有効にする。

$ sudo systemctl enable squid

設定方法①

管理するサーバーの台数やサブネットの数が少ない場合は、Squidの設定ファイルに直接対象のIPアドレスまたはサブネットのCIDRを記述することがある。

Squidの設定ファイルを開く。

$ sudo vi /etc/squid/squid.conf

設定ファイルに、以下の設定を追加する。

ここでは、プライベートサブネットからのすべてのアクセスを許可する。

# 追加: プライベートサブネット用の変数を作成
acl private-subnet src <プライベートサブネットのCIDR>
# 追加: プライベートサブネットからのアクセス許可
http_access allow private-subnet

ポート番号の指定(デフォルトでは3128)

# Squid normally listens to port 3128
http_port 3128

設定完了後、サービスを再起動する。

$ sudo service squid restart

設定方法②

設定方法①とは異なり、サーバーの台数やサブネットの数が多い場合に管理をし易くするために、ホワイトリストという外部ファイルを用意する方法がある。

以下のファイルを作成する。

$ sudo vi /etc/squid/acl/whitelist.txt

プロキシを経由したいサーバーのプライベートIPアドレスまたは、サブネットのCIDRを記述する。

プライベートサブネットのCIDR
サーバーのプライベートIPアドレス
サーバーのプライベートIPアドレスその2
        ・
        ・

作成した外部ファイルを設定ファイルで読み込むように設定する。

$ sudo vi /etc/squid/squid.conf

以下の設定を追加する。

# 外部ファイルを読み込み、変数を生成
acl Whitelist dstdomain "/etc/squid/acl/Whitelist.txt"
# 外部ファイルに設定されたサーバー、サブネットからのアクセスを許可
http_access allow Whitelist
http_access deny all

設定完了後、サービスを再起動する。

$ sudo service squid restart

プライベートサーバーの設定

プロキシサーバーを経由して、アクセスするためにyumwgetの設定ファイルにプロキシ設定を行う。

yumの設定

設定ファイルを開く。

$ sudo vi /etc/yum.conf

プロキシ設定を追加する。(ポート番号はSquidのデフォルト)

proxy=http://<プロキシサーバーのプライベートIPアドレス>:3128

wgetの設定

設定ファイルを開く。

$ sudo vi /etc/wgetrc

プロキシ設定を追加する。(ポート番号はSquidのデフォルト)

http_proxy=http://<プロキシサーバーのプライベートIPアドレス>:3128/
https_proxy=http://<プロキシサーバーのプライベートIPアドレス>:3128/
ftp_proxy=http://<プロキシサーバーのプライベートIPアドレス>:3128/

動作確認

プライベートサーバーでパッケージのインストールを行う。

$ sudo yum install vim

wgetの動作も確認する。

$ wget -pkK https://www.gnu.org/software/wget/

おまけ①:ログフォーマットの設定

プライベートサーバーからのアクセスがあると、プロキシサーバーにログが保存される。

$ sudo vi /var/log/squid/access.log

デフォルトの設定だと、アクセス時刻がわかりづらい。

1568267525.352   1183 xxx.xx.xx.xx TCP_TUNNEL/200 19161 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
1568267525.946    591 xxx.xx.xx.xx TCP_TUNNEL/200 4197 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
1568267526.558    610 xxx.xx.xx.xx TCP_TUNNEL/200 6509 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
1568267527.168    609 xxx.xx.xx.xx TCP_TUNNEL/200 7403 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
1568267527.919    748 xxx.xx.xx.xx TCP_TUNNEL/200 19351 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
1568267528.520    600 xxx.xx.xx.xx TCP_TUNNEL/200 5569 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
1568267529.211    689 xxx.xx.xx.xx TCP_TUNNEL/200 11569 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
1568267529.817    603 xxx.xx.xx.xx TCP_TUNNEL/200 6385 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -

ログフォーマットの設定は、Squidの設定ファイルに追加する。

$ sudo vi /etc/squid/squid.conf

こちら を参考にログの設定を追加する。

logformat squid [%{%Y/%m/%d.%H:%M:%S}tl] %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt

追加したらサービスを再起動して、再度ログの出力確認をする。

$ sudo service squid restart
$ sudo cat /var/log/squid/access.log

ログフォーマットが変わっていることを確認する。

[2019/09/12.06:16:28] xxx.xx.xx.xx TCP_TUNNEL/200 19161 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
[2019/09/12.06:16:29] xxx.xx.xx.xx TCP_TUNNEL/200 4197 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
[2019/09/12.06:16:29] xxx.xx.xx.xx TCP_TUNNEL/200 6509 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
[2019/09/12.06:16:30] xxx.xx.xx.xx TCP_TUNNEL/200 7403 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
[2019/09/12.06:16:31] xxx.xx.xx.xx TCP_TUNNEL/200 19351 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
[2019/09/12.06:16:31] xxx.xx.xx.xx TCP_TUNNEL/200 5569 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
[2019/09/12.06:16:32] xxx.xx.xx.xx TCP_TUNNEL/200 11569 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -
[2019/09/12.06:16:32] xxx.xx.xx.xx TCP_TUNNEL/200 6385 CONNECT www.gnu.org:443 - HIER_DIRECT/209.51.188.148 -

おまけ②:リクエストヘッダーの設定

リクエストヘッダーに情報を載せたくない場合、設定で無効にできる。

設定ファイルを開く。

$ sudo vi /etc/squid/squid.conf

以下の設定を追加することで無効にできる。

request_header_access Referer deny all

おまけ③:Gitのプロキシ設定

以下のコマンドを実行する。

$ git config --global http.proxy http://<プロキシサーバーのプライベートIPアドレス>:3128
$ git config --global https.proxy http://<プロキシサーバーのプライベートIPアドレス>:3128

おまけ④:Curlのプロキシ設定

以下のコマンドを実行する。

$ echo 'proxy = "http://<プロキシサーバーのプライベートIPアドレス>:3128"' >> ~/.curlrc