Чаще всего запрос «как установить прокси сервер на linux» возникает в двух сценариях: нужно дать нескольким машинам единый выход через один IP или нужен отдельный узел для тестирования, мониторинга и рабочих задач. На практике на Linux обычно поднимают Squid — это проверенный HTTP/HTTPS-прокси, который ставится быстро, но требует аккуратной настройки ACL, иначе вместо рабочего сервиса получится либо 403 для своих клиентов, либо открытый прокси для всего интернета.

Что важно понять до установки

Если нужен собственный прокси на Linux, самый понятный путь — поставить Squid. Для базовой схемы вам нужны пакет squid, открытый порт 3128/tcp, список разрешенных IP-адресов и проверка конфига перед запуском.

Ключевой момент: такой сервер будет выводить трафик в сеть с IP самого сервера. Если вы ставите его на VPS, сайты увидят дата-центровый IP этого VPS, а не мобильный и не домашний адрес.

Самая частая ошибка — установить Squid, открыть порт наружу и не ограничить доступ ACL или файрволом. Открытый прокси долго не живет: его быстро находят, нагружают чужим трафиком, а потом приходится разбираться с логами и жалобами.

Установить прокси-сервер и настроить прокси в Linux — это разные задачи

По формулировке запроса часто смешивают две вещи. Первая — вы поднимаете свой сервер на Linux, который будет принимать подключения от клиентов. Вторая — вы настраиваете сам Linux использовать уже готовый внешний прокси для браузера, curl, пакетного менеджера или приложений.

Задача Что делаете Что увидит внешний сайт
Поднять свой прокси на Linux Ставите Squid, открываете порт, задаете ACL IP вашего сервера
Прописать внешний прокси в Linux Добавляете адрес, порт, логин и пароль в систему или приложение IP внешнего прокси
Нужен мобильный или резидентский IP Используете специализированный тип прокси IP выбранной сети, а не вашего VPS

Ниже — именно про первый вариант: как поставить и запустить собственный прокси-сервер на Linux.

Мобильные прокси России от 590 ₽ с ротацией

Отслеживайте, меняйте, переключайте и группируйте прокси в одном месте.

Перейти в личный кабинет

Когда своего Linux-прокси достаточно, а когда нет

Собственный Squid хорошо работает там, где нужен контролируемый HTTP/HTTPS-прокси без лишней магии. Это удобный вариант для QA, офисной сети, внутренних инструментов, мониторинга собственных сайтов и задач, где приемлем IP сервера.

  • Единая точка выхода в интернет для отдела, тестового стенда или нескольких серверов.
  • Проверка сайта или веб-приложения с отдельного IP-адреса.
  • SEO-мониторинг, сбор открытых данных и техническая аналитика при умеренной нагрузке.
  • Разделение трафика по проектам, когда нужен отдельный выходной IP.
  • Контроль логов и правил доступа на своей стороне.

Но есть и ограничения. Squid не делает ваш IP «мобильным», не превращает VPS в резидентский узел и не подходит для любого сетевого протокола.

Если под задачу нужен IP мобильного оператора и автоматическая смена адресов, свой Squid на VPS это не заменяет — в таких сценариях обычно смотрят на мобильные прокси с ротацией или на прокси с ротацией. Если же приложению нужен не HTTP/CONNECT, а сокетный прокси для разных TCP-сценариев, логичнее выбирать SOCKS5-прокси.

Что подготовить до установки

Перед установкой лучше сразу определить сеть клиентов и режим доступа. Это сэкономит время на переделке ACL и снизит риск случайно открыть прокси всем подряд.

  • Сервер с Linux и правами sudo или root.
  • Понимание, кто будет подключаться: одна машина, подсеть офиса, несколько внешних IP.
  • Решение, на каком интерфейсе слушать прокси: только локальная сеть или все интерфейсы.
  • Открытый порт на локальном файрволе и, если это облачный сервер, в сетевых правилах провайдера.
  • Адрес подсети для ACL, например 192.168.10.0/24, либо список конкретных IP.
  • План по логам: где хранить, кто имеет доступ, нужно ли ограничивать срок хранения.
  • Понимание, нужен ли доступ по IP, по логину и паролю или оба варианта сразу.

Если сервер стоит в облаке, дополнительно проверьте security group или аналогичные правила. Локально Squid может работать идеально, а снаружи подключение будет падать просто потому, что порт не открыт на уровне облака.

