SquidでBasic認証つきオレオレHTTPSプロキシ立てる
Warning
開発用につきセキュリティはガバガバ。プログラム内から使うだけで、ブラウザ等から使うつもりもない。
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
じゃないかもしれない。実在するか先に確認しておくこと。
#-----------------------------------------
# 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
以上!
参考にさせていただいた記事
squidで相手先に送信されるプロキシサーバーの情報を隠してみる · mechamogera/MyTips Wiki · GitHub