LinuxでSquidを設定・調整する方法 – 実体験
Squid を動作させること自体は、通常はそれほど難しいことではありません。重要なのは、すべてを正しく設定し、実際に動作させて、頭を悩ませることなくスムーズに動作させることです。Linux ではインストールを失敗させる方法が無数にあるように感じたり、おかしな権限設定や設定の競合が発生したりすることがあります。そこで、基本的なインストールからサーバーやファイアウォールとの連携確認まで、Squid を実際に動作させるための、やや面倒ながらも現実的な手順を解説します。空の Linux マシンから、HTTP/HTTPS トラフィックのプロキシ、キャッシュ、さらにはユーザー認証まで可能なマシンへと進化していくことを想定しています。少なくとも、それが今回の計画です。
LinuxにSquidプロキシサーバーをインストールする
パッケージマネージャーを選択し、リポジトリからインストールします
まず、Squidをインストールする必要があります。コマンドはディストリビューションによって異なります。Linuxは種類が多すぎるので注意が必要です。ほとんどのエンタープライズ向けまたはRHELベースのディストリビューション(Oracle、Rocky、CentOS、Fedora、RHEL)では、以下のコマンドを使用します。
# dnf install -y squid
Debian または Ubuntu ユーザーの場合は、次のようになります。
# apt-get install squid
SUSE (SLES など) を使用している場合は、次を試してください。
# zypper install squid
ユーザー認証をお考えですか?追加のパッケージが必要です。RHEL/CentOS/Fedoraの場合:
# dnf -y install httpd-tools
Debian/Ubuntu の場合:
# sudo apt install apache2-utils
次に、Squid を自動的に起動して実行するようにします。
# systemctl enable squid # systemctl start squid # systemctl status squid
セットアップによっては、最初の実行で失敗したり、再起動するまでサービスが起動しないなど、奇妙な状況が発生することがあります。しかし、それ以外の場合は問題なく動作します。Linux ですよね?
Squid がどのようなオプションでビルドされたか確認したいですか? 次のコマンドを実行してください:
# squid -v
これにより、バージョン、SSLサポート、特定の機能を使用してビルドしたかどうかなど、多くの情報が出力されます。出力は一見難しそうに見えますが、SSLやLDAPサポートなど、必要な機能がサーバーに備わっているかどうかを確認してください。
Squid キャッシュプロキシサーバーの設定
ハッキングする前にデフォルト設定をバックアップする
メインの設定は/etc/squid/squid.confにあります。Linux は当然ながら設定を複雑にするため、必ず最初にコピーして元の設定をロックしてください。
$ sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original $ sudo chmod a-w /etc/squid/squid.conf.original
こうすることで、調整がうまくいかなくなった場合でも、頭を悩ませることなく元に戻すことができます。
基本設定の構成を開始する
設定を編集します ( mceditまたはnanoを使用します— どちらでもお好みで)。
$ sudo mcedit /etc/squid/squid.conf
まず、接続を許可するクライアントを定義します。通常はローカルネットワークです。次の行を一番上のどこかに追記してください。
acl localnet src 192.168.50.0/24
他のACL localnet行はコメントアウトまたは削除してください。アクセスルールまでスクロールダウンし、以下の行を探します。
http_access allow localnet
この行は、ローカル クライアントにプロキシへのアクセスを許可します。
ポートとキャッシュサイズを設定する
必要に応じて、デフォルトのポート(TCP/3128)を変更します。例えば、4555に変更する場合は、以下のコマンドを実行します。
http_port 4555
これにより、複数のプロキシを運用している場合の衝突を防ぐことができます。ファイアウォールの設定にご注意ください。このポートは後で許可する必要があります。
キャッシュが必要ですか?次の行を追加または変更して、キャッシュのサイズと構造を設定します。
cache_dir ufs /var/spool/squid 5120 32 256
これは5GBのキャッシュを意味し、パフォーマンス向上のためにディレクトリに整理されています。次に、ディレクトリ構造を作成します。
$ sudo squid -z
これによりキャッシュディレクトリが初期化されます。権限やディスク容量の設定に誤りがあると、この手順でエラーが発生する場合がありますので、ご注意ください。
ユーザー認証を設定する(オプションだが推奨)
ユーザー名とパスワードでプロキシの使用者を制御するには、パスワードファイルが必要です。まず、パスワードファイルを作成します。
$ sudo touch /etc/squid/passwd $ sudo chown squid /etc/squid/passwd
次に、次のユーザーを追加します。
$ sudo htpasswd -c /etc/squid/passwd username1
次回は、-cを省略してユーザーを追加します。
次に、/etc/squid/squid.confに次の内容を追加して、squid に認証情報の場所を伝えます(通常は、先頭かその近くに追加します)。
# Enable basic auth auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd # Limit concurrent auth sessions auth_param basic children 5 # Realm shown on login prompts auth_param basic realm Squid Basic Authentication # Session time (here, 8 hours) auth_param basic credentialsttl 8 hours # Make auth case-insensitive auth_param basic casesensitive off acl auth_users proxy_auth REQUIRED http_access allow auth_users
basic_ncsa_authへのパスは様々です。Fedora または RHEL の場合は通常/usr/lib64/squid/basic_ncsa_authですが、Debian/Ubuntu の場合は通常/usr/lib/squid/basic_ncsa_authです。問題が発生した場合は、再度確認してください。
サイトのブロックとアクセス制御
Facebook や Twitter をブロックしたいですか? /etc/squid/blocked_sites のようなテキストファイルを作成し、禁止するサイトを 1 行ずつリストアップするだけです。
facebook.com twitter.com instagram.com
次に、これを設定に追加します。
acl blocked_sites dstdomain "/etc/squid/blocked_sites" http_access deny blocked_sites
再起動または再構成する前に、必ず構文チェックを実行してください。
$ sudo squid -k parse
問題がなければ、サービスを停止せずに構成を再ロードします。
$ sudo squid -k reconfigure
ファイアウォールがプロキシポート(この場合は4555)を許可していることを確認してください。firewalldの場合、以下のようになります。
# firewall-cmd --zone=public --add-port=4555/tcp --permanent # firewall-cmd --reload
サーバーが AWS などのクラウド プロバイダーの背後にある場合は、セキュリティ グループ ルールで同じポートを開くことを忘れないでください。
テストとデバッグ
Squid が正しくリッスンしているかどうかを確認します。
$ netstat -tulnp
IP とポートを置き換えてプロキシを指定して curl でテストします。
$ curl -x http://:4555 -L http://google.com
認証を求められたのに提供しなかった場合、または「接続拒否」と表示された場合は、ファイアウォール、ACL、またはSquidが正常に動作しているかどうかを再確認してください。ログをリアルタイムで表示するには、以下を実行してください。
$ sudo tail -f /var/log/squid/access.log
TCP_DENIED/403または接続エラーの行が表示される場合は、ACL の設定ミスまたはファイアウォールの問題である可能性があります。
設定が完了したら、ブラウザまたはシステムでLinuxマシンのIPアドレスと選択したポート番号を指定するように設定してください。これは通常、ネットワークまたはプロキシ設定で行います。管理対象環境にデプロイする場合は、必要に応じてこれらのプロキシ設定をプッシュすることを忘れないでください。
まとめ
このプロセス全体は、特に権限やファイアウォールルールで予期せぬエラーが発生すると、まるで猫の群れを追っているような気分になることがあります。しかし、Squidを起動して設定すれば、驚くほどレスポンスが良くなり、キャッシュ機能を使って速度向上を図ったり、不要なサイトをフィルタリングしたりすることも可能です。理由は定かではありませんが、サーバー全体を再起動すると、状況が改善したり、奇妙な不具合が修正されることがあります。ログには常に注意し、キャッシュがうまく機能していない場合は、ACLやキャッシュサイズを微調整することをためらわないでください。
まとめ
- パッケージマネージャーでsquidをインストールする
- Squidの設定をバックアップして編集する
- 許可されたIP範囲、ポート、キャッシュサイズを設定する
- オプションでユーザー認証を有効にする
- 必要に応じてサイトブロックを設定する
- ファイアウォールルールでプロキシポートを許可する
- curlとlogsで徹底的にテストする
これが役に立つことを祈る
Squid は少し扱いにくいところもありますが、一度うまく動作すれば、頼りになるプロキシソリューションです。ただし、特に権限とファイアウォールに関しては、試行錯誤が必要になることを覚悟してください。幸運を祈ります。この設定で、スムーズに動作するプロキシに近づくことができれば幸いです。もし、これで設定やセキュリティアップデートが1つでも機能すれば、それは成功です。