仕事で toB 向けの electron アプリをリリースしたのですが、とある企業が認証プロキシを使用しているらしく、アプリがネットワークエラーになるという報告があがってきました。electron のドキュメントを読むと、プロキシサーバに認証情報を送るのは、app.on(’login’) というのを使えば実装できそうであるということはすぐにわかりました。
ただ弊社環境には認証プロキシサーバがありません。
バックエンドの方に依頼するにもとても忙しそうです。
自分でやるしかなさそうなので自分で認証つきのプロキシサーバを立てることにしました👼
conoha vps にプライベートのサーバが 1 個あったのでそれを使うことにしました。こういう時のためにラズパイとか持ってたら便利なんだろうなとおもいました。そのうち買います。
サーバに ssh 接続
$ ssh username@xxx.xxx.xxx.xxx
squid install
# squid インストール
$ sudo apt install squid
# バージョン確認
$ squid -v
squid で使用する 3128 port を解放
squid を利用するためには 3128 port を解放する必要があるらしいので、解放
# 3128 port 解放
$ sudo ufw allow 3128
# 確認
$ sudo ufw status
Status: inactive
# 非アクティブなので、アクティブにする
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
# もういちど確認
$ sudo ufw status
Status: active
To Action From
-- ------ ----
3128 ALLOW Anywhere
3128 (v6) ALLOW Anywhere (v6)
# ok
特定の pc からのアクセスを許可する
- 自分の pc の ip アドレスを調べられるサイト
# squid の設定ファイルを編集
$ vi /etc/squid/squid.conf
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost
acl testacl src xxx.xxx.xxx.xxx/32 // 追記 (xxx は自分の pc の ip アドレス)
http_access allow testacl // 追記
# And finally deny all other access to this proxy
http_access deny all
# TAG: adapted_http_access
# Allowing or Denying access based on defined access lists
#
# これ何のためのコマンドかわからんので後でしらべる
$ squid -z
# 設定ファイルを反映させるため、squid を再起動させる
$ service squid start
windows proxy を設定したあと https://www.cman.jp/network/support/go_access.cgi にアクセスすると、ip アドレスが、ちゃんとプロキシサーバの ip になっていれば成功🎉
basic 認証をつける
# apache2-utils を install
$ sudo apt-get install apache2-utils
# htpasswd コマンドで任意のディレクトリにパスワードファイルを作成 (user のところは任意の username)
$ sudo htpasswd -c /etc/squid/.htpasswd user
New password:
Re-type new password:
Adding password for user user
# 設定ファイルを作成
$ sudo touch /etc/squid/conf.d/basic_auth.conf
# 設定を記述
$ sudo vi /etc/squid/conf.d/basic_auth.conf
# パスワードファイルのパス
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/.htpasswd
auth_param basic children 5
auth_param basic realm Squid Basic Authentication
# 1h の間だけ認証が有効
# auth_param basic credentialsttl 1 hours
# 今回はテストで使いたいので 1 min で認証が切れるように設定
# auth_param basic credentialsttl 1 minute
acl password proxy_auth REQUIRED
http_access allow password
おまけ
3128 port だけ解放するようにしてたら、サーバに ssh できなくなったのでちゃんと 22 port を開けておく
# 22 port を開ける
$ sodu ufw allow 22
# 確認
$ sudo ufw status
To Action From
-- ------ ----
3128 ALLOW Anywhere
22 ALLOW Anywhere
3128 (v6) ALLOW Anywhere (v6)
22 (v6) ALLOW Anywhere (v6)
参考
- Squidによるプロキシサーバー構築手順【Ubuntu】
- この記事を参考に進めた
- iptablesが難しいためufwでWEBサーバーのファイアウォール設定
- ufw status が非アクティブになったのでそれを回避する方法を調べた
- [Ubuntu][20.04] Squidでラボ用HTTP/HTTPS proxyを作る
- pc からプロキシ設定してもうまく proxy サーバに繋がらないなと思って調べたら、squid の初期設定では localhost 意外は拒否する設定になっているらしい。
- ConoHaはじめてのProxyサーバー構築
- proxyサーバ squidでアクセス時に認証を要求する設定
- proxy の認証には basic 認証と digest 認証というのがあるらしい
- Raspberry Pi 4にSquidでbasic認証付きプロキシサーバを立てる
- proxy サーバでの basic 認証の入れ方がわかりやすい
sudo htpasswd -c /etc/squid/htpasswd user
->sudo htpasswd -c /etc/squid/.htpasswd user