Linux+Squidで、プロキシ(Proxy)サーバーを簡単に構築する方法とポイントを大公開

IT小技

Linux+Squidで、プロキシ(Proxy)サーバーを簡単に構築する方法とポイントを大公開

今回は、以前必要があってプロキシ(Proxy)サーバの構築した際に纏めておいた、Linux(CentOS)+Squidで、プロキシ(Proxy)サーバの手順をご紹介します。

構築自体はとても簡単で、手順に沿って進めればどなたでも構築が可能です。

プロキシ(Proxy)サーバーってなに?

プロキシ(Proxy)とは英語で『代理』の意味です。

この言葉をインターネット関連で用いる場合には、主に内部ネットワークからインターネット接続を行う際に高速なアクセスや、安全な通信などを確保するための中継サーバー「プロキシサーバー」を指します。

あまり自宅で利用することはないのですが、企業のネットワークではプロキシサーバを利用していることが多く、ITエンジニアとしては身に付けておくべきスキルの一つです。

特に最近は、急なリモートワークの必要性から発生してしまう情報漏洩や脆弱性をついた高度なハッキングなどにより、セキュリティの事故が増えてきています。

プロキシ(Proxy)サーバは前述の通り、『安全な通信の確保』にも活用されますので、このスキルがあると、エンジニアとしてもう一段の価値が上がります。

キャッシュだけではない、プロキシサーバの利用法
ファイアウォールと並んで、数多く導入されているプロキシサーバ。よく閲覧されるWebサイトをキャッシュしておくだけ、というイメージが強いが実際にはどのような働きをしているのだろうか? プロキシサーバの構造や仕組みなどを解説する

環境情報

構築する環境イメージは次の通りです。

  1. CentOS 7.7 (Squid)
    ※OSはRocky Linux9も同様に利用可能です
  2. Windows (アクセス用の端末)

CentOSのインストール

今回はCentOS7で構築していますが、CentOS6、CentOS8やRocky9でも大差はないです。

なお事前準備として、インストール完了後に以下を実施しています。

・# yum -y upgrade
・selinuxのdisable”検証環境のため”
・firewalldのOFF “検証環境のため”

今回はあくまで検証用ですので、selinuxとfirewalldの使用を考慮していませんが、本番環境でDMZに設置する場合にはこの辺りはしっかり設定しておいたほうが良いでしょう。

CentOSのバージョン確認

# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)

SELinuxの状態確認

# sestatus
SELinux status: disabled

firewalldの状態確認

# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)

Squidのインストール

では、本題のSquidのインストールをします。

実はインストール自体はとても簡単で、コマンド一発で完了です。

# yum -y install squid

はい、インストール完了です。

次に設定ファイルを編集します。

念のためファイルのバックアップをしてから編集しましょう。

# cp -p /etc/squid/squid.conf /etc/squid/squid.conf.bk

設定項目は、追加した項目は赤字修正した部分は緑としています。

# cat /etc/squid/squid.conf
#
# 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 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 mynetwork src 192.168.1.0/24


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
#http_access allow localhost
http_access allow mynetwork

# 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

no_cache deny all

forwarded_for off
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all

aclの設定については、設定される環境に適宜合わせてください。

修正が終わったらsquidを起動します。また再起動後も自動起動するように設定します。

# service squid start
# 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 月 2020-04-13 01:13:21 JST; 8h left
Main PID: 1148 (squid)
CGroup: /system.slice/squid.service
tq1148 /usr/sbin/squid -f /etc/squid/squid.conf
tq1150 (squid-1) -f /etc/squid/squid.conf
mq1192 (logfile-daemon) /var/log/squid/access.log

これで完成ですが、ともて簡単ですね。

クライアント側の設定

今回、クライアントはWindows10で構築しています。

設定方法は、左下の検索窓に proxy と入力しProxyの設定画面に移動します。

すると、プロキシの設定画面が表示されますので、IPアドレスにsquidのLinuxサーバのIPアドレスと、設定したポート番号を入力し保存します。

Tips

検証時のポイントとして、アプリケーションによっては、DNSやデフォルトゲートウェイが設定されていることで、直接インターネットに接続できることを認識してProxyサーバ経由で通信をしない場合があります。

検証時には、DNSとデフォルトゲートウェイを削除し端末からの全ての通信がProxyサーバー経由の通信となるようにしましょう。

Squidのログの見方(Tips)

squidのログは /var/log/squid/ 以下にあります。

# ls /var/log/squid/
access.log cache.log

# cat /var/log/squid/access.log
1586679812.326 899 192.168.1.38 TCP_TUNNEL/200 3089 CONNECT geo.prod.do.dsp.mp.micro

soft.com:443 - HIER_DIRECT/52.229.168.53 - 1586679812.404 68 192.168.1.38 TCP_TUNNEL/200 7549 CONNECT kv701.prod.do.dsp.mp.mic
rosoft.com:443 - HIER_DIRECT/104.78.83.26 -0.74.108.123 -

ただし、いざログを見ようとすると時間がunixタイムで解析し難いです。

そこで、awkでちょっと見やすいように加工すると、ログが見やすくなります。

awkはテキストを処理するコマンドで、演算機能もありプログラミング言語として使用されることもあります。

覚えておくととても便利です。

# cat access.log |awk 'match($0,/[0-9]+/){print strftime("%c",substr($0,RSTART,RLENGTH)),$0}'

ということで、catでログを読み込んでawkで処理すると、以下のようにとても見やすくなります。

# cat access.log |awk 'match($0,/[0-9]+/){print strftime("%c",substr($0,RSTART,RLENGTH)) ,$0}'
2020年04月12日 17時23分32秒 1586679812.326 899 192.168.1.38 TCP_TUNNEL/200 3089 CONNECT geo.prod.do.dsp.mp.microsoft.com:443 - HIER_DIRECT/52.229.168.53 -
2020年04月12日 17時23分32秒 1586679812.404 68 192.168.1.38 TCP_TUNNEL/200 7549 CONNECT kv701.prod.do.dsp.mp.microsoft.com:443 - HIER_DIRECT/104.78.83.26 - 4.108.123 -

まとめ

今回は、Linux+Squidでプロキシ(Proxy)サーバを簡単に構築する方法を纏めてみました。

これで「ちょっとProxyサーバを作ってよ!」って突然言われても、焦らずに構築できますね。

ITエンジニアには実際には様々な職種に分かれますが、プログラミングが苦手でも仕事は山ほどあります。

今回の記事を見ていただいても分かりますが、プログラミングは不要です。

勿論プログラミングが出来ればよりエンジニアの価値が上がりますので、様々なサーバを構築して経験を積みましょう。

ITエンジニアは、会社じゃなく自宅での学習も年収に跳ね返るので、本業としてはとてもおすすめな職業ですよ。

タイトルとURLをコピーしました