CentOS7のSquidでBasic認証付きプロキシーサーバーを構築する

Windowsメインの環境で、検証目的などでプロキシーサーバーが欲しい場合、認証なしのプロキシーサーバーは、フリーツールなどを利用してサクッと構築できますが、認証付きのプロキシーサーバーは、Windows環境で利用できるツールは意外とありません。

そんなときは下手にネットで探し回るより、Windows10のHyper-Vなどで、CentOS7+squidで認証付きプロキシーサーバーを仮想マシンとして構築してしまったほうが手っ取り早いです。

そこで、ここではCentOS7+squidで認証付きプロキシーサーバーを構築する手順を紹介します。

なお、ここで紹介する手順では、OSのセキュリティ対策は考慮していませんので、本番環境などで構築する場合は、別途必要な対策を講じてくださいね。

動作環境

この記事は、以下の環境で実行した結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェア バージョン
CentOS 7.6.1810
Squid Cache 3.5.20

CentOS7のインストールと初期設定

CentOS7のインストールと初期設定手順については、ここでは項目だけの紹介とさせていただきます。

CentOS7のインストール

MinimalDVD(CentOS-7-x86_64-Minimal-1810.iso)を使用して、OSのインストールを行い、インストール時には以下の項目を設定しました。

  • ネットワーク設定
  • ホスト名設定
  • kdump:無効化
  • セキュリティポリシー:OFF

CentOS7の初期設定

OSのインストールが完了したら、次の設定を実施しておきます。

  • yumコマンドで、システム更新
  • 最低限のパッケージ(kernel-devel kernel-headers gcc gcc-c++)をインストール
  • SElinuxは無効化
  • NTPクライアント設定

あとは、ご自分の環境に合わせて、適宜パッケージを追加するなり、追加設定するなりしてください。

squidで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

以上で設定完了です。

動作確認

最後に、クライアントマシンのプロキシーサーバー設定に構築したサーバーを設定し、任意のWebブラウザでインターネットに接続してみます。

以下の画像のような認証用のダイアログが表示されて、認証用ユーザー「testuser」とパスワードを入力し「OK」をクリックし、無事Webページが表示されれば成功です。

あとがき

いかがでしょうか。LinuxOSに触ったことがないと、構築に少し時間がかかるかもしれませんが、細かな設定を気にしなければそんなに難しくはないと思います。お試しあれ。

トップへ戻る