Настройка прокси в Linux осуществляется через переменные окружения, конфигурацию пакетного менеджера APT и системные службы systemd, обеспечивая маршрутизацию сетевого трафика через прокси-сервер для различных приложений и системных компонентов.
Настройка через переменные окружения
Переменные окружения являются базовым методом настройки прокси для большинства пользовательских приложений и командной строки. Они влияют на программы, которые явно или неявно используют эти переменные для определения прокси-сервера.
Общие переменные окружения
Стандартные переменные для настройки прокси включают:
http_proxy: Для HTTP-трафика.https_proxy: Для HTTPS-трафика.ftp_proxy: Для FTP-трафика.all_proxy: Универсальный прокси для всех протоколов, если не указаны более специфичные.no_proxy: Список хостов или доменов, для которых прокси не используется.
Рекомендуется устанавливать как строчные (http_proxy), так и прописные (HTTP_PROXY) версии переменных, поскольку некоторые приложения могут быть чувствительны к регистру.
Формат прокси-строки
Прокси-строка имеет следующий формат:
[протокол://][пользователь:пароль@]хост:порт/
Примеры:
* http://proxy.example.com:8080/
* https://user:password@secureproxy.example.com:3128/
* socks5://socks.example.com:1080/
Список no_proxy представляет собой разделенный запятыми список доменных имен, IP-адресов или CIDR-нотаций, для которых прямое соединение должно использоваться вместо прокси.
Пример: no_proxy="localhost,127.0.0.1,::1,*.local,10.0.0.0/8,192.168.1.0/24"
Методы установки переменных окружения
Временно (для текущей сессии):
Переменные устанавливаются только для текущего терминала и его дочерних процессов.
export HTTP_PROXY="http://proxy.example.com:8080/"
export HTTPS_PROXY="http://proxy.example.com:8080/"
export FTP_PROXY="http://proxy.example.com:8080/"
export NO_PROXY="localhost,127.0.0.1"
# Для проверки
echo $HTTP_PROXY
Постоянно (для конкретного пользователя):
Переменные устанавливаются при каждом входе пользователя в систему. Файлы для настройки: ~/.bashrc, ~/.profile или ~/.zshrc (в зависимости от используемой оболочки).
Добавьте следующие строки в конец выбранного файла:
# ~/.bashrc или ~/.profile
export HTTP_PROXY="http://proxy.example.com:8080/"
export HTTPS_PROXY="http://proxy.example.com:8080/"
export FTP_PROXY="http://proxy.example.com:8080/"
export NO_PROXY="localhost,127.0.0.1"
# Также рекомендуется указывать прописные версии
export http_proxy="http://proxy.example.com:8080/"
export https_proxy="http://proxy.example.com:8080/"
export ftp_proxy="http://proxy.example.com:8080/"
export no_proxy="localhost,127.0.0.1"
После сохранения файла изменения вступят в силу при следующем входе в систему или после выполнения команды source ~/.bashrc (или соответствующего файла).
Постоянно (системно):
Переменные устанавливаются для всех пользователей и всех системных служб, которые наследуют окружение от /etc/environment или скриптов в /etc/profile.d/.
-
/etc/environment: Простой способ для глобальной установки. Переменные определяются построчно без ключевого словаexport.```ini
/etc/environment
HTTP_PROXY="http://proxy.example.com:8080/"
HTTPS_PROXY="http://proxy.example.com:8080/"
FTP_PROXY="http://proxy.example.com:8080/"
NO_PROXY="localhost,127.0.0.1"
http_proxy="http://proxy.example.com:8080/"
https_proxy="http://proxy.example.com:8080/"
ftp_proxy="http://proxy.example.com:8080/"
no_proxy="localhost,127.0.0.1"
```Для применения изменений требуется перезагрузка системы или выход/вход для пользователей.
-
/etc/profile.d/proxy.sh: Создайте новый файл, например,/etc/profile.d/proxy.sh, и добавьте в него командыexport. Этот метод более гибок, так как позволяет использовать логику.```bash
/etc/profile.d/proxy.sh
export HTTP_PROXY="http://proxy.example.com:8080/"
export HTTPS_PROXY="http://proxy.example.com:8080/"
export FTP_PROXY="http://proxy.example.com:8080/"
export NO_PROXY="localhost,127.0.0.1"
export http_proxy="http://proxy.example.com:8080/"
export https_proxy="http://proxy.example.com:8080/"
export ftp_proxy="http://proxy.example.com:8080/"
export no_proxy="localhost,127.0.0.1"
```Сделайте файл исполняемым:
sudo chmod +x /etc/profile.d/proxy.sh. Переменные будут установлены для всех пользователей при входе в систему.
Настройка прокси для APT
Пакетный менеджер APT (Advanced Package Tool) не использует переменные окружения напрямую, особенно при выполнении с sudo. Для его настройки требуется отдельный конфигурационный файл.
Конфигурация APT
Создайте или отредактируйте файл /etc/apt/apt.conf.d/00proxy (или другой файл с расширением .conf в этой директории). Использование apt.conf.d позволяет модульно управлять конфигурацией.
sudo nano /etc/apt/apt.conf.d/00proxy
Добавьте следующие строки, заменяя данные на актуальные:
// /etc/apt/apt.conf.d/00proxy
Acquire::http::Proxy "http://user:password@proxy.example.com:8080/";
Acquire::https::Proxy "http://user:password@proxy.example.com:8080/";
Acquire::ftp::Proxy "ftp://user:password@proxy.example.com:8080/";
// Если требуется исключить некоторые хосты
Acquire::http::No-Proxy "localhost,127.0.0.1,::1";
Acquire::http::Proxy- для HTTP-протокола.Acquire::https::Proxy- для HTTPS-протокола.Acquire::ftp::Proxy- для FTP-протокола.Acquire::http::No-Proxy- для исключений.
Важно: Для HTTPS-трафика APT использует HTTP-прокси, поэтому в Acquire::https::Proxy указывается http:// или https:// в зависимости от поддержки прокси. Большинство прокси-серверов настроены на туннелирование HTTPS через HTTP.
Проверка настройки APT
После сохранения файла конфигурации проверьте работу прокси, обновив список пакетов:
sudo apt update
Если прокси настроен корректно, apt должен успешно загрузить информацию о пакетах.
Настройка прокси для Systemd
systemd управляет системными службами, и для них требуется отдельная конфигурация прокси, поскольку они не наследуют переменные окружения пользователя.
Системная настройка для всех служб Systemd
Для установки прокси-переменных для всех служб systemd необходимо отредактировать конфигурацию менеджера systemd.
-
Создайте директорию для настроек
systemd(если ее нет) и файл конфигурации:bash sudo mkdir -p /etc/systemd/system.conf.d/ sudo nano /etc/systemd/system.conf.d/proxy.conf -
Добавьте в файл следующие строки, указывая ваши прокси-серверы:
```ini
/etc/systemd/system.conf.d/proxy.conf
[Manager]
DefaultEnvironment="HTTP_PROXY=http://proxy.example.com:8080/" "HTTPS_PROXY=http://proxy.example.com:8080/" "NO_PROXY=localhost,127.0.0.1"
```Указывайте как строчные, так и прописные версии переменных, как и в случае с пользовательскими переменными окружения.
-
Перезагрузите
systemd daemonдля применения изменений:bash sudo systemctl daemon-reload -
Чтобы изменения вступили в силу для уже запущенных служб, их необходимо перезапустить:
```bash
sudo systemctl restart <имя_службы>Например: sudo systemctl restart docker
```
Настройка прокси для конкретной службы Systemd
Если прокси нужен только для одной или нескольких служб, можно настроить его непосредственно в файле юнита службы.
-
Отредактируйте файл юнита службы. Используйте
systemctl edit, чтобы создать оверрайд файл, который не будет перезаписан при обновлении пакетов.```bash
sudo systemctl edit --full <имя_службы>Например: sudo systemctl edit --full docker.service
```
Использование
--fullпозволяет редактировать полный файл юнита, но более безопасным является создание отдельного файла оверрайда, который будет содержать только необходимые изменения. Для этого используйтеsudo systemctl edit <имя_службы>без--full. -
Добавьте или измените секцию
[Service]с переменными окружения:```ini
/etc/systemd/system/docker.service.d/proxy.conf (пример для Docker)
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1"
```Каждая переменная должна быть указана в отдельной строке
Environment=. -
Перезагрузите
systemd daemonи перезапустите службу:```bash
sudo systemctl daemon-reload
sudo systemctl restart <имя_службы>Например: sudo systemctl restart docker.service
```
Проверка прокси для службы Systemd
Чтобы убедиться, что служба использует прокси, можно проверить ее переменные окружения:
sudo systemctl show <имя_службы> --property Environment
# Например: sudo systemctl show docker.service --property Environment
Сравнение методов настройки прокси
| Метод | Область действия | Персистентность | Примечания |
|---|---|---|---|
| Переменные окружения | Пользовательские приложения, CLI-инструменты | Временно/пользователь/системно | Самый общий метод. Не влияет на sudo и systemd напрямую. |
| APT | Пакетный менеджер APT | Системно | Отдельная конфигурация в /etc/apt/apt.conf.d/. |
| Systemd | Системные службы (systemd) |
Системно | Две опции: глобально для всех служб или для конкретной службы. |
Общие рекомендации и тестирование
- Аутентификация: Если прокси требует аутентификации, включите имя пользователя и пароль в URL прокси.
- SOCKS против HTTP: Убедитесь, что используемый прокси-сервер поддерживает выбранный протокол (HTTP, HTTPS, SOCKS). Некоторые приложения могут требовать
socks5://для SOCKS-прокси. -
Тестирование: Для проверки работы прокси из командной строки используйте
curlилиwget:```bash
Использование переменной окружения
curl -v https://google.com
Явное указание прокси для curl
curl -x "http://proxy.example.com:8080" https://google.com
Явное указание прокси для wget
wget --proxy-user="user" --proxy-password="password" -e use_proxy=yes -e http_proxy="http://proxy.example.com:8080" https://google.com
```