Linuxでプロキシサーバーを構築する方法(squid)

Linuxでプロキシサーバーを構築する方法(squid)

プロキシサーバーとは、企業などの組織で、内部ネットワークからインターネット接続する際に、高速なアクセスや安全な通信などを確保するために、内部ネットワーク上のPCなどの代わりにインターネット接続を行う中継(代理)サーバーを指しており、テスト環境や開発環境を構築する際にプロキシサーバーが必要となることがあります。

そこでここでは、RedHat互換のLinuxでSquidを使ってプロキシサーバーや認証付きプロキシサーバーを構築する基本的な手順を紹介します。

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

ソフトウェアバージョン
CentOS7.6.1810
Squid Cache3.5.20

Squidのインストール

squidは、標準のリポジトリからインストールできます。

# yum -y install squid

Squidの設定

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名を追加
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

~省略~

# キャッシュしないよう設定
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

以上で、設定完了です。

あとは、クライアントマシンのプロキシサーバー設定にこのサーバーのIPアドレスやポート番号を指定し、インターネットに接続できれば完了です。

Bsic認証を利用したいときは

squidでは、Bsic認証付きのProxy(プロキシ)サーバーを構築することもできます。

パッケージのインストール

squidでBsic認証を利用するには、httpd-toolsを追加インストールします。「httpd-tools」は、認証用ユーザーを作成するためのツールです。

# yum -y install 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

以上で設定完了です。

動作確認

あとは、クライアントマシンのプロキシサーバー設定にこのサーバーのIPアドレスやポート番号を指定し、インターネットに接続したときに、以下の画像のような認証用のダイアログが表示され、認証用ユーザー「testuser」とパスワードを入力して「OK」をクリックし、Webページが表示されればOKです。

Linuxでプロキシサーバーを構築する方法(squid)

あとがき

キャッシュ機能も利用したい場合は追加の設定が必要ですが、代理サーバーとしてだけなら上に紹介したように簡単に構築できます。