Как установить прокси-сервер на Linux через Squid

Ниже — базовая схема, которая подходит для Debian, Ubuntu и большинства RHEL-совместимых систем. Путь к конфигу у Squid обычно один и тот же — /etc/squid/squid.conf, а имя сервиса — squid.

Базовая установка и минимальная конфигурация

  1. Установите пакет squid.

    # Debian / Ubuntu
    sudo apt update
    sudo apt install squid
    
    # RHEL / AlmaLinux / Rocky
    sudo dnf install squid

    После установки проверьте, что в системе появились конфиг /etc/squid/squid.conf и сервис squid.service.

  2. Сделайте резервную копию стандартного конфига.

    sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak

    Это полезно по двум причинам: можно быстро откатиться и удобно сверять свою минимальную конфигурацию с дефолтной, если позже понадобятся дополнительные ACL или параметры логирования.

  3. Запишите минимальный рабочий конфиг.

    sudo tee /etc/squid/squid.conf > /dev/null <<'EOF'
    http_port 3128
    
    acl localnet src 192.168.10.0/24
    acl localhost src 127.0.0.1/32 ::1
    
    acl SSL_ports port 443
    acl Safe_ports port 80
    acl Safe_ports port 443
    acl Safe_ports port 1025-65535
    acl CONNECT method CONNECT
    
    http_access deny !Safe_ports
    http_access deny CONNECT !SSL_ports
    http_access allow localhost
    http_access allow localnet
    http_access deny all
    
    cache deny all
    EOF

    Замените 192.168.10.0/24 на свою подсеть или на список отдельных ACL под конкретные клиентские IP. Если прокси нужен только внутри сети, безопаснее слушать не все интерфейсы, а конкретный адрес, например http_port 192.168.10.5:3128.

  4. Проверьте конфигурацию на синтаксис.

    sudo squid -k parse

    Это обязательная привычка. Любую правку в squid.conf лучше сначала проверять этой командой, а уже потом перезапускать сервис.

  5. Включите и запустите Squid.

    sudo systemctl enable --now squid
    sudo systemctl status squid --no-pager

    Если сервис не стартовал, первым делом смотрите /var/log/squid/cache.log. Там обычно видны ошибки синтаксиса, проблемы с портом или путями.

  6. Откройте порт 3128/tcp в файрволе.

    # UFW
    sudo ufw allow 3128/tcp
    
    # firewalld
    sudo firewall-cmd --permanent --add-port=3128/tcp
    sudo firewall-cmd --reload

    Если вы используете нестандартный порт на системах с SELinux, может потребоваться отдельная настройка контекста порта. На практике порт 3128 вызывает меньше всего сюрпризов.

  7. Проверьте, что сервис действительно слушает нужный порт.

    sudo ss -ltnp | grep 3128

    Если команда ничего не показывает, проблема обычно в том, что сервис не запущен, не применился конфиг или порт уже занят другим процессом.

  8. С клиентской машины выполните тестовый запрос через прокси.

    curl -x http://SERVER_IP:3128 -I http://<тестовый_ресурс>

    Для HTTPS в логе Squid часто появляются записи вида TCP_TUNNEL/200. Если запросы не проходят, параллельно смотрите systemctl status squid и /var/log/squid/access.log.

Что делает этот конфиг

http_port 3128 открывает стандартный порт Squid. Строки acl localnet и http_access allow localnet определяют, кто может пользоваться прокси. Правило http_access deny all в конце закрывает доступ всем остальным.

Блок с Safe_ports, SSL_ports и CONNECT нужен, чтобы ограничить допустимые порты и нормально обрабатывать HTTPS через метод CONNECT. Строка cache deny all отключает кэширование — для простого forward proxy это обычно удобнее и понятнее в поддержке.

Как ограничить доступ нескольким адресам или сетям

Если клиентов несколько, не обязательно загонять их в одну подсеть. В Squid можно добавить несколько ACL и разрешить доступ только им.

acl office src 203.0.113.10/32
acl parser src 203.0.113.20/32
acl qa_net src 10.20.30.0/24

http_access allow office
http_access allow parser
http_access allow qa_net
http_access deny all

Порядок правил критичен. Squid читает http_access сверху вниз, поэтому разрешающие строки должны стоять до финального deny all.

Если нужен доступ по логину и паролю

