- 記事一覧 >
- ブログ記事
いろいろなproxy - curl,apt,git,npm,pip,Next.jsのfetch,yum,dnf,composer,pkg
はじめに
以下の図のように、インターネットに直接出られない環境があるとき、Proxyサーバーを使います。ProxyサーバーのSquid、各コマンドのProxy設定、オプションをすぐに忘れて、そのたびに個別にググっていますので、ここにまとめて書きたいと思います。
※説明簡略化のため、Squidは 認証無し のとりあえず動けば良いという設定です。これを使う前提になります。組織によっては、セキュリティ上問題あるかもしれませんので、本格運用の際は慎重に設定してください。
【目次】
・Squidインストール
・全体のProxy
・curl
・apt
・git
・npm
・pip
・Next.jsのfetch
・yum
・dnf
・phpのcopy
・composer-setup.php
・composer
・pkg(FreeBSD)
root権限で作業していますので、全てsudoは省略しています。
Squidインストール
【検証環境】
Raspberry Pi OS(Raspberry 4 本体)
/etc/debian_version
:10.9
lsb_release -a
:Raspbian GNU/Linux 10 (buster)
uname -a
:Linux raspberrypi 5.10.17-v7l+ #1414 SMP Fri Apr 30 13:20:47 BST 2021 armv7l GNU/Linux
Squid(スクウィッド)はプロキシ (Proxy) サーバー、ウェブキャッシュサーバーなどに利用されるフリーソフトウェアです。
今回、プロキシサーバーとして、これを利用する前提になります。認証設定は、無しです。http://, https:// 以外は未検証です。
apt update
でパッケージリストを更新します。
# apt update
Do you want to accept these changes and continue updating from this repository? [y/N]y
※以降基本的にyのため、-yを付けます。
-y は、? [y/N]: のようなときに自動的に y とするオプションです。
apt upgrade
でパッケージを更新し、Squidをインストールします。
※apt update
、apt upgrade
は環境によっては必要ありません。
# apt upgrade -y
# apt install squid -y
Squidの設定を作成します。
# mv /etc/squid/squid.conf /etc/squid/squid.conf.org
# vi /etc/squid/squid.conf
# 接続クライアントのネットワークを指定(ご自身の環境に応じて変更が必要です)
acl localnet src 192.168.1.0/24
# SSL(HTTPS)接続時に 443 ポート以外の CONNECT を拒否
acl SSL_ports port 443
acl CONNECT method CONNECT
http_access deny CONNECT !SSL_ports
# 接続先として指定されているポート以外を拒否
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
http_access deny !Safe_ports
# ローカルネットワークからのアクセスを許可
http_access allow localnet
# 自身からのアクセスを許可
http_access allow localhost
# キャッシュしないよう設定
no_cache deny all
# Squid が使用するポート
http_port 3128
# core 出力場所の設定
coredump_dir /var/spool/squid
# QueryStringの記録
strip_query_terms off
# ログの保存先と形式(Apache風)
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh
access_log /var/log/squid/access.log combined
なお、設定は、こちらの参考記事ほぼそのままです。【ラズベリーパイ4】Squidでプロキシサーバを自作する方法 https://algorithm.joho.info/raspberry-pi/squid-raspberry-pi/
Squidを再起動します。
# systemctl restart squid
⇒何も出力されなければ、成功です。
以降、このプロキシサーバーを 192.168.0.158:3128 として進めていきます。
全体のProxy
※FreeBSDの場合は、pkg(FreeBSD)を参照してください。
【検証環境】
Ubuntu 20.04.2
# vi /etc/environment
http_proxy="http://192.168.0.158:3128"
HTTP_PROXY="http://192.168.0.158:3128"
https_proxy="http://192.168.0.158:3128"
HTTPS_PROXY="http://192.168.0.158:3128"
ftp_proxy="ftp://192.168.0.158:3128"
FTP_PROXY="ftp://192.168.0.158:3128"
no_proxy=".example.co.jp,.test.local,server1.example.com,server2.example.com"
※no_proxy=
は、プロキシサーバーを通したくない通信先です。
一度ログアウトしてログインしないと反映されません。もしくは、rootの場合、
exit
→su -
で反映されます。
一時的な場合
export http_proxy="http://192.168.0.158:3128"
export HTTP_PROXY="http://192.168.0.158:3128"
export https_proxy="http://192.168.0.158:3128"
export HTTPS_PROXY="http://192.168.0.158:3128"
export ftp_proxy="ftp://192.168.0.158:3128"
export FTP_PROXY="ftp://192.168.0.158:3128"
export no_proxy=".example.co.jp,.test.local,server1.example.com,server2.example.com"
動作確認
# curl --head https://www.yahoo.co.jp/
HTTP/1.1 200 Connection established
(略 以降も同様に略)
curl
【検証環境】
Ubuntu 20.04.2
環境変数
:○
↑
○の意味:環境変数を設定した場合、オプションや設定無しでもプロキシへ通信が行くという意味です。例えば、curlの場合、-x
または、--proxy
オプション無しでもプロキシサーバーが使われます。
# curl --head https://www.yahoo.co.jp/ -x http://192.168.0.158:3128
HTTP/1.1 200 Connection established
# curl --head https://www.yahoo.co.jp/ --proxy http://192.168.0.158:3128
HTTP/1.1 200 Connection established
apt
【検証環境】
Ubuntu 20.04.2
環境変数
:○
# vi /etc/apt/apt.conf.d/apt.conf
Acquire::http::proxy "http://192.168.0.158:3128";
Acquire::https::proxy "http://192.168.0.158:3128";
Acquire::ftp::proxy "ftp://192.168.0.158:3128";
動作確認
# which curl
# apt install curl
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libcurl4
(略)
Fetched 396 kB in 7s (55.2 kB/s)
(Reading database ... 147843 files and directories currently installed.)
Preparing to unpack .../libcurl4_7.68.0-1ubuntu2.6_amd64.deb ...
(略)
# which curl
/usr/bin/curl
環境によっては、事前に
apt update
が必要かもしれません。
git
【検証環境】
Ubuntu 20.04.2
環境変数
:○
# git config --global http.proxy http://192.168.0.158:3128
# git config --global https.proxy http://192.168.0.158:3128
動作確認
# git config --global --list
http.proxy=http://192.168.0.158:3128
https.proxy=http://192.168.0.158:3128
# git clone https://github.com/itc-lab/itc-blog.git
Cloning into 'itc-blog'...
remote: Enumerating objects: 517, done.
remote: Counting objects: 100% (517/517), done.
remote: Compressing objects: 100% (343/343), done.
(略)
Proxy設定解除
# git config --global --unset http.proxy
# git config --global --unset https.proxy
# git config --global --list
npm
【検証環境】
CentOS 7.6.1810
環境変数
:○
# npm -g config set proxy http://192.168.0.158:3128
# npm -g config set https-proxy http://192.168.0.158:3128
動作確認
# npm -g config list | grep proxy
https-proxy = "http://192.168.0.158:3128/"
proxy = "http://192.168.0.158:3128/"
# npm install -g yarn
> yarn@1.22.11 preinstall /usr/local/lib/node_modules/yarn
> :; (node ./preinstall.js > /dev/null 2>&1 || true)
/usr/local/bin/yarn -> /usr/local/lib/node_modules/yarn/bin/yarn.js
/usr/local/bin/yarnpkg -> /usr/local/lib/node_modules/yarn/bin/yarn.js
+ yarn@1.22.11
added 1 package in 7.238s
Proxy設定解除
# npm -g config delete proxy
# npm -g config delete https-proxy
# npm -g config list | grep proxy
pip
【検証環境】
Raspberry Pi Desktop OS
Debian GNU/Linux 10 (buster)
環境変数
:○
# pip install wiringpi --proxy http://192.168.0.158:3128
Collecting wiringpi
Using cached wiringpi-2.60.1.tar.gz (130 kB)
Building wheels for collected packages: wiringpi
Building wheel for wiringpi (setup.py) ... done
Created wheel for wiringpi: filename=wiringpi-2.60.1-cp38-cp38-linux_x86_64.whl size=333652 sha256=52a39cf1be009f9c8dc61d6e7624446eb91755cf5fd6a702b5184064646832e8
Stored in directory: /root/.cache/pip/wheels/9e/28/68/323be0608c36361080a9172fcf56395eda64e45315c4d2de40
Successfully built wiringpi
Installing collected packages: wiringpi
Successfully installed wiringpi-2.60.1
Next.jsのfetch
【検証環境】
CentOS 7.6.1810
npm view next version: 11.1.0
環境変数
:×
このブログ、ビルド時にNext.jsのfetchでmicroCMSとtwitterのAPIをGETしているのですが、環境変数、npmをproxy設定してもfetch関数は、proxyを使わず、明示的に実装する必要がありました。
$ cd itc-blog
$ npm install https-proxy-agent
ソースコード実装変更
const key = {
headers: header,
};
const total_count_data: ContentRootObject = await fetch(
`${process.env.API_URL}contents/?limit=0`,
key
)
.then((res) => res.json())
.catch(() => null);
↓
環境変数https_proxyを読み取るように変更
import { HttpsProxyAgent } from 'https-proxy-agent';
const proxy = process.env.https_proxy;
const key = proxy
? {
headers: header,
agent: new HttpsProxyAgent(proxy),
}
: {
headers: header,
};
const total_count_data: ContentRootObject = await fetch(
`${process.env.API_URL}contents/?limit=0`,
key
)
.then((res) => res.json())
.catch(() => null);
yum
【検証環境】
CentOS 7.6.1810
環境変数
:○
# vi /etc/yum.conf
以下を追記 ※[main]
のセクション
proxy=http://192.168.0.158:3128
動作確認
# which python3
/usr/bin/which: no python3 in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
# yum install python3
読み込んだプラグイン:fastestmirror, langpacks
Determining fastest mirrors
epel/x86_64/metalink | 7.2 kB 00:00:00
* base: ftp-srv2.kddilabs.jp
(略)
総ダウンロード容量: 9.3 M
インストール容量: 47 M
Is this ok [y/d/N]:y
(略)
# which python3
/bin/python3
dnf
【検証環境】
CentOS 8.3.2011
環境変数
:○
# vi /etc/dnf/dnf.conf
以下を追記 ※[main]
のセクション
proxy=http://192.168.0.158:3128
動作確認
# which php
/usr/bin/which: no php in (/home/admin/.local/bin:/home/admin/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin)
# dnf install php
CentOS Linux 8 - AppStream 89% [===================================================================- ] 399 kB/s | 7.9 MB 00:02 ETA
(略)
# which php
/usr/bin/php
phpのcopy
【検証環境】
CentOS 8.3.2011
PHP 7.2.24
環境変数
:×
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
PHP Warning: copy(): php_network_getaddresses: getaddrinfo failed: Name or service not known in Command line code on line 1
PHP Warning: copy(https://getcomposer.org/installer): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in Command line code on line 1
とエラーになるので、stream_context_create(['http' => ['proxy' => 'tcp://192.168.0.158:3128']])
を追加
↓
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php', stream_context_create(['http' => ['proxy' => 'tcp://192.168.0.158:3128']]));"
⇒composer-setup.phpがカレントフォルダに置かれればOK
composer-setup.php
【検証環境】
CentOS 8.3.2011
PHP 7.2.24
環境変数
:○
# php composer-setup.php
All settings correct for using Composer
Downloading...
The "https://getcomposer.org/versions" file could not be downloaded: php_network_getaddresses: getaddrinfo failed: Name or service not known
failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known
Retrying...
The "https://getcomposer.org/versions" file could not be downloaded: php_network_getaddresses: getaddrinfo failed: Name or service not known
failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known
Retrying...
The "https://getcomposer.org/versions" file could not be downloaded: php_network_getaddresses: getaddrinfo failed: Name or service not known
failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known
The download failed repeatedly, aborting.
とエラーになるので、環境変数をセットして実行
↓
# https_proxy=http://192.168.0.158:3128 php composer-setup.php
All settings correct for using Composer
Downloading...
Composer (version 2.1.6) successfully installed to: /home/admin/composer.phar
Use it: php composer.phar
composer
【検証環境】
CentOS 8.3.2011
PHP 7.2.24
環境変数
:○
# HTTP_PROXY="http://192.168.0.158:3128" HTTPS_PROXY="http://192.168.0.158:3128" composer install
No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
- Locking monolog/monolog (1.0.2)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing monolog/monolog (1.0.2): Extracting archive
Generating autoload files
pkg(FreeBSD)
【検証環境】
FreeBSD 13.0-RELEASE
環境変数
:○
FreeBSDとLinuxの環境変数の設定方法は、異なります。
FreeBSDの場合、以下です。
ログインシェル=csh, tcshの場合
:
# echo $SHELL
/bin/csh
# setenv HTTP_PROXY http://192.168.0.158:3128
# setenv HTTPS_PROXY http://192.168.0.158:3128
ログインシェル=csh, tcshの場合の設定
:
# vi /etc/csh.cshrc
以下を追記
setenv HTTP_PROXY http://192.168.0.158:3128
setenv HTTPS_PROXY http://192.168.0.158:3128
※一度exitしてログインしなおすか、source /etc/csh.cshrc
コマンドで有効化します。
ログインシェル=shの場合
:
# echo $SHELL
/bin/sh
# HTTP_PROXY=http://192.168.0.158:3128
# HTTPS_PROXY=http://192.168.0.158:3128
# export HTTP_PROXY
# export HTTPS_PROXY
ログインシェル=shの場合の設定
:
# vi /etc/profile
以下を追記
HTTP_PROXY=http://192.168.0.158:3128
HTTPS_PROXY=http://192.168.0.158:3128
export HTTP_PROXY
export HTTPS_PROXY
※一度exitしてログインしなおす必要があります。
pkgのProxy設定
:
pkg自体は既にインストール済みとします。(プロキシを使う場合、上記の環境変数をセットしてインストールできます。)
# vi /usr/local/etc/pkg.conf
以下を追記
pkg_env : {
http_proxy: "http://192.168.0.158:3128"
https_proxy: "http://192.168.0.158:3128"
}
動作確認
# pkg install curl
Updating FreeBSD repository catalogue...
Fetching meta.conf: 100% 163 B 0.2kB/s 00:01
Fetching packagesite.txz: 100% 6 MiB 3.3MB/s 00:02
Processing entries: 100%
FreeBSD repository update completed. 30742 packages processed.
(略)
# which curl
/usr/local/bin/curl
その他、宣伝、誹謗中傷等、当方が不適切と判断した書き込みは、理由の如何を問わず、投稿者に断りなく削除します。
書き込み内容について、一切の責任を負いません。
このコメント機能は、予告無く廃止する可能性があります。ご了承ください。
コメントの削除をご依頼の場合はTwitterのDM等でご連絡ください。