squidを使用したプロキシサーバを構築する手順を紹介します。ここではフォワードプロキシとし、内部セグメントからのみアクセス(利用)可能とします。
squidのインストール
まず、squidを下記コマンドでインストールします。
# dnf install 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の開放
サービスの自動起動の設定と、サービスの稼働を行います。
# systemctl enable squid
# systemctl start squid
ここでは、ポート番号8080で設定していますので、firewalldで192.168.0.0/24からアクセス可能にします。
# firewall-cmd --permanent --zone=public -add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="8080" accept"
動作確認
動作確認は、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
今回はここまでです。最後までお読みいただきありがとうございました。