こんにちは! 技術2課、濱岡です。
最近、半熟カレーせんというお菓子にはまってます。
ただでさえ外でないのでちょっと体重が気になるところではありますが、食べてしまします笑
さて、今回はEC2インスタンス上にSquidをインストールして設定をしてみました。
インストールするだけなら簡単なので設定の中身について詳しく書いていこうと思います。
まずはEC2インスタンスを用意
OSはAmazonLinux2でスペックはお好みのものを用意してください笑
EC2はインターネットへ出られるサブネットに立ててくださいね。
セキュリティグループは
- SSHで接続できるよう許可
- Squidを利用する接続元の端末からSquidのポートを許可
は設定しておいてくださいね。
インストールしてみる
EC2インスタンスにSSHでログインしてください。 まずはSquidをインストールします。
# yum -y install squid
Completed!ってでてくればOKです。
今回インストールしたバージョンは以下です。
# squid -v Squid Cache: Version 3.5.20 ・・・
自動起動するように設定します
# systemctl enable squid
自動起動設定できているかどうか確認します。
# systemctl status squid ● squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled) Active: active (running) since 土 2021-05-15 17:16:28 JST; 10min ago Process: 2256 ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS) Process: 2250 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS) Main PID: 2275 (squid) CGroup: /system.slice/squid.service ├─2275 /usr/sbin/squid -f /etc/squid/squid.conf ├─2278 (squid-1) -f /etc/squid/squid.conf └─2290 (logfile-daemon) /var/log/squid/access.log ・・・
これで起動はOKです
設定ファイルを変更してみる
以下のコマンドで設定ファイルの編集を行います。
vim /etc/squid/squid.conf
全体の設定ファイルを置いておきます。 今回は443番と80番ポートしか利用しない想定で設定ファイルを書いています。(使わない部分についてはコメントアウトしています。) 送信元のIPも制限することもできるのですが、Squidの設定ファイルでは絞らずセキュリィグループで絞ることを想定してます。 そうした方が、送信元のIPを変更したい!という時にサーバーに入らなくてもコンソール画面から変更が可能なので運用が楽になります。
# # 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 whitelist dstdomain "/etc/squid/whitelist" acl cacheallowlist url_regex "/etc/squid/cacheallowlist" acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network 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 # # 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 allow localnet whitelist http_access allow localhost whitelist # And finally deny all other access to this proxy http_access deny all # Squid normally listens to port 3128 http_port 8080 # 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 cache allow cacheallowlist httpd_suppress_version_string on visible_hostname unknown forwarded_for off logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt %tl
パッとみてもわからないと思うので用途別で解説していきます。
ホワイトリストを使ってアクセスを制限したい
設定部分だけ抜粋したのが以下です。
・・・ acl whitelist dstdomain "/etc/squid/whitelist" ・・・ # 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 allow localnet whitelist http_access allow localhost whitelist # And finally deny all other access to this proxy http_access deny all ・・・
acl whitelist
で参照するホワイトリストのファイルを設定しています。
今回、ホワイトリストはドメインでの制御を想定してます。
dstdomain
を指定するとドメインでの指定が可能となります。
今回だと/etc/squid/whitelistでファイルを作成してそのファイルにアクセスを許可したいドメインを記載してください。
http_access allow
の部分でホワイトリストに当てはまれば通信を許可という設定を書いています
http_access deny all
で上の部分で許可された通信以外は拒否すると設定を書いています。
特定のURLのみキャッシュしたい
設定部分を抜粋してます。
・・・ acl cacheallowlist url_regex "/etc/squid/cacheallowlist" ・・・ cache allow cacheallowlist ・・・
acl whitelist
で参照するホワイトリストのファイルを設定しています。
今回は正規表現での制御を想定しています。
url_regex
を指定することで正規表現での制御が可能です。
アクセスの制限の設定と同様に/etc/squid/cacheallowlistに正規表現でキャッシュしたいURLを記載します。
Squidのアクセスログのフォーマットをかえたい
ログのフォーマットはデフォルトだと以下になっています。
logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt
ざっと内容を書くとこんな感じですね。
- %ts:エポック秒
- %03tu:エポックミリ秒
- %6tr:応答時間(ミリ秒)
- %>a:クライアントの送信元IPアドレス
- %Ss:Squidのリクエストのステータス
- %03>Hs:クライアントに送信されるHTTPステータスコード
- %<st:HTTPヘッダを含む送信されたリプライサイズ(応答サイズ)
- %rm:リクエストメソッド(GET/POSTなど)
- %ru:クライアントからのリクエストURL
- %[un:MIMEのレスポンスヘッダ
- %Sh:Squidの階層のステータス
- %<a:最後のサーバーまたはピア接続のサーバのIPアドレス
- %mt:MIMEのコンテンツタイプ
今回は%tl:ローカル時間
を追加してみました。
logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt %tl
詳細は以下にありますのでこちらもご確認ください。
そのほかの設定
待ち受けのポートを変更したい
Squidだとデフォルトが3128になっていますが8080に変更してみます。 以下、設定部分を抜粋しました。
・・・ # Squid normally listens to port 3128 http_port 8080 ・・・
http_port
の部分に設定したいポート番号を記載すれば問題ないです。
エラーページにSquidのバージョンを表示させないようにしたい
以下を追記します。
httpd_suppress_version_string on
これでURLに接続できなかったときSquidのエラーページがでるのですがそこにSquidのバージョンが表示されないようになります。
ホスト名を非表示にしたい
以下を追記します。
visible_hostname unknown
内部のIPアドレスを隠したい
以下追記します。
forwarded_for off
これで設定は完了
最後にSquidをリスタートして設定は完了です。
# systemctl restart squid
まとめ
いかがでしたでしょうか? 簡単にですがSquidの設定についてまとめてみました。
みなさまの参考になれば幸いです。