こうこく
作 ▸
改 ▸

SquidでBasic認証つきオレオレHTTPSプロキシ立てる

Warning

開発用につきセキュリティはガバガバ。プログラム内から使うだけで、ブラウザ等から使うつもりもない。

Amazon LinuxSquid 3.5.20
もくじ

Squidインストール

sudo yum update
sudo yum -y install squid

自己署名証明書作成

散らかるので、適当なディレクトリを作ってその中で作成する。

期限はここでは10年 (3650日) にした。CSRを作るときに色々聞かれるけど、どこかに持ち出す可能性があるならCommon Nameくらいはちゃんと書いといた方がいいかも。

mkdir /path/to/oreore
cd /path/to/oreore
openssl genrsa 2048 > private.key
openssl req -new -key private.key > server.csr
openssl x509 -days 3650 -req -signkey private.key < server.csr > server.crt

これでできた private.key が秘密鍵で、server.crt が証明書。

Basic認証のパスワードファイル作成

ここではユーザー名 hoge、パスワード piyo、保存先は /path/to/passwd とする。

sudo su
echo "hoge:$(openssl passwd -apr1 piyo)" > /path/to/passwd

Squidの設定

ここでは待ち受けポートは 8081 とする。

Basic認証に使う /usr/lib64/squid/basic_ncsa_auth は、環境によっては lib64 じゃなくて lib かもしれない。というか basic_ncsa_auth じゃないかもしれない。実在するか先に確認しておくこと。

/etc/squid/squid.conf
#-----------------------------------------
# Basic認証
#-----------------------------------------
# 認証プログラムは /usr/lib64/squid/basic_ncsa_auth
# パスワードファイルは /path/to/passwd
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /path/to/passwd

# 一回認証したら2時間は覚えておく
auth_param basic credentialsttl 2 hours

# ユーザー名・パスワードの大文字小文字を気にする
auth_param basic casesensitive on

# 名称「password」で、認証必須のACLを定義
acl password proxy_auth REQUIRED

# ACL「password」にパスすればアクセスさせる
http_access allow password

#-----------------------------------------
# HTTPS設定
#-----------------------------------------
# ポート8081で待ち受け
# 証明書ファイルは /path/to/oreore/server.crt
# 秘密鍵ファイルは /path/to/oreore/private.key
https_port 8081 cert=/path/to/oreore/server.crt key=/path/to/oreore/private.key

# プロキシサーバーのホスト名を隠す
visible_hostname unkown

# 転送元の情報を隠す
forwarded_for off
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all

# コアダンプの出力先は /var/spool/squid
coredump_dir /var/spool/squid

設定し終わったらサービス再起動する。すでに上がってる場合、地味に停止に30秒くらいかかる。

sudo service squid restart

動作確認

ここではプロキシのIPは 111.111.111.111 とする。

cURLでプロキシ挿してどこかにアクセスしてみる。対象はHTTPでもHTTPSでもOK。できればアクセス元のIPアドレスが表示されるサイトだと、ちゃんと挿さってるか真に確認できる。

curl -x https://hoge:piyo@111.111.111.111:8081 --proxy-insecure https://note.kiriukun.com

プロキシがオレオレなので --proxy-insecure をつけないとエラーになる。

あと、Windows版cURLではそもそもhttpsプロキシがサポートされてないっぽいので、プロキシとは別のLinuxからじゃないと確認できない。

念のため、プロキシのURLがHTTPだとアクセスできないことも確認する。

curl -x http://hoge:piyo@111.111.111.111:8081 https://note.kiriukun.com

以上!

参考にさせていただいた記事

NginxでBasic認証させる件 - Qiita

https\_port

squidで相手先に送信されるプロキシサーバーの情報を隠してみる · mechamogera/MyTips Wiki · GitHub

この記事に何かあればこちらまで (非公開)