AlamLinuxでSquid(プロキシサーバ)の設定
0.事前準備
・OS:AlmaLinux release 8.5 (Arctic Sphynx)
・SELinux:無効化
・firewall:標準(OSインストール直後)
1.Squidのインストール
dnfでインストール実施します。
dnf -y install squid
2.コンフィグの設定
・コンフィグの場所
/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 "<ファイルパス>"
・ファイルの書き方(例)
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
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
参考サイト
いつもお世話になっております。。
Squid公式ページ Server Worksさんのページ次回に向けたメモ
Squidは透過プロキシもある。この時、Squid側のサーバでNAT機能も必要になる。
Discussion