#概要
今までの復習を兼ねて、Linux7系でいろいろサーバを構築してみようの第一弾。
商用環境で構築運用したことはなく、(多分)10年くらい前に社内の検証環境でちょろっと構築したくらい。
squidバージョン:3.5.20
squid設定ファイル:/etc/squid/squid.conf
アクセスログファイル:/var/log/squid/access.log
OSバージョン:RHEL7.3
#やってみよう
自PCからAWS上に構築するProxy経由でブラウジングするのがゴール。
###事前準備
-
EC2インスタンスの作成
RHEL7.3でインスタンスを作成しておきます。
設定はデフォルトでOKですが、気になるようであればロケールの変更をしてください。
※アクセスログの時間 -
セキュリティグループでのインバウンド許可
プロキシサーバで待ち受けるポートをインバウンドで許可しておいてください。
squidのデフォルトは3128ですが、8080や8008でもOKです。
###squidのインストール
デフォルトではsquidはインストールされていませんので、yumでインストールします。
[ec2-user@ip-172-XX-XX-XX ~]$ sudo yum install squid
Loaded plugins: amazon-id, rhui-lb, search-disabled-repos
Resolving Dependencies
--> Running transaction check
---> Package squid.x86_64 7:3.5.20-2.el7_3.3 will be installed
--> Processing Dependency: /usr/bin/perl for package: 7:squid-3.5.20-2.el7_3.3.x86_64
--> Processing Dependency: perl(DBI) for package: 7:squid-3.5.20-2.el7_3.3.x86_64
--> Processing Dependency: perl(Data::Dumper) for package: 7:squid-3.5.20-2.el7_3.3.x86_64
--> Processing Dependency: perl(Digest::MD5) for package: 7:squid-3.5.20-2.el7_3.3.x86_64
--> Processing Dependency: perl(English) for package: 7:squid-3.5.20-2.el7_3.3.x86_64
--> Processing Dependency: perl(FileHandle) for package: 7:squid-3.5.20-2.el7_3.3.x86_64
--> Processing Dependency: perl(Getopt::Long) for package: 7:squid-3.5.20-2.el7_3.3.x86_64
(略)
perl-macros.x86_64 4:5.16.3-291.el7
perl-parent.noarch 1:0.225-244.el7
perl-podlators.noarch 0:2.5.1-3.el7
perl-threads.x86_64 0:1.87-4.el7
perl-threads-shared.x86_64 0:1.43-6.el7
squid-migration-script.x86_64 7:3.5.20-2.el7_3.3
Complete!
[ec2-user@ip-172-XX-XX-XX ~]$
インストールが完了しました!
###設定
今回は単純にクライアントの自PCから構築するProxyサーバ経由でWebブラウジングできればいいので
設定の流れは以下の通りです。
- プロキシサーバへ接続できるクライアントの設定
- 該当のグループを明示的に許可、最後に拒否設定
- ポートの設定
- squidの再起動
####プロキシサーバへ接続できるクライアントの設定
/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 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
今回は関係ないので上の記載はすべてコメントアウトし、自分のIPを調べて記載します。
***#***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 localnet src 115.XXX.XX.XX/32 #me
####該当のグループを明示的に許可、最後に拒否設定
デフォルトでlocalnet, localhostは許可されていて、最後にdeny allがあるので確認だけ。
# 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
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
####ポートの設定
squidではデフォルトで3128を待ち受けています。
# Squid normally listens to port 3128
http_port 3128
変更したい場合はここのポート番号を修正します。
####squidの起動
設定が完了したらファイルを保存してsquidを起動しましょう。
[ec2-user@ip-172-XX-XX-XX ~]$ **sudo systemctl start **
ステータスの確認をします。
[ec2-user@ip-172-XX-XX-XX ~]$ sudo systemctl status
\● squid.service - Squid caching proxy
Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2017-05-04 23:31:27 EDT; 5s ago
Process: 16605 ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS)
Process: 16600 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS)
Main PID: 16609 (squid)
CGroup: /system.slice/squid.service
tq16609 /usr/sbin/squid -f /etc/squid/squid.conf
tq16611 (squid-1) -f /etc/squid/squid.conf
mq16612 (logfile-daemon) /var/log/squid/access.log
May 04 23:31:27 ip-172-XX-XX-XX.us-west-2.compute.internal systemd[1]: Starti...
May 04 23:31:27 ip-172-XX-XX-XX.us-west-2.compute.internal systemd[1]: Starte...
May 04 23:31:27 ip-172-XX-XX-XX.us-west-2.compute.internal squid[16609]: Squi...
May 04 23:31:27 ip-172-XX-XX-XX.us-west-2.compute.internal squid[16609]: Squi...
Hint: Some lines were ellipsized, use -l to show in full.
[ec2-user@ip-172-XX-XX-XX ~]$
ついでに自動起動の設定も入れておきます。
[ec2-user@ip-172-XX-XX-XX ~]$systemctl enabled squid
[ec2-user@ip-172-XX-XX-XX ~]$systemctl is-enabled squid
enabled
###動作確認
設定も終わりましたので、動作確認です。
IEのプロキシにこのEC2インスタンスのIPと接続ポートを入れます。
どこか適当なサイトにアクセスして、ログを確認します。
[root@ip-172-XX-XX-XX squid]# tail -100 /var/log/squid/access.log
1493956288.080 18 115.XX.XX.XX TCP_MISS/304 346 GET http://www.googletagservices.com/tag/js/gpt.js - HIER_DIRECT/216.58.193.66 -
1493956288.094 21 115.XX.XX.XX TCP_MISS/304 601 GET http://livedoor.4.blogimg.jp/karapaia_zaeega/imgs/e/b/eb45e2ee.png - HIER_DIRECT/54.230.141.124 -
1493956288.133 139 115.XX.XX.XX TCP_MISS/302 666 GET http://livedoor.blogimg.jp/karapaia_zaeega/imgs/0/0/004be9b5.jpg - HIER_DIRECT/125.6.190.4 text/html
1493956288.155 147 115.XX.XX.XX TCP_MISS/302 666 GET http://livedoor.blogimg.jp/karapaia_zaeega/imgs/5/4/54c99608.jpg - HIER_DIRECT/125.6.190.4 text/html
1493956288.167 143 115.XX.XX.XX TCP_MISS/302 666 GET http://livedoor.blogimg.jp/karapaia_zaeega/imgs/a/e/ae04335c.jpg - HIER_DIRECT/125.6.190.4 text/html
1493956288.170 27 115.XX.XX.XX TCP_MISS/304 601 GET http://livedoor.4.blogimg.jp/karapaia_zaeega/imgs/b/f/bfce72b1.png - HIER_DIRECT/54.230.141.124 -
Proxyサーバ経由でWebブラウジングができることを確認しました!
####ログフォーマットを編集
ちなみに上のログだとアクセス時刻がさっぱりわかりません…。
以前はApache形式に変換する、みたいなオプションがあったようですが
3.5でその設定は効かないようです。
そんなわけで本家サイトのLogformatページを見て以下のように設定することにしました。
- LocalTime
- Client IP
- Squid Request Status/HTTP Status Code
- Size
- Request Method
- Request URL
- user name
- Squid Hierarchy Status Code/Destination IP
- MIME Content Type
/etc/squid/squid.confには以下のように追記。
logformat squid %tl %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt
squidを再起動してどこかのサイトにアクセスすると、
ログが見やすいようになりました!
[root@ip-172-XX-XX-XX squid]# tail -100 /var/log/squid/access.log
05/May/2017:00:12:58 -0400 115.XXX.XX.XX TCP_MISS/200 137705 GET http://livedoor.4.blogimg.jp/karapaia_zaeega/imgs/3/0/30497336.jpg - HIER_DIRECT/54.192.117.245 image/jpeg
05/May/2017:00:12:58 -0400 115.XXX.XX.XX TCP_MISS/200 512 GET http://jsoon.digitiminimi.com/twitter/count.json? - HIER_DIRECT/210.135.97.193 text/javascript
05/May/2017:00:12:58 -0400 115.XXX.XX.XX TCP_TUNNEL/200 4856 CONNECT platform.twitter.com:443 - HIER_DIRECT/199.96.57.6 -
05/May/2017:00:12:58 -0400 115.XXX.XX.XX TCP_MISS/200 1827 GET http://optimized-by.rubiconproject.com/a/13136/73628/349040-9.js? - HIER_DIRECT/8.39.37.31 text/javascript
05/May/2017:00:12:58 -0400 115.XXX.XX.XX TCP_MISS/200 468 GET http://jsoon.digitiminimi.com/twitter/count.json? - HIER_DIRECT/210.135.97.193 text/javascript
#終わりに
ログのフォーマットに手間取らなければ、ここまで10分で十分です。
あとはディスクキャッシュ量がデフォルトで100MBなので、この辺りを変更してパフォーマンスを向上させるとか、ホスト名とかユーザエージェントなどの情報を隠すとか、いろいろできそうです。
初投稿。MardDownに慣れないとな~…(:3_)