ACL по IP удобны для офиса или серверов с фиксированными адресами. Если клиенты подключаются из разных мест или IP меняются, проще включить аутентификацию. Самый частый вариант — Basic auth с файлом паролей.

Базовая схема с Basic auth

  1. Установите утилиту для создания файла паролей.

    # Debian / Ubuntu
    sudo apt install apache2-utils
    
    # RHEL / AlmaLinux / Rocky
    sudo dnf install httpd-tools
  2. Создайте файл пользователей.

    sudo htpasswd -c /etc/squid/passwd analyst

    Ключ -c создает файл. Для добавления следующих пользователей используйте команду уже без этого ключа, чтобы не затереть существующих.

  3. Найдите путь к модулю basic_ncsa_auth.

    sudo dpkg -L squid | grep basic_ncsa_auth || sudo rpm -ql squid | grep basic_ncsa_auth

    На Debian-подобных системах это часто путь внутри /usr/lib/squid/, на RHEL-подобных — внутри /usr/lib64/squid/. Универсально зашивать один путь в инструкцию не стоит, его лучше проверить на своей системе.

  4. Добавьте в squid.conf строки аутентификации и обновите правила доступа.

    auth_param basic program /путь/к/basic_ncsa_auth /etc/squid/passwd
    auth_param basic realm Squid proxy
    acl authenticated proxy_auth REQUIRED
    
    http_access allow localhost
    http_access allow authenticated
    http_access deny all

    Если хотите, можно совместить авторизацию и ACL по IP, например разрешать доступ только авторизованным клиентам из конкретной сети.

  5. Проверьте конфиг и перечитайте сервис.

    sudo squid -k parse
    sudo systemctl reload squid

Нюанс безопасности: Basic auth передает учетные данные в кодировке base64, а не в виде криптографической защиты. Для доверенной внутренней сети это часто приемлемо, но выносить такой прокси в недоверенную среду без дополнительной защиты канала — плохая идея.

Как проверить, что прокси установлен правильно

Один успешный запрос через curl — это только первый тест. Для рабочей эксплуатации лучше пройти короткий чек-лист.

  • Запросы с разрешенного IP проходят без 403 и пишутся в access.log.
  • Запросы с неразрешенного IP получают отказ, а не обслуживаются прокси.
  • HTTPS работает через CONNECT без ошибок по порту 443.
  • Порт 3128 виден только тем сетям, которым он реально нужен.
  • Внешние сервисы видят IP самого прокси-сервера, а не клиентской машины.
  • После перезагрузки сервера сервис поднимается автоматически.

Отдельно учитывайте, что системная проверка не гарантирует совместимость со всеми приложениями. Одни программы берут настройки прокси из системных переменных, другие — только из собственных параметров, третьи вообще не умеют работать через HTTP-прокси.

Типичные ошибки и как их диагностировать

Симптом Частая причина Что проверить
403 Forbidden Неправильная ACL или порядок правил Подсеть в acl localnet, порядок строк http_access, наличие deny all в конце
Connection refused или timeout Сервис не запущен, порт закрыт локально или в облаке systemctl status squid, ss -ltnp | grep 3128, локальный файрвол, security group
503 Service Unavailable Проблемы с DNS или исходящим подключением самого сервера Работает ли у сервера обычный выход в сеть без прокси, что пишет cache.log
HTTP работает, HTTPS нет Сломаны правила CONNECT или закрыт 443 Есть ли acl SSL_ports port 443 и http_access deny CONNECT !SSL_ports
407 Proxy Authentication Required Включена авторизация, но клиент не передает логин и пароль Настройки приложения, правильность пароля, порядок правил http_access

Еще один частый случай — сервер слушает прокси только на 127.0.0.1, а вы пытаетесь подключаться снаружи. Это удобно для локальных сценариев, но не подойдет для клиентов в сети. Проверяйте, какой адрес указан в http_port.

Ограничения и вопросы безопасности

Squid — это HTTP/HTTPS-прокси прикладного уровня. Он не подменяет собой маршрутизацию всего хоста и не делает из Linux универсальный сетевой шлюз для любого трафика.

  • Через прокси пойдет только трафик тех приложений, которые действительно настроены на его использование.
  • Внешние сайты увидят IP Linux-сервера, а не «любой нужный» тип сети.
  • При работе с HTTPS прокси обычно видит адрес назначения, порт, время и объем трафика, но не содержание страницы, если не используется отдельная схема TLS-перехвата.
  • Логи Squid могут содержать чувствительные служебные данные: клиентские IP, целевые хосты, коды ответов и время запросов.
  • Каждый лишний сетевой хоп добавляет задержку, а итоговая скорость зависит от канала, нагрузки и самого сервера.

