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, 開発インフラ

執筆者:

関連記事

podman + docker-comopseでwordpressを起動

前回podmanをdockerとして使えるようになりました。 One IT Thing  1 Pocketpodmanをdockerとして使うhttps://one-it-thing.com …

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

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

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

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

VirtualBoxにUbuntu18.04をインストール(SSH接続するまで)

2019年も変わらずLinuxディストリシェアトップをキープしたUbuntuをVirtualBoxでインストールします。 マイナビニュース  7 UsersDebianとCentOS下落- …

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

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

 

shingo.nakanishi
 

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