Linux+Squidで、プロキシ(Proxy)サーバーを簡単に構築する方法とポイントを大公開
今回は、以前必要があってプロキシ(Proxy)サーバーの構築した際に纏めておいた、Linux(CentOS)+Squidで、プロキシ(Proxy)サーバーの手順をご紹介します。
構築自体はとても簡単で、手順に沿って進めればどなたでも構築が可能です。
プロキシ(Proxy)サーバーってなに?
プロキシ(Proxy)とは英語で『代理』の意味です。
この言葉をインターネット関連で用いる場合には、主に内部ネットワークからインターネット接続を行う際に高速なアクセスや、安全な通信などを確保するための中継サーバー「プロキシサーバー」を指します。
あまり自宅で利用することはないのですが、企業のネットワークではプロキシサーバーを利用していることが多く、ITエンジニアとしては身に付けておくべきスキルの一つです。
特に最近は、急なリモートワークの必要性から発生してしまう情報漏洩や脆弱性をついた高度なハッキングなどにより、セキュリティの事故が増えてきています。
プロキシ(Proxy)サーバーは前述の通り、『安全な通信の確保』にも活用されますので、このスキルがあると、エンジニアとしてもう一段の価値が上がります。
環境情報
構築する環境イメージは次の通りです。
- CentOS 7.7 (Squid)
※OSはRocky Linux9も同様に利用可能です - Windows (アクセス用の端末)
CentOSのインストール
今回はCentOS7で構築していますが、CentOS6、CentOS8やRocky9でも大差はないです。
なお事前準備として、インストール完了後に以下を実施しています。
・selinuxのdisable”検証環境のため”
・firewalldのOFF “検証環境のため”
今回はあくまで検証用ですので、selinuxとfirewalldの使用を考慮していませんが、本番環境でDMZに設置する場合にはこの辺りはしっかり設定しておいたほうが良いでしょう。
CentOSのバージョン確認# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
# sestatus
SELinux status: disabled
# 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 allowedacl 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/24acl 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エンジニアは、会社じゃなく自宅での学習も年収に跳ね返るので、本業としてはとてもおすすめな職業ですよ。