8
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

squid3.5でProxyサーバ構築(RHEL7.3)

Last updated at Posted at 2017-05-05

#概要
今までの復習を兼ねて、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ブラウジングできればいいので
設定の流れは以下の通りです。

  1. プロキシサーバへ接続できるクライアントの設定
  2. 該当のグループを明示的に許可、最後に拒否設定
  3. ポートの設定
  4. 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_)

8
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?