linux 開発インフラ

認証付きHTTPプロキシを認証無しで利用する下位プロキシをsquidで構築

投稿日:

はじめに

プロキシに認証が必要になることでWebブラウザを開いた時に一々認証ダイアログが出て来たります。それは個人レベルで対処すれば良いのですが、

  • 開発サーバで使っているミドル全てに認証設定が必要になる
  • 夜間にSeleniumなどでブラウザ起動すると認証ダイアログが出てしまい、自動でE2Eテストが出来ない

など付帯作業やCI的なプチ詰みが発生してしまいます。プロキシのホスト名が変わった日には設定し直しのオンパレードになってコストが掛かりますし、トラブルの元にもなりかねないので、サーバや開発端末機器がHTTPで外部に出る際の認証はsquidに代行して貰うようにします。

環境

  • CentOS7.6

手順

squidをインストール

3.5.20が入りました。

[root@spock ~]# yum install squid

[root@spock ~]# squid -v
Squid Cache: Version 3.5.20
Service Name: squid
configure options:  '--build=x86_64-redhat-linux-gnu'・・・・・・・・・・

/etc/squid/squid.confを設定

上位プロキシを指定する書式は以下になります。
cache_peer hostname type http-port icp-port [options]

詳しくはsquid公式サイトを参照。

squidが使用するプロキシアカウントは事前に管理者から調達しておきましょう。

今回はキャッシュしないのでicp-portは無効である0を指定します。どの道上位プロキシがキャッシュしてくれますし、以前にiOSのWKWebViewがsquidのキャッシュ更新を検知出来ずハマった経験がある為です。インターネットに出ているプロキシでなければ(すぐに変更反映を確認したい開発環境プロキシであれば特に)キャッシュは不要です。

[root@spock ~]# vi /etc/squid/squid.conf
#
# Recommended minimum configuration:

     (snip)

# 追加
# このsquidの親になるプロキシを認証付きで指定
cache_peer main.proxy.com parent 8080 0 no-query no-netdb-exchange no-digest login=プロキシユーザ:パスワード default
# サブProxyがあれば設定
cache_peer sub.proxy.com parent 8080 0 no-query no-netdb-exchange no-digest login=プロキシユーザ:パスワード

# ローカルネットワークセグメントには親プロキシを通さずダイレクトアクセス
acl developersegments1 dst 10.85.30.0/24
acl developersegments2 dst 10.85.122.0/24

always_direct allow developersegments1
always_direct allow developersegments2

never_direct allow all

# キャッシュしない
cache deny all

設定後、squid -k parseして設定にミスが無いか確認しておきます。

[root@spock ~]# squid -k parse

squid起動

OS再起動しても自動起動するようにenableもしておきます。

[root@spock ~]# systemctl start squid
[root@spock ~]# systemctl enable squid

3128ポート開放

firewalldでsquidが使用する3128ポートを開けておきます。

[root@spock ~]# firewall-cmd --add-port=3128/tcp --zone=public --permanent
[root@spock ~]# firewall-cmd --reload

各種端末で上記プロキシを設定

Windows、Mac、Linux、Android、iPhoneそれぞれで構築したsquidをプロキシとして参照する設定を行います。今まで指定していた認証付き上位プロキシを指定していた箇所で、

  • IPアドレス:squid起動PCのIPアドレス
  • ポート:3128

を指定します。ブラウザを開いて認証ダイアログが表示されずにインターネットサイトを表示出来ればOKです。

まとめ

昔のAndroidはプロキシに認証情報が付けられなかったので、認証を代行する下位プロキシは必須でした。

自前のPCもこのsquidをプロキシとして設定すればブラウザを開く度に認証ダイアログが出なくなって煩わしさが無くなりますが、本来与えられているプロキシアカウントとは違うアカウントで仕事をすることになるので目ざとい管理者には目を付けられるかも知れません。

そういう場合は自分のPCに「Proxyomitron」でも入れて、自分のプロキシアカウントを指定したプロキシをローカルPC上で立ち上げればいいと思います。

macならbrew install squidでsquidがインストール出来ます。

-linux, 開発インフラ

執筆者:

関連記事

CentOS8にPostgreSQL12をインストールする手順

以前CentOS7にPostgreSQL11をインストールしてSQL実行しました。 One IT Thing  1 Pocket開発用PostgreSQLをCentOSにインストールしてSQ …

開発中のWebシステム上でApple Pay決済を有効化する為のApple Developer Program設定 

WebシステムでApple Pay決済を有効にするにはApple側にその旨を認証して貰う必要が有ります。 前回、Web上でApple Payテスト課金をする為のサンドボックステスターを作成しました。 …

podmanとNode.js公式コンテナイメージでnodeコマンドを使う

REHL8(CentOS8)からデフォルトインストールされるようになったpodmanでnodeコマンドが使える環境を作ってみます。 目次1 環境2 やること3 Node.jsイメージの導入4 コンテナ …

LinuxでDOOMをプレイ(ゲームソースコードをコンパイル)

「IT業界に”技術者”として身を置く人はおよそ100%コンピュータゲーム好き、あるいは若い頃にハマった経験がある」という仮説を唱えてやまない投稿主です。 そんなゲーム好きな皆様(決めつけ)は「arch …

テキストファイル内の改行コード差異を見つけるワンライナー

ファイル内容は同じなのにdiffで違いが出るWeb上でソースレビューする時に同じ内容の行なのに差分が出て紛らわしい これらの原因はWindows、Mac、Linuxが入り混じった、改行コードが統一され …

 

shingo.nakanishi
 

東京在勤、1977年生まれ、IT職歴2n年、生涯技術者として楽しく生きることを目指しています。デスマに負けず健康第一。