Windowsメインの環境で、検証目的などでProxy(プロキシ)サーバーが欲しい場合、認証なしのプロキシサーバーは、フリーツールなどを利用してサクッと構築できますが、認証付きのプロキシサーバーは、Windows環境で利用できるツールは意外とありません。
そんなときは下手にネットで探し回るより、Windows 10のHyper-Vなどで、CentOS 7+squidで認証付きプロキシサーバーを仮想マシンとして構築してしまったほうが手っ取り早いです。
そこでここでは、CentOS 7+squidで認証付きProxy(プロキシ)サーバーを構築する手順を紹介します。
なお、ここで紹介する手順では、OSのセキュリティ対策は考慮していませんので、本番環境などで構築する場合は、別途必要な対策を講じてください。

目次
動作環境
この記事は、以下の環境で実行した結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。
ソフトウェア | バージョン |
---|---|
CentOS | 7.6.1810 |
Squid Cache | 3.5.20 |
CentOS 7のインストールと初期設定
CentOS 7のインストールと初期設定手順については、ここでは項目だけの紹介とさせていただきます。
CentOS 7のインストール
MinimalDVD(CentOS-7-x86_64-Minimal-1810.iso)を使用して、OSのインストールを行い、インストール時には以下の項目を設定しました。
- ネットワーク設定
- ホスト名設定
- kdump:無効化
- セキュリティポリシー:OFF
CentOS 7の初期設定
OSのインストールが完了したら、次の設定を実施しておきます。
- yumコマンドで、システム更新
- 最低限のパッケージ(kernel-devel kernel-headers gcc gcc-c++)をインストール
- SElinuxは無効化
- NTPクライアント設定
あとは、ご自分の環境に合わせて、適宜パッケージを追加するなり、追加設定するなりしてください。
Bsic認証付きプロキシサーバーの構築
パッケージのインストール
OSの設定が完了したら、squidと関連パッケージをインストールします。「httpd-tools」は、認証用ユーザーを作成するときに使用します。
# yum -y install squid httpd-tools
認証用ユーザーの作成
ここでは、例として認証用ユーザー「testuser」を作成します。
# htpasswd -c /etc/squid/.htpasswd testuser
New password:XXXXXX
Re-type new password:XXXXX
Adding password for user testuser
パスワードを入力して「Adding password for user testuser」と表示されたら、認証用ユーザーの作成は完了です。
squid.conf設定
squidの設定を「squid.conf」に記述します。
なお、ここでは待ち受けポートの変更や、キャッシュしない設定なども行っています。
# vi /etc/squid/squid.conf
~省略~
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
# 接続を許可するネットワークを記述します。
acl lan src 192.168.10.0/24
~省略~
# 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名に対してアクセス許可を設定
http_access allow lan
# And finally deny all other access to this proxy
http_access deny all
# Squid normally listens to port 3128
#http_port 3128
# 既定値から待受ポートをIPv4の8080番へ変更
http_port 0.0.0.0:8080
~これより下の設定は、設定ファイルの最終行に追記します~
# Basic認証用の設定
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/.htpasswd
auth_param basic children 5
auth_param basic realm Squid Basic Authentication
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl pauth proxy_auth REQUIRED
http_access allow pauth
# キャッシュしないよう設定
no_cache deny all
# ログのフォーマットを見やすく整形
logformat combined %tl %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt
access_log /var/log/squid/access.log combined
# プロキシサーバー経由での接続を隠蔽
forwarded_for off
request_header_access Referer deny all
request_header_access X-FORWARDED-FOR deny all
request_header_access Via deny all
request_header_access Cache-Control deny all
サービス起動設定
サービスを起動し、システム起動時に自動で起動するよう設定
# systemctl start squid
# systemctl enable squid
ファイアウォール設定
待受ポートを既定値の3128/tcpから8080/tcpに変更しているので、firewalldのservice設定フィアルを修正します。
# cd /etc/firewalld/services
# cp /usr/lib/firewalld/services/squid.xml ./
# vi ./squid.xml
~省略~
<!-- <port protocol="tcp" port="3128"/> -->
<port protocol="tcp" port="8080"/>
~省略~
設定ファイルを修正したら、ファイアーウォールにsquidの通信を許可します。
# firewall-cmd --permanent --add-service=squid
# firewall-cmd --reload
以上で設定完了です。
動作確認
最後に、クライアントマシンのProxy(プロキシ)サーバー設定に構築したサーバーを設定し、任意のWebブラウザでインターネットに接続してみます。
以下の画像のような認証用のダイアログが表示されて、認証用ユーザー「testuser」とパスワードを入力し「OK」をクリックし、無事Webページが表示されれば成功です。
あとがき
いかがでしょうか。Linux OSに触ったことがないと、構築に少し時間がかかるかもしれませんが、細かな設定を気にしなければそんなに難しくはないと思います。お試しあれ。