1
1

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 3 years have passed since last update.

OSSのSquidを使ってProxyサーバを立ててみる

Posted at

はじめに

以下の記事をほぼほぼ参考にして試してみた備忘録記事です。
https://qiita.com/hana_shin/items/0f574358d040b4c60889

dockerによりcentos7を準備する。

まずはcentos7をpullする。

$ docker pull centos:centos7

client側とserver側のコンテナに分けて起動しておく。
※ server側コンテナに関しては、後ほどsystemctlを使うために、systemdへのリンクになっているはずの/sbin/initをコンテナ起動時に実行させておいて、privileged権限を付与しておく。

$ docker run -it -d --privileged --name server_centos centos:centos7 /sbin/init
$ docker run -it -d --name client_centos centos:centos7

サーバー側コンテナの設定

squidのインストール

$ docker exec -it server_centos /bin/bash

# yum -y install squid

# squid -v
  Squid Cache: Version 3.5.20

firewalldの設定

Squidのポート番号開放するためにfirewalldのポート3128番を開く。

そもそもfirewalldが入ってないので、まずはインストール。

# yum -y install firewalld

続いて起動する。

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

# systemctl start firewalld

# systemctl status firewalld
    ● firewalld.service - firewalld - dynamic firewall daemon
    Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
    Active: active (running) since Wed 2021-05-05 04:36:52 UTC; 18s ago
        Docs: man:firewalld(1)
    Main PID: 208 (firewalld)
    CGroup: /docker/67c6d66ed30882f8008ebddab69a4b71331c21f04cb2a1888d1d5e190cf4feae/system.slice/firewalld.service
            └─208 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
            ‣ 208 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

    May 05 04:36:51 67c6d66ed308 systemd[1]: Starting firewalld - dynamic firewall daemon...
    May 05 04:36:52 67c6d66ed308 systemd[1]: Started firewalld - dynamic firewall daemon.
    May 05 04:36:53 67c6d66ed308 firewalld[208]: WARNING: AllowZoneDrifting is enabled. This i...w.
    May 05 04:36:53 67c6d66ed308 firewalld[208]: WARNING: Failed to load nf_conntrack module: ...k'
                                                modprobe: ERROR: could not insert 'nf_conntra...ed
                                                modprobe: ERROR: Error running install command ...
    Hint: Some lines were ellipsized, use -l to show in full.

firewalldの自動起動を有効化

# systemctl enable firewalld

続いてその確認。

# systemctl is-enabled firewalld
    enabled

firewalldに、squidのポート番号である3128番だけ開ける

# firewall-cmd --add-port=3128/tcp
    success
# firewall-cmd --list-ports
    3128/tcp

BASIC認証の設定

一応、proxyサーバー上で(squidの設定により)、BASIC認証もできるみたいなので真似てみた。

# yum -y install httpd-tools

# ls -a /etc/squid/
    .   cachemgr.conf          errorpage.css          mime.conf          squid.conf
    ..  cachemgr.conf.default  errorpage.css.default  mime.conf.default  squid.conf.default

# htpasswd -c /etc/squid/.htpasswd user1
    New password:(ここでは「test」と記述した。)
    Re-type new password:(ここでは「test」と記述した。)
    Adding password for user user1

# ls -a /etc/squid/
    .          cachemgr.conf          errorpage.css.default  squid.conf
    ..         cachemgr.conf.default  mime.conf              squid.conf.default
    .htpasswd  errorpage.css          mime.conf.default

# vi /etc/squid/squid.conf
    // 以下を追記。設定の意味は→http://www.squid-cache.org/Versions/v3/3.5/cfgman/auth_param.html
    # Example rule allowing access from your local networks.
    # Adapt to list your (internal) IP networks from where browsing
    # should be allowed
    -snip-
    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の起動

# systemctl start squid

# yum -y install lsof

# lsof -c squid -a -i -P
    COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    squid   300 squid    6u  IPv6 242058      0t0  UDP *:45944
    squid   300 squid    8u  IPv4 242059      0t0  UDP *:51532
    squid   300 squid   21u  IPv6 242072      0t0  TCP *:3128 (LISTEN)
// コマンドの説明は→https://qiita.com/hana_shin/items/cdc58fe8f4f7705c7a8a

クライアント側コンテナの設定

BASIC認証があるのでユーザーを作成する。
まずはユーザー作成まで。

$ docker exec -it client_centos /bin/bash

# useradd user1

# useradd user2

# ls /home
    user1  user2

次にユーザー名とパスワードを環境変数http_proxyに紐づけるように設定する。
これでproxyを経由して外部にアクセスする際に自動で認証してくれる。

# su user1

# ls -a ~
    .  ..  .bash_logout  .bash_profile  .bashrc

# hostname -i(server_centosのコンテナ内で実行して、proxyのipを調べる。)
    172.17.0.3

# vi ~/.bashrc
    # User specific aliases and functions
    export http_proxy=http://user1:test@172.17.0.3:3128
    export https_proxy=http://user1:test@172.17.0.3:3128

# source ~/.bashrc

# echo $http_proxy
    http://user1:test@172.17.0.3:3128

# echo $https_proxy
    http://user1:test@172.17.0.3:3128

# exit

続いて、user2を作成する。こちらはパスワード設定をせずに設定する。

# su user2

# vi ~/.bashrc
    # User specific aliases and functions
    export http_proxy=http://172.17.0.3:3128
    export https_proxy=http://172.17.0.3:3128

# source ~/.bashrc

# echo $http_proxy
    http://172.17.0.3:3128

# echo $https_proxy
    http://172.17.0.3:3128

# exit

動作確認

user1で検証。
※ 以下、どのcurlコマンドを使ってもProxy経由でアクセスできる。

# su user1

# curl -I https://www.kantei.go.jp/
    HTTP/1.1 200 Connection established

    HTTP/1.1 200 OK
    Date: Thu, 06 May 2021 04:05:31 GMT
    X-Frame-Options: SAMEORIGIN
    Last-Modified: Wed, 05 May 2021 11:55:08 GMT
    ETag: "3f32-5c193ddca75e6"
    Accept-Ranges: bytes
    Content-Length: 16178
    Cache-Control: no-cache
    Expires: Thu, 06 May 2021 04:05:31 GMT
    Pragma: no-cache
    Content-Type: text/html

# curl -x http://user1:test@172.17.0.3:3128 https://www.kantei.go.jp/

# curl -U user1:test -x http://172.17.0.3:3128 -L https://www.google.com/

server_centos側でログ確認してみる。

# hostname -i
    172.17.0.2

# cat /var/log/squid/access.log
1620273931.858   1770 172.17.0.2 TCP_TUNNEL/200 3914 CONNECT www.kantei.go.jp:443 user1 HIER_DIRECT/202.214.194.138 -

# exit

次にuser2で検証。

# su user2
# curl -I https://www.kantei.go.jp/
    HTTP/1.1 407 Proxy Authentication Required
    Server: squid/3.5.20
    Mime-Version: 1.0
    Date: Thu, 06 May 2021 04:10:40 GMT
    Content-Type: text/html;charset=utf-8
    Content-Length: 3547
    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 67c6d66ed308
    X-Cache-Lookup: NONE from 67c6d66ed308:3128
    Via: 1.1 67c6d66ed308 (squid/3.5.20)
    Connection: keep-alive

    curl: (56) Received HTTP code 407 from proxy after CONNECT

server_centos側でログ確認してみる。

# tail -f /var/log/squid/access.log 
    1620274240.510     62 172.17.0.2 TCP_DENIED/407 4025 CONNECT www.kantei.go.jp:443 - HIER_NONE/- text/html
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?