Mastering Proxy Settings on Ubuntu 18.04: A Comprehensive Guide
- Mastering Proxy Settings on Ubuntu 18.04: A Comprehensive Guide
- Связанные вопросы и ответы
- Как изменить настройки прокси на Ubuntu 18.04
- Как установить прокси-сервер на Ubuntu 18.04
- Как настроить системные настройки прокси на Ubuntu 18.04
- Как настроить прокси-сервер для браузера на Ubuntu 18.04
- Как изменить настройки прокси для определенного приложения на Ubuntu 18.04
- Как настроить прокси-сервер для загрузки пакетов на Ubuntu 18.04
Mastering Proxy Settings on Ubuntu 18.04: A Comprehensive Guide
Squid - полнофункциональный кеширующий прокси, поддерживающий популярные сетевые протоколы, такие как HTTP, HTTPS, FTP и другие. Squid в основном используется для повышения производительности веб-сервера путем кэширования повторяющихся запросов, фильтрации веб-трафика и доступа к контенту с географическим ограничением.
Из этого туториала Вы узнаете, как настроить прокси-сервер Squid в Ubuntu 18.04 и настроить браузеры Firefox и Google Chrome для его использования.
Установка Squid на Ubuntu
Пакет Squid включен в стандартные репозитории Ubuntu 18.04. Для его установки введите следующие команды от имени пользователя sudo:
sudo apt update
sudo apt install squid
После завершения установки служба Squid запустится автоматически.
Чтобы убедиться, что установка прошла успешно и служба Squid запущена, введите следующую команду, которая выведет статус службы:
sudo systemctl status squid
● squid.service - LSB: Squid HTTP Proxy version 3.x Loaded: loaded (/etc/init.d/squid; generated) Active: active (running) since Thu 2019-06-27 11:45:17 UTC…
Конфигурирование Squid
Squid можно настроить, отредактировав файл/etc/squid/squid.conf
. Вы также можете использовать отдельные файлы с параметрами конфигурации, которые могут быть включены с помощью директивы include.
Связанные вопросы и ответы:
Вопрос 1: Как установить прокси-сервер на Ubuntu 18.04
Ответ: Чтобы установить прокси-сервер на Ubuntu 18.04, вы должны открыть файл конфигурации сети, который находится по адресу /etc/environment. Откройте его с помощью текстового редактора, такого как nano или vim. Затем найдите строку, которая начинается с "http_proxy=" и измените ее на "http_proxy=http://ваш_прокси_адрес:порт". После этого сохраните файл и закройте редактор.
Вопрос 2: Как изменить прокси-сервер на Ubuntu 18.04
Ответ: Чтобы изменить прокси-сервер на Ubuntu 18.04, вы должны открыть файл конфигурации сети, который находится по адресу /etc/environment. Откройте его с помощью текстового редактора, такого как nano или vim. Затем найдите строку, которая начинается с "http_proxy=" и измените ее на "http_proxy=http://новый_прокси_адрес:порт". После этого сохраните файл и закройте редактор.
Вопрос 3: Как отключить прокси-сервер на Ubuntu 18.04
Ответ: Чтобы отключить прокси-сервер на Ubuntu 18.04, вы должны открыть файл конфигурации сети, который находится по адресу /etc/environment. Откройте его с помощью текстового редактора, такого как nano или vim. Затем найдите строку, которая начинается с "http_proxy=" и удалите ее полностью. После этого сохраните файл и закройте редактор.
Вопрос 4: Как проверить настройки прокси-сервера на Ubuntu 18.04
Ответ: Чтобы проверить настройки прокси-сервера на Ubuntu 18.04, вы должны открыть терминал и ввести команду "curl --proxy http://ваш_прокси_адрес:порт http://www.google.com". Если вывод команды содержит информацию о сайте Google, то настройки прокси-сервера работают правильно.
Вопрос 5: Как настроить прокси-сервер для определенного приложения на Ubuntu 18.04
Ответ: Чтобы настроить прокси-сервер для определенного приложения на Ubuntu 18.04, вы должны открыть файл конфигурации приложения и найти строку, которая определяет настройки сети. Затем измените эту строку, добавив параметр "http_proxy" с нужным адресом и портом прокси-сервера. После этого сохраните файл и закройте редактор.
Вопрос 6: Как настроить прокси-сервер для всех приложений на Ubuntu 18.04
Ответ: Чтобы настроить прокси-сервер для всех приложений на Ubuntu 18.04, вы должны открыть файл конфигурации сети, который находится по адресу /etc/environment. Откройте его с помощью текстового редактора, такого как nano или vim. Затем найдите строку, которая начинается с "http_proxy=" и измените ее на "http_proxy=http://ваш_прокси_адрес:порт". После этого сохраните файл и закройте редактор.
Вопрос 7: Как настроить прокси-сервер для определенного пользователя на Ubuntu 18.04
Ответ: Чтобы настроить прокси-сервер для определенного пользователя на Ubuntu 18.04, вы должны открыть файл конфигурации сети для этого пользователя, который находится по адресу /home/ваш_пользователь/.bashrc. Откройте его с помощью текстового редактора, такого как nano или vim. Затем найдите строку, которая начинается с "http_proxy=" и измените ее на "http_proxy=http://ваш_прокси_адрес:порт". После этого сохраните файл и закройте редактор.
Как изменить настройки прокси на Ubuntu 18.04
Squid — это полнофункциональный прокси-сервер для кеширования, поддерживающий популярные сетевые протоколы, такие как HTTP, HTTPS, FTP и другие. Squid в основном используется для повышения производительности веб-сервера путем кэширования повторяющихся запросов, фильтрации веб-трафика и доступа к контенту с географическим ограничением.
Это руководство проведет вас через процесс настройки прокси-сервера Squid в Ubuntu 18.04 и настройки веб-браузеров Firefox и Google Chrome для его использования.
Установка Squid на Ubuntu
Пакет Squid включен в репозитории Ubuntu 18.04 по умолчанию. Чтобы установить его, введите следующие команды от имени:
sudo apt update
sudo apt install squid
После завершения установки служба Squid запустится автоматически.
Чтобы убедиться, что установка прошла успешно и служба Squid запущена, введите следующую команду, которая распечатает статус службы:
sudo systemctl status squid
● squid.service - LSB: Squid HTTP Proxy version 3.x
Loaded: loaded (/etc/init.d/squid; generated)
Active: active (running) since Thu 2019-06-27 11:45:17 UTC
…
Настройка Squid
Squid можно настроить, отредактировав файл/etc/squid/squid.conf
. Вы также можете использовать отдельные файлы с параметрами конфигурации, которые можно включить с помощью директивы «include».
Как установить прокси-сервер на Ubuntu 18.04
Давайте попробуем вместе с ноля создать и настроить собственный прокси-сервер на базе дистрибутивов Ubuntu / Debian с помощью Squid .
Устанавливаем пакеты программного обеспечения
Прежде всего, обновляем репозиторий нашей операционной системы. Для этого выполняем командуapt update
:
Важно : здесь и далее управление пакетами с помощью утилиты apt ( Advanced Packaging Tool ) выполняется с правами суперпользователя ( root ) — через командуsudo
.
Теперь обновляем пакеты — для этого вводим в командную строку командуapt dist-upgrade
:
Поскольку в результате обновилось ядро Linux , нужно перегрузить систему . Воспользуемся командойshutdown
с опцией now
(немедленно):
Теперь устанавливаем прокси-сервер Squid . Для этого используем командуapt install
, добавив в качестве аргументаsquid
. Также установим apache2-utils для аутентификации пользователей по паролю:
Настраиваем прокси-сервер Squid
Теперь нам предстоит настроить работу нашего прокси-сервера . На всякий случай делаем резервную копию файла настроек Squid . Для этого сначала переходим в каталог /etc/squid/ с помощью командыcd
:
После чего копируем файл squid.conf , изменив имя итогового файла наsquid.conf.default
с помощью командыcp
:
Файл настроек Squid будет находиться там же, но его исходный вариант не будет перезаписываться при работе с утилитой.
Как настроить системные настройки прокси на Ubuntu 18.04
Apache и Nginx– популярные веб-серверы с открытым исходным кодом, которые часто используются для работы с PHP. Их можно использовать на одной виртуальной машине для поддержки нескольких веб-сайтов с разными требованиями. Обычно два веб-сервера в одной системе используют для работы с несколькими IP-адресами или различными портами.
Серверы с поддержкой адресов IPv4 и IPv6 можно настроить для обслуживания Apache по одному протоколу и Nginx по другому. Но это не очень практично, так как IPv6 до сих пор не получил широкого распространения. Можно также установить для второго веб-сервера другой номер порта, но использовать порты в ссылках очень неудобно.
Данный мануал поможет настроить Nginx как веб-сервер и прокси-сервер для Apache на одном сервере Ubuntu 18.04.
При этом может понадобиться изменить код приложения, чтобы включить поддержку обратного прокси в Apache (особенно это касается сайтов с SSL). Чтобы избежать этого, можно установить специальный модуль Apache, mod_rpaf, который переопределяет некоторые переменные среды, благодаря чему Apache может напрямую обслуживать запросы клиентов.
В мануале показано, как разместить четыре домена на одном сервере. Два из них будут обслуживаться Nginx: example.com (стандартный виртуальный хост) и sample.org. Другие два – Apache: foobar.net и test.io. Мы также настроим Apache для поддержки PHP-приложений по PHP-FPM, что обеспечивает лучшую производительность по сравнению с mod_php.
Требования
- Новый сервер Ubuntu 18.04, настроенный по этому мануалу .
- 4 домена, направленные на IP-адрес вашего сервера. Читайте мануал Как настроить имя хоста , чтобы создать необходимые записи А.
1: Установка Apache и PHP-FPM
Сначала нужно установить Apache и PHP-FPM. Также для работы понадобится модуль Apache для PHP FastCGI под названием libapache2-mod-fastcgi.
Обновите индекс пакетов:
sudo apt update
Установите необходимые программы:
sudo apt install apache2 php-fpm
Модуль Apache FastCGI недоступен в репозитории Ubuntu, поэтому загрузите его с kernel.org и установите с помощью команды dpkg.
wget https://mirrors.edge.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb
sudo dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb
2: Настройка Apache и PHP-FPM
Теперь нужно настроить порт Apache (8080) и подготовить веб-сервер к работе с PHP-FPM с помощью модуля mod_fastcgi. Переименуйте конфигурационный файл Apache ports.conf:
sudo mv /etc/apache2/ports.conf /etc/apache2/ports.conf.default
Создайте новый файл ports.conf и укажите в нем порт 8080.
echo "Listen 8080" | sudo tee /etc/apache2/ports.conf
Примечание : Обычно 127.0.0.1:8080 прослушивают прокси-серверы, но это позволит установить loopback IP-адрес в качестве значения переменной окружения РНР server_addr вместо внешнего IP-адреса сервера. В данном случае целью является такая настройка Apache, при которой веб-сайты, поддерживаемые Apache, не увидят обратного прокси-сервера. Таким образом, Apache нужно настроить для прослушивания порта 8080 на всех IP-адресах.
После этого нужно отредактировать стандартный виртуальный хост Apache. Директива
Отключите стандартный файл:
sudo a2dissite 000-default
Создайте новый виртуальный хост на основе стандартного файла:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/001-default.conf
Откройте новый файл:
sudo nano /etc/apache2/sites-available/001-default.conf
Измените прослушиваемый порт на 8080:
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Сохраните и закройте файл. Включите новый файл:
sudo a2ensite 001-default
Перезапустите Apache.
sudo systemctl reload apache2
Убедитесь, что порт изменился:
sudo netstat -tlpn
Вывод должен выглядеть так:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1086/sshd
tcp6 0 0 :::8080 :::* LISTEN 4678/apache2
tcp6 0 0 :::22 :::* LISTEN 1086/sshd
3: Настройка модуля mod_fastcgi
По умолчанию Apache обслуживает PHP-страницы с помощью модуля mod_php. Но в данном случае нужен дополнительный модуль для PHP-FPM.
Примечание : Если вы выполняете мануал на сервере со стеком LAMP и включенным модулем mod_php, сначала отключите модуль:
sudo a2dismod php7.2.
Как настроить прокси-сервер для браузера на Ubuntu 18.04
3proxy отсутствует в репозиториях Ubuntu, поэтому для установки сначала необходимо скачать его исходник.
Для начала устанавливаем пакет программ для компиляции пакетов:
apt-get install build-essential
Переходим на официальную страницу загрузки 3proxy и копируем ссылку на версию пакета для Linux:
… используя ссылку, скачиваем пакет:
wget https://github.com/z3APA3A/3proxy/archive/0.9.3.tar.gz
* в моем случае будет скачена версия 0.9.3.
Распакуем скачанный архив:
tar xzf 0.9.3.tar.gz
Переходим в распакованный каталог:
cd 3proxy-*
Запускаем компиляцию 3proxy:
make -f Makefile.Linux
Создаем системную учетную запись:
adduser --system --disabled-login --no-create-home --group proxy3
Создаем каталоги и копируем файл 3proxy в /usr/bin:
mkdir -p /var/log/3proxy /etc/3proxy
cp bin/3proxy /usr/bin/
Задаем права на созданные каталоги:
chown proxy3:proxy3 -R /etc/3proxy /usr/bin/3proxy /var/log/3proxy
Смотрим uid и gid созданной учетной записи:
id proxy3
Получим, примерно, такой результат:
uid=109(proxy3) gid=113(proxy3) groups=113(proxy3)
* где 109 — идентификатор пользователя; 113 — идентификатор для группы.
Создаем конфигурационный файл:
vi /etc/3proxy/3proxy.cfg
setuid 109
setgid 113
nserver 77.88.8.8
nserver 8.8.8.8
nscache 65536
timeouts 1 5 30 60 180 1800 15 60
external 111.111.111.111
internal 111.111.111.111
daemon
log /var/log/3proxy/3proxy.log D
logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
rotate 30
auth none
allow * * * 80-88,8080-8088 HTTP
allow * * * 443,8443 HTTPS
proxy -n
* необходимо обратить внимание на настройки setuid и setgid — это должны быть значения для созданной нами учетной записи; external и — внешний и внутренний интерфейсы (если наш прокси работает на одном адресе, то IP-адреса должны совпадать).
Как изменить настройки прокси для определенного приложения на Ubuntu 18.04
Перед тем как начать, должно быть следующее
- Ubuntu сервер с открытыми портами
80
и443
. - Установленный
docker
иdocker-compose
на локальном компьютере и сервере. - Зарегистрированные доменные имена. В этом руководстве я буду использовать
proj1.com
иproj2.com
для двух проектов.- Запись
A
дляproj1.com
иproj2.com
, указывает на публичный IP адрес нашего сервера. - Запись
A
дляwww.proj1.com
иwww.proj2.com
, указывает на публичный IP адрес нашего сервера.
- Запись
В этом руководстве будет использоваться
- nodejs
- create-react-app
- yarn
- docker
- docker-compose
В любой момент может понадобится
docker ps
- список запущенных контейнеров docker network ls
- список всех активных и неактивных сетей созданных docker'ом docker system prune
- очистка всех остановленных контейнеров и неиспользуемых сетей docker-compose down
- выполняется из корня проекта. Останавливает запущенный контейнер.Настройка на локальном компьютере
Этап 1. Создаем 2react
проекта
В результате будет 2 простых проекта
В любом удобном месте на локальном компьютере создаемreact
проектproj1
иproj2
yarn create react-app proj1
yarn create react-app proj2
По очереди запускаем каждый из проектовyarn start
и вносим маленькие изменения, чтобы видеть отличия проектов.
Например вsrc -> App.js
каждого проекта вместоEdit
(create-react-app версия 2.1.3) напишемsrc/App.js
and save to reload.proj1
иproj2
соответственно.
Этап 2. Упаковываем каждый проект в контейнер
В результате каждый проект будет в отдельном контейнере. Все действия далее описываю только для одного проекта. Их нужно сделать для двух проектов.
Пишем инструкции для запуска контейнера
В корне проекта создаемDockerfile
Dockerfile - это инструкция по созданию контейнера
FROM mhart/alpine-node:11 # Качаем node контейнер с docker hub RUN yarn global add serve # Устанавливаем serve для сервирования нашего проекта WORKDIR /app # Указываем главную папку в контейнере, в которой будет наш проект COPY package.json yarn.lock ./ # Копируем файлы package.json и yarn.lock в папку, указанную выше (не забываем ./) RUN yarn # Устанавливаем зависимости COPY . . # Копируем остальные файлы проекта в главную папку RUN yarn build # Компилируем проект CMD serve -s /app/build # Серверуем проект из новой папки build (по умолчанию порт 5000)
Далее в корне проекта создаемdocker-compose.yml
docker-compose - это инструкция по запуску контейнер(а/ов)
version : ' 3.7 ' # Смотреть актуальную версию docker-compose синтаксиса на оф. сайте services : # Объявляем список сервисов proj1 : # Указываем название сервиса container_name : proj1 # Указываем название контейнера (не обязательно) build : . # Запускаем Dockerfile из корня проекта environment : - NODE_ENV=production # ENV переменная production сообщит yarn, что не нужно качать зависимости для разработки, если такие имеются. : -
В корне проекта создаем.dockerignore
.git
node_modules
build
Запускаем и проверяем контейнер
Из корня проекта выполняемdocker-compose up
При первом запуске будут выполняться все инструкцииDockerfile
, что займет какое-то время. Дальнейшие запуски, при отсутствии изменений в проекте, будут проходить быстрее.
Когда видим строку видаproj1 | INFO: Accepting connections at http://localhost:5000
, можем проверить в браузереlocalhost:8080
. Результатом должен бытьreact
проект с надписьюproj1
.
В
Как настроить прокси-сервер для загрузки пакетов на Ubuntu 18.04
Я хочу обеспечить доступность всех узлов кластера через DNS-имена по внутренним IP-адресам, сохранив доступность разрешения обычных имен узлов в интернете. Для этого, на серверахgw-1
,gw-2
я разверну pdns-recursor и укажу его в качестве рекурсора на всех узлах кластера.
Базовая настройка pdns-recursor наgw-1
,gw-2
включает указание следующих директив:
allow-from=10.120.0.0/8, 127.0.0.0/8
etc-hosts-file=/etc/hosts.resolv
export-etc-hosts=on
export-etc-hosts-search-suffix=cluster
Сам файл/etc/hosts.resolv
генерируется с помощью ansible и выглядит следующим образом:
# Ansible managed
10.120.29.231 gw-1 gw-1
10.120.28.23 gw-2 gw-2
10.120.29.32 video-accessors-1 video-accessors-1
10.120.29.226 video-accessors-2 video-accessors-2
10.120.29.153 mongo-1 mongo-1
10.120.29.210 mongo-2 mongo-2
10.120.29.220 mongo-3 mongo-3
10.120.28.172 compute-1 compute-1
10.120.28.26 compute-2 compute-2
10.120.29.70 compute-3 compute-3
10.120.28.127 zk-1 zk-1
10.120.29.110 zk-2 zk-2
10.120.29.245 zk-3 zk-3
10.120.28.21 minio-1 minio-1
10.120.28.25 minio-2 minio-2
10.120.28.158 minio-3 minio-3
10.120.28.122 minio-4 minio-4
10.120.29.187 k8s-1 k8s-1
10.120.28.37 k8s-2 k8s-2
10.120.29.204 k8s-3 k8s-3
10.120.29.135 kafka-1 kafka-1
10.120.29.144 kafka-2 kafka-2
10.120.28.130 kafka-3 kafka-3
10.120.29.194 clickhouse-1 clickhouse-1
10.120.28.66 clickhouse-2 clickhouse-2
10.120.28.61 clickhouse-3 clickhouse-3
10.120.29.244 app-1 app-1
10.120.29.228 app-2 app-2
10.120.29.33 prometeus prometeus
10.120.29.222 manager manager
10.120.29.187 k8s-cp
Шаблон Ansible для генерации конфига
# {{ ansible_managed }}
{% for item in groups %}
{% set short_name = item.split('.') %}
{{ hostvars
Далее необходимо сделать так, чтобы все узлы вместо DNS-рекурсоров, получаемых из настроек DHCP, использовали данные DNS-ы. В Ubuntu 18.04 используетсяsystemd-resolved
, поэтому необходимо подсунуть ему требуемые серверыgw-1, gw-2
. Для этого создадим на каждом хосте кластера конфигурационный файл systemd, переопределяющий поведениеsystemd-resolved
, разместив его по пути/etc/systemd/network/0-eth0.network
:
Делает он следующее: для инструкций DHCP, полученных через eth0 будут игнорироваться DNS-серверы и поисковые домены, определенные на DHCP-сервере. Вместо этого будут использоваться серверы10.120.28.23, 10.120.29.231
и поисковый домен*.cluster
.
После создания данного файла требуется перезагрузить узел или сетевую подсистему узла, поскольку простой перезапускsystemd-resolved
не инициирует повторное получение данных по DHCP. Я перезагружаю хост полностью для того, чтобы убедиться в корректном поведении при старте узла.
При успешной инициализацииsystemd-resolve --status
выдаст следующий листинг:
Global
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 3 (eth1)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 2 (eth0)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 10.120.28.23
10.120.29.231
DNS Domain: cluster
Это действие необходимо выполнить на всех узлах кластера. При корректном выполнении каждый узел сможет выполнитьping gw-1
,ping gw-1.cluster
и получить ответ от данных узлов по внутренним ip-адресам.