Если задача — просто дать браузеру или парсеру отдельный IP, своего прокси часто хватает. Но если нужны ротация IP, определенный тип сети, география оператора или стабильная работа на большом пуле адресов, самодельный Squid на одном VPS быстро упирается в ограничения архитектуры.

Если вам не нужно поднимать сервер, а нужно подключить Linux к готовому прокси

Это соседняя задача, но ее часто ищут тем же запросом. В таком случае вы не ставите Squid, а указываете системе или приложению параметры уже существующего прокси.

export http_proxy=http://LOGIN:PASSWORD@HOST:PORT
export https_proxy=http://LOGIN:PASSWORD@HOST:PORT
export no_proxy=localhost,127.0.0.1,.local

Такой способ обычно влияет только на текущую shell-сессию и на те программы, которые читают эти переменные окружения. Это не «проксирует весь Linux целиком» и не заменяет настройку отдельных приложений.

Если в строке подключения есть логин и пароль, помните о shell history и правах на файлы окружения. Для постоянной конфигурации лучше использовать аккуратную схему хранения секретов, а не оставлять учетные данные в истории команд.

Что в итоге

Установить прокси-сервер на Linux проще всего через Squid: поставить пакет, задать http_port, ограничить доступ ACL, проверить конфиг командой squid -k parse, открыть порт и протестировать соединение через curl. Для внутренней сети этого часто достаточно уже за 15–20 минут.

Главное — не путать собственный HTTP/HTTPS-прокси с универсальным сетевым шлюзом и не ждать от VPS того, что дают мобильные, резидентские или ротационные прокси. В большинстве рабочих сценариев проблем не в самой установке, а в двух вещах: неверный список разрешенных IP и слишком широкий доступ к порту.

Частые вопросы по теме

Чем отличается установка прокси-сервера от настройки прокси в Linux?

Установка прокси-сервера означает, что ваш Linux сам принимает клиентские подключения и пересылает их дальше. Настройка прокси в Linux — обратная задача: система или приложение используют уже готовый внешний прокси. В первом случае вы администрируете сервис, порт, ACL и логи. Во втором — просто прописываете адрес, порт и авторизацию.

Какой прокси обычно ставят на Linux?

Для HTTP и HTTPS чаще всего ставят Squid, потому что он давно используется, нормально работает с ACL, логами и CONNECT для HTTPS. Если задаче нужен именно сокетный прокси для разных TCP-сценариев, а не HTTP-модель, обычно смотрят в сторону SOCKS5-решений. Выбор зависит не от моды, а от протокола нужного приложения.

Будет ли весь трафик сервера идти через установленный прокси?

Нет. Сам по себе Squid не перенаправляет автоматически весь трафик Linux через себя. Через него идут только те приложения и клиенты, которые явно настроены использовать этот прокси. Это важное ограничение: браузер может работать через Squid, а системные обновления или отдельный агент мониторинга — напрямую, если их не настроили отдельно.

Можно ли использовать такой сервер для SEO-мониторинга и рекламной аналитики?

Да, если задаче подходит IP сервера и нет требования к мобильной или резидентской сети. Для проверки собственных сайтов, умеренного мониторинга выдачи, тестирования лендингов и сбора открытых данных своего Squid часто хватает. Но для чувствительных сценариев, где важны тип сети, ротация адресов и география, одного VPS обычно недостаточно.

Почему после установки прокси сайты все равно видят дата-центровый IP?

Потому что Squid не создает новый тип сети, а лишь пересылает трафик через тот хост, на котором запущен. Если сервер стоит в дата-центре, наружу будет виден именно дата-центровый IP. Прокси-сервер меняет точку выхода в сеть, но не меняет природу самой сети, из которой этот выход выполняется.

Что делать, если через curl все работает, а в браузере или приложении нет?

Сначала проверьте, поддерживает ли конкретная программа HTTP-прокси и умеет ли она работать с авторизацией. Затем сравните адрес, порт, логин и пароль, а также наличие поддержки HTTPS через CONNECT. На практике curl часто проходит первым, потому что его поведение прозрачно, а графические приложения могут использовать свои собственные настройки сети.