squidを使用してプロキシサーバを構築する手順

squidを使用したプロキシサーバを構築する手順を紹介します。ここではフォワードプロキシとし、内部セグメントからのみアクセス(利用)可能とします。

squidのインストール

まず、squidを下記コマンドでインストールします。

コンフィグファイル(/etc/squid/squid.conf)の編集

次にsquidのコンフィグファイル(/etc/squid/squid.conf)を編集します。

#
# Recommended minimum configuration:
#

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
#acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN)
#acl localnet src 10.0.0.0/8            # RFC 1918 local private network (LAN)
#acl localnet src 100.64.0.0/10         # RFC 6598 shared address space (CGN)
#acl localnet src 169.254.0.0/16        # RFC 3927 link-local (directly plugged) machines
#acl localnet src 172.16.0.0/12         # RFC 1918 local private network (LAN)
#acl localnet src 192.168.0.0/16                # RFC 1918 local private network (LAN)
#acl localnet src fc00::/7              # RFC 4193 local private network range
#acl localnet src fe80::/10             # RFC 4291 link-local (directly plugged) machines
acl localnet src 192.168.1.0/24

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT

# blacklist
acl blacklist dstdomain "/etc/squid/blacklist"

#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# 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 deny blacklist
http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 192.168.0.23:8080

# Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /var/spool/squid 100 16 256
cache_mem 256 MB

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid

#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

# プロキシ経由アクセスの隠蔽化
visible_hostname unknown
forwarded_for off
request_header_access X-FORWARDED-FOR deny all
request_header_access Via deny all
request_header_access Cache-Control deny all

# アクセスログ
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" >Hs %<st \"%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
access_log /var/log/squid/access.log combined

# 帯域制限
# delay_pools 1
# delay_class 1 1
# delay_parameters 1 500000/500000 # 500KB/s = 4.0Mbps
# delay_access 1 allow test

サービスの起動とfirewalldの開放

サービスの自動起動の設定と、サービスの稼働を行います。

ここでは、ポート番号8080で設定していますので、firewalldで192.168.0.0/24からアクセス可能にします。

動作確認

動作確認は、192.168.0.XX/24のPCなどから、proxyの設定で、サーバとポート番号を指定して外部サイトなどにアクセスします。ちゃんとwebサイトが閲覧できること、squidのログ(/var/log/squid/access.log)にログが記録されるか等を確認します。

「診断くん」というサイトにアクセスすると、proxyの設定確認も可能です。

補足:親プロキシを経由する例

<必ず親プロキシを経由するパターン>

# 親プロキシを指定
cache_peer 親プロキシのIPアドレス parent 8080 0 no-query

# 上位プロキシを経由するように設定
never_direct allow all

<特定のアクセス先だけ、親プロキシを経由するパターン>

# 親プロキシを指定
cache_peer 親プロキシのIPアドレス parent 8080 0 no-query

# windows update list
acl to_winup dstdomain .microsoft.com .windowsupdate.com .login.live.com

# windows update だけ親プロキシを利用
cache_peer_access 親プロキシのIPアドレス allow to_winup
never_direct allow to_winup

always_direct allow !to_winup

今回はここまでです。最後までお読みいただきありがとうございました。