Proxyサーバの環境構築手順
1 はじめに
Proxyサーバとは、内部ネットワークからインターネットへの接続を中継するサーバです。
Proxyサーバの役割としては、たとえば、以下のようなものがあります。
・キャッシュによるトラフィック減少とパフォーマンス向上
・アクセス制御(例:マルウェアがアクセスするC&Cサーバへのアクセス禁止)
ここでは、SquidというProxyサーバを構築してみます。
また、パスワード認証を設定して、その動作確認をしてみます。
2 環境
VMware Workstation 15 Player上の仮想マシン(2台)を使いました。
以下の図は、クライアントのcurlコマンドからSquidを経由して、
インターネット上のサーバにアクセスしていることを表しています。
なお、図中の()
内の数値は、ポート番号を表しています。
client server
+-----------+ +-----------+
| | | |
| CentOS7.6 | | CentOS7.6 |
| | | |
| | | |
| curl | | Squid |
| * | | (3128) |
| | | | A * |
| | | | | | |
| | | | | | |
+-- eth0 ---+ +-- eth0 ---+
.20 | | | .10 |
| | | | |
| +---------------------+ | +-------------------------->
| |
------------------------------------------------ router ------- Internet
192.168.3.0/24 .1
仮想マシンの版数は、サーバ/クライアントともに以下のとりです。
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@server ~]# uname -r
3.10.0-957.el7.x86_64
3 事前準備
3.1 インストール方法
サーバ側でsquidパッケージをインストールします。
[root@server ~]# yum -y install squid
squidの版数を確認します。
[root@server ~]# squid -v
Squid Cache: Version 3.5.20
3.2 Squidのポート番号開放
Squidは3128番ポートでListenするので、3128番ポートへのアクセスを開放します。
なお、firewall-cmdコマンドの使い方は、ここ(firewall-cmdコマンドの使い方)を参照してください。
[root@server ~]# firewall-cmd --add-port=3128/tcp
success
ポート番号を確認します。
3128番ポートへのアクセスが開放されていることがわかります。
[root@server ~]# firewall-cmd --list-ports
3128/tcp
4 サーバ側設定
user1
のパスワード認証を設定します。パスワードとしてtest
と入力します。
設定したパスワードとユーザ名は、/etc/squid/squid.pass
に保存されます。
[root@server ~]# htpasswd -c /etc/squid/.htpasswd user1
New password: <= testと入力する。
Re-type new password: <= testと入力する。
Adding password for user user1
サーバの設定ファイルは、/etc/squid/squid.conf
です。
squid.conf
へのディレクティブ設定は、下記ページを参考にしました。
http://www.squid-cache.org/Versions/v3/3.5/cfgman/auth_param.html
ユーザ認証をするためsquid.conf
に以下のディレクティブ(★)を追加しました。
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
-snip-
acl CONNECT method CONNECT
★auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/.htpasswd
★auth_param basic children 5 startup=5 idle=1
★auth_param basic realm Squid proxy-caching web server
★auth_param basic credentialsttl 2 hours
★acl staff proxy_auth REQUIRED
-snip-
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
★http_access allow staff
なお、Squidのアクセス制御の設定は、次の2段階で行います。
(1)aclディレクティブで制御対象を定義する。
(2)http_accessディレクティブでアクセス対象への許可あるいは拒否を設定する。
acl acl名 aclタイプ 引数
http_access allow|deny acl名
5 Squidの起動
サーバ側でSquidを起動します。
[root@server ~]# systemctl start squid
SquidがListenするポート番号を確認します。
Squidは、3128番ポートでListenしていることがわかります。
なお、lsofコマンドの使い方は、ここ(lsofコマンドの使い方)を参照してください。
[root@server ~]# lsof -c squid -a -i -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
squid 19505 squid 6u IPv6 70929 0t0 UDP *:57651
squid 19505 squid 8u IPv4 70930 0t0 UDP *:47984
squid 19505 squid 11u IPv6 70933 0t0 TCP *:3128 (LISTEN)
6 クライアント側設定
6.1 ユーザ登録
user1
とuser2
を登録します。
[root@client ~]# useradd user1
[root@client ~]# useradd user2
6.2 user1の環境変数設定
user1
の環境で、.bashrc
ファイル末尾に、下記環境変数を追加しました。
[user1@client ~]$ vi .bashrc
# User specific aliases and functions
export http_proxy=http://user1:[email protected]:3128
export https_proxy=http://user1:[email protected]:3128
設定した環境変数をシステムに反映します。
[user1@client ~]$ source .bashrc
環境変数を確認します。
[user1@client ~]$ echo $http_proxy
http://user1:[email protected]:3128
[user1@client ~]$ echo $https_proxy
http://user1:[email protected]:3128
6.3 user2の環境変数設定
user2
はパスワード認証の設定はしないので、環境変数は以下のようになります。
# User specific aliases and functions
export http_proxy=http://192.168.3.10:3128
export https_proxy=http://192.168.3.10:3128
設定した環境変数をシステムに反映します。
[user2@client ~]$ source .bashrc
環境変数を確認します。
[user2@client ~]$ echo $http_proxy
http://192.168.3.10:3128
[user2@client ~]$ echo $https_proxy
http://192.168.3.10:3128
7 動作確認
下記2つのユーザを使って、Squid経由で首相官邸のWebサーバにアクセスしてみます。
・user1:ID/PASS登録済
・user2:ID/PASS未登録
なお、curlコマンドの使い方は、ここ(curlコマンドの使い方)を参照してください。
7.1 user1の動作確認
首相官邸のWebサーバにアクセスすると、正常にアクセスできていることがわかります。
[user1@client ~]$ curl -I https://www.kantei.go.jp/
HTTP/1.1 200 Connection established
HTTP/1.1 200 OK
Date: Sat, 04 Apr 2020 07:08:10 GMT
X-Frame-Options: SAMEORIGIN
Last-Modified: Fri, 03 Apr 2020 11:07:52 GMT
ETag: "491a-5a260edba3417"
Accept-Ranges: bytes
Content-Length: 18714
Cache-Control: no-cache
Expires: Sat, 04 Apr 2020 07:08:10 GMT
Pragma: no-cache
Content-Type: text/html
次に、サーバ側でログを確認します。
user1
がcurlを実行した場合、TCP_TUNNEL
と表示され、首相官邸のWebサーバへの
アクセスが許可されていることがわかります。
[root@server ~]# tail -f /var/log/squid/access.log
1585984127.089 266 192.168.3.20 TCP_TUNNEL/200 3875 CONNECT www.kantei.go.jp:443 user1 HIER_DIRECT/202.214.194.138 -
なお、TCP_TUNNEL
とは、HTTPS通信をSquidで復号することなく、そのまま首相官邸の
Webサーバにトンネルすることを意味します。つまり、下記パターン1の動作を意味しています。
HTTPS通信を復号しないため、ウィルスチェックは行えません。
<--------------- HTTPS --------------->
client ------------ Proxy(Squid) ------------- Web server
↑HTTPSをそのままトンネル
ウィルスチェックを行うためには、パターン2のようにProxyサーバでHTTPSを
復号/暗号化する必要があります。その際、Proxyサーバにサーバ証明書を
インストールする必要があります。
<-- HTTPS --> <-- HTTPS -->
client ------------ Proxy(Squid) ------------- Web server
↑HTTPSの復号/暗号化
7.2 user2の動作確認
首相官邸のWebサーバにアクセスすると、
Squidが、HTTP/1.1 407 Proxy Authentication Required
と
認証情報の入力を求めていることがわかります(期待値)。
[user2@client ~]$ curl -I https://www.kantei.go.jp/
HTTP/1.1 407 Proxy Authentication Required
Server: squid/3.5.20
Mime-Version: 1.0
Date: Sat, 04 Apr 2020 07:12:07 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 3537
X-Squid-Error: ERR_CACHE_ACCESS_DENIED 0
Vary: Accept-Language
Content-Language: en
Proxy-Authenticate: Basic realm="Squid proxy-caching web server"
X-Cache: MISS from server
X-Cache-Lookup: NONE from server:3128
Via: 1.1 server (squid/3.5.20)
Connection: keep-alive
curl: (56) Received HTTP code 407 from proxy after CONNECT
次に、サーバ側でログを確認します。
user2
がcurlを実行した場合、TCP_DENIED
と表示され、首相官邸のWebサーバへの
アクセスが拒否されていることがわかります。
[root@server ~]# tail -f /var/log/squid/access.log
1585984327.265 33 192.168.3.20 TCP_DENIED/407 3997 CONNECT www.kantei.go.jp:443 - HIER_NONE/- text/html
Z 参考情報
Linux教科書 LPICレベル2 スピードマスター問題集 Version4.5対応
squid-cache.org
WELCOME TO SQUID 3.4.0.3-20131206-r13044
Linux Proxy設定
Apache&Squidアクセス制御/ユーザー認証の設定 (2/4)
How to Create an HTTP Proxy Using Squid on CentOS 7/8
Author And Source
この問題について(Proxyサーバの環境構築手順), 我々は、より多くの情報をここで見つけました https://qiita.com/hana_shin/items/0f574358d040b4c60889著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .