🎉

AlamLinuxでSquid(プロキシサーバ)の設定

2022/03/30に公開

0.事前準備

・OS:AlmaLinux release 8.5 (Arctic Sphynx)
・SELinux:無効化
・firewall:標準(OSインストール直後)

1.Squidのインストール

dnfでインストール実施します。

dnf -y install squid

2.コンフィグの設定

・コンフィグの場所

/etc/squid/squid.conf

コンフィグ例

・コンフィグの設定方法
当方で設定したコンフィグを例として表記する。

/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 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 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 70          # gopher
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

# /etc/squid/blacklistファイルに拒否するドメインを記載・・⓷
acl blacklist dstdomain "/etc/squid/blacklist"
http_access deny blacklist

# 許可しないポートの指定・・・⓸
# Recommended minimum Access Permission configuration:
# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# 許可しないSSLポートの設定・・・⓹
# 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
#以下許可設定
# 接続クライアントの許可設定・・・⓻
http_access allow localnet      # localnetで指定したネットワークを許可
http_access allow localhost     # localhostを指定
http_access deny all            # すべてを拒否

# プロキシサーバの待ち受けポート・・・⓼
# Squid normally listens to port 3128
http_port 3128

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

# 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 ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

# キャッシュの設定・・・⓽
# キャッシュに256MB、ディレクトリのキャッシュレベルを第一段階16,第二段階256フォルダ
# ufsってのはキャッシュフォーマット
cache_mem 256 MB
cache_dir ufs /var/spool/squid 200 16 256

# エラーページにバージョンを表示させない・・・⓾
httpd_suppress_version_string on

以下解説:

⓵、⓶ネットワーク/ポートの指定

ネットワークを指定し後々、許可拒否の設定を行う。指定する際はローカルのネットワークを指定する。指定方法の書式は以下の通り

acl <name> <type> <引数>

・指定方法
name:何でもよい今回は、localnetにしている。
typeは一例として以下のものがある。

type 使い方 説明
proto proto <プロトコル> 通信プロトコル(http,ftp)の指定
src src <IPアドレス> 送信元NWの指定
port port <ポート番号> ポート番号の指定

⓷ ブラックリストの指定

ブラックリストファイルの指定方法

acl blacklist dstdomain "<ファイルパス>"

・ファイルの書き方(例)

(例)/etc/squid/blacklist
google.com
google.co.jp
yahoo.co.jp

※某メーカのホームページではサブドメインの指定のために.google.comというのもあったが、それを指定したらプロセスがエラーになった。バージョンによる?(未検証)

ブラックリストファイルの適用

http_access deny blacklist

⓸,⓹(設定)許可しないポート

※"!"ビックリマークに⓵、⓶のaclで指定したnameを指定する

http_access deny !<name>

⓺ マネージャ(未調査)の無効化

上に書いてある通り

⓻(設定)許可するNWの設定

記述方法は以下の通り

http_access allow <⓵、⓶で設定したNW名>
http_access deny all #すべて拒否

⓼プロキシの待ち受けポートの設定

記述方法は↑の通り。ここで指定したポートをインターネットオプションなどで指定する。

⓽キャッシュの設定

設定は以下のように行う

cache_mem <キャッシュの容量>
cache_dir <キャッシュタイプ> <ディレクトリ> <キャッシュサイズ> <階層1の数> <階層2の数>

階層というのは、キャッシュディレクトリ配下に作られるディレクトリの数

⓾エラーページにバージョンを表示させない

設定は↑の通り

設定が終わった後にやること

systemctl restart squid

各種firewall-cmdの設定

squidを許可する

firewall-cmd --zone=public --add-service=squid --permanent

実行テスト

squidが動作しているかを確認する

squidclient <オプション> <url>
##コマンド例:squidclient http://www.google.co.jp

※オプションは接続ポートなどを指定できる

アクセスログの場所

アクセスログの場所は以下の通り。rsyslogなどで記録してSprunkに飛ばしたらログ分析できるかも。

/var/log/squid/access.log

キャッシュマネージャ

squidをインストールするとキャッシュマネージャも自動的にインストールされる。
設定方法は下記の通り。

Apache(httpd)のインストール

dnf -y install httpd

Apacheの設定

コンフィグ設定

コンフィグの場所は、/etc/httpd/conf.d/squid.conf

/etc/httpd/conf.d/squid.conf
ScriptAlias /Squid/cgi-bin/cachemgr.cgi /usr/lib64/squid/cachemgr.cgi
<Location /Squid/cgi-bin/cachemgr.cgi>
 Require local
 Require ip 192.168.0.0/16
</Location>

firewall-cmdの設定

http通信を許可する設定を入れる

firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent

参考サイト

いつもお世話になっております。。
https://tech-mmmm.blogspot.com/2018/01/squid.html
Squid公式ページ
http://www.squid-cache.org/
Server Worksさんのページ
https://blog.serverworks.co.jp/squid

次回に向けたメモ

Squidは透過プロキシもある。この時、Squid側のサーバでNAT機能も必要になる。

Discussion