1
1

More than 3 years have passed since last update.

イントラネットと出張/在宅とで設定変更が面倒なのでローカルにApache2でフォワードプロキシを立ててみたらちょっと幸せになった

Last updated at Posted at 2020-11-09

会社のファイヤーウォール内と出張や在宅時のインターネットへの直接接続とでプロキシ設定が異なるので、Apache2でフォワードプロキシをローカルに立てて、フォワードプロキシの設定で一発変更する。
各プログラムのプロキシ設定は、全てローカルのプロキシを設定する。
使用している環境はUbuntu 20.10。

Apache2の設定

Apache2はインストール・稼働できているものとする。

モジュールを有効化

プロキシ用のモジュールを有効にする。

sudo a2enmod proxy proxy_http proxy_ftp proxy_ssl proxy_connect

自前のコンフィグを用意

/etc/apache2/mods-available/proxy.confをベースに、/etc/apache2/sites-available/に用意した。

ポート番号、イントラネットのプロキシのアドレス (ProxyRemoteの設定)、ダイレクトにアクセスするアドレス (NoProxyの設定) はそれぞれの環境に合わせてカスタマイズする。
今回はポート番号を8888としてみた。

/etc/apache2/sites-available/proxy.conf
<IfModule mod_proxy.c>
# 適当な空いているポート番号
Listen 8888

# Listenの設定とポート番号を合わせる
<VirtualHost *:8888>
    # If you want to use apache2 as a forward proxy, uncomment the
    # 'ProxyRequests On' line and the <Proxy *> block below.
    # WARNING: Be careful to restrict access inside the <Proxy *> block.
    # Open proxy servers are dangerous both to your network and to the
    # Internet at large.
    #
    # If you only want to use apache2 as a reverse proxy/gateway in
    # front of some web application server, you DON'T need
    # 'ProxyRequests On'.

    ProxyRequests On
    SSLProxyEngine On
    #AllowCONNECT 443
    #CustomLog ${APACHE_LOG_DIR}/proxy.log combined

    <Proxy *>
       AddDefaultCharset off
       Require all denied
       Require local
    </Proxy>

    # Enable/disable the handling of HTTP/1.1 "Via:" headers.
    # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
    # Set to one of: Off | On | Full | Block
    #ProxyVia Off

    # Comment out ProxyRemote if conecting to the Internet directly.
    #ProxyRemote * http://proxy.mycompany.com:8888
    #NoProxy 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 .mygroup.mycompany.com
</VirtualHost>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

簡単に切り替えられるようにProxyRemote設定だけintranet.confとして独立。
リクエストを丸投げする社内からのプロキシをProxyRemoteに設定する。

/etc/apache2/sites-available/intranet.conf
<IfModule mod_proxy.c>

    # Comment out ProxyRemote if conecting to the Internet directly.
    ProxyRemote * http://proxy.mycompany.com:8888
    NoProxy 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 .mygroup.mycompany.com

</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Apacheの再起動

sudo a2ensite proxy intranet
sudo systemctrl restart apache2

各設定の見直し

ブラウザ

GNOMEの「設定」→「ネットワーク」→「ネットワークプロキシ」からプロキシを「手動」にしてHTTP/HTTPS/FTPそれぞれにlocalhost8888を指定する。

環境変数

システムワイドの環境変数の設定。

/etc/profile.d/proxy.sh
#!/bin/bash

export HTTP_PROXY="http://localhost:8888"
export HTTPS_PROXY="http://localhost:8888"
export FTP_PROXY="http://localhost:8888"

apt

aptの設定。90は適当に決めた。

/etc/apt/apt.conf.d/90proxy
// Configuration for Proxy
Acquire {
    ftp::proxy "http://localhost:8888/";
    http::proxy "http://localhost:8888/";
    https::proxy "http://localhost:8888/";
}

snapd

snapdの設定。

sudo systemctl edit snapd

エディタが開くので以下の内容で保存する。

[Service]
Environment=http_proxy=http://localhost:8888
Environment=https_proxy=http://localhost:8888

snapdデーモンの再起動。

sudo systemctl restart snapd

SSH (GitHub) の設定

MyUserNameは適切に設定する。

~/.ssh/config
#
# Configuration for SSH
# ~/.ssh/config
#
Host github.com
     User MyUserName
     HostName ssh.github.com
     Port 443
     ProxyCommand nc -X connect -x localhost:8888 %h %p

その他

設定の必要があればどれもこれもhttp://localhost:8888とする。
伝統 (Legacy) なのだろうが、プログラム毎にプロキシの設定があるのは面倒くさい。

イントラネットとダイレクトのプロキシ切り替え

簡単なスクリプトを組んでも良いのだろうけど、それほど頻繁には切り替えないし、たいした労力でないのでコマンドを2個叩くことにした。

イントラネットで使用

sudo a2ensite intranet
sudo systemctl reload apache2

ダイレクト接続で使用

sudo a2dissite intranet
sudo systemctrl reload apache2

2020年11月10日追記

簡単なスクリプトを作ってみた。

~/bin/proxy.sh
#!/bin/bash

# Enable/Disable ProxyPass

if [ $# -eq 0 ]; then
    a2query -s intranet
    exit
fi

case "${1}" in
    on)
        echo "intranet"
        a2ensite intranet > /dev/null
        ;;

    off)
        echo "the Internet"
        a2dissite intranet > /dev/null
        ;;

    *)
        echo "$0 [on|off]"
        exit
esac

systemctl reload apache2

使い方

Proxy有効

sudo ~/bin/proxy.sh on

Proxy無効

sudo ~/bin/proxy.sh off

確認 (確認だけならsudoは不要)

~/bin/proxy.sh

2020年12月1日追記

Node.js (npm) の設定。
HTTPSではなくHTTPを使うのがミソらしい。

sudo npm -g config set proxy http://localhost:8888
sudo npm -g config set https-proxy http://localhost:8888
sudo npm -g config set registry http://registry.npmjs.org/
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