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をVirtualBoxにインストールしてXからdnfを打つまで

2019年9月24日(米時間)CentOS8がリリースされました。 RHEL8リリースから4か月、まだかまだかとリリース進捗を眺めていた方も多かったのではないでしょうか。 「時間が出来たら入れてみよう …

CentOSで暗号鍵用のパスワードを生成

そこそこ長くて文字種の入り混じった強度の高いものを自分で考えるのは面倒です。 暗号化処理を使う際に必要なパスワード文字列を、mkpasswdコマンドでいい感じに生成出来るようにしておきます。 目次1 …

Linux、Macでハードディスクが一杯になった時の対処

「いつの間にかハードディスク一杯になってた・・・」 運用側が10:0で言い訳出来ない障害の一つなんじゃないでしょうか。 怖い先輩(上役)に体育館裏(会議室)に連れていかれる恐怖を思い出します。 運管ミ …

Android版ChromiumをVirtualBoxにインストールしたUbuntuでビルドしてみる

「Chromium」はChromeの開発ソースが公開されたプロジェクトです。 www.chromium.org  1 UserGet the Code: Checkout, Build, & …

Linuxコマンドラインで英語を日本語翻訳、cowsayは日本語を話せる

サバサバしがちなIT開発現場、一服の潤いが必要ですね。以前、Linuxログインした時に牛に格言を喋らせる伝統芸能を試しました。 One IT ThingLinuxのシェルログイン時、牛に格言を喋らせる …

 

shingo.nakanishi
 

東京在勤、1977年生まれ、IT職歴2n年、生涯現役技術者を目指しています。健康第一。