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をインストールしたプロキシサーバーを中継して行う。
プロキシサーバーの設定
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
プライベートサーバーの設定
プロキシサーバーを経由して、アクセスするためにyumとwgetの設定ファイルにプロキシ設定を行う。
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