Гид по технологиям

Пересборка Squid 2.6 для Debian с X-Forwarded-For

• 5 min read • DevOps • Обновлено 23 Nov 2025
Пересобрать Squid 2.6 с X-Forwarded-For
Пересобрать Squid 2.6 с X-Forwarded-For

TL;DR

Коротко: пересоберите исходный пакет Squid 2.6 в Debian Etch и добавьте опцию –enable-follow-x-forwarded-for в debian/rules. Это позволит Squid учитывать заголовок X-Forwarded-For (полезно при реверс-прокси и балансировщиках), после чего пересобранный .deb можно установить стандартной командой dpkg.

Введение

Эта инструкция показывает, как пересобрать пакет Squid 2.6 в Debian Etch с включённой поддержкой заголовка X-Forwarded-For. По умолчанию в Debian Etch эта опция отключена. Поддержка X-Forwarded-For полезна, когда Squid работает как обратный прокси за балансировщиком нагрузки (например, HAProxy) — тогда в логах и для ACL можно видеть реальный IP клиента, а не IP балансировщика.

Краткое определение: X-Forwarded-For — HTTP-заголовок, в котором могут передаваться адреса клиентов через цепочку прокси. Самый правый адрес — последний прокси, самый левый — исходный клиент.

Важная заметка

Если вы используете современную версию Debian/Ubuntu, путь и инструменты сборки могут отличаться. Инструкция ориентирована на Debian Etch и пакет Squid 2.6.

Что делает X-Forwarded-For и настройки Squid

Из документации Squid (перевод, сокращённо):

Запросы могут проходить через цепочку прокси. Заголовок X-Forwarded-For будет содержать список IP-адресов, разделённых запятыми, где самый правый адрес — самый недавний. Если запрос приходит от источника, разрешённого конфигурацией, Squid может смотреть в X-Forwarded-For, чтобы узнать, откуда исходный хост получил запрос. В результате получается адрес “indirect client”, который можно использовать для ACL, delay pools и логов в зависимости от опций acl_uses_indirect_client, delay_pool_uses_indirect_client и log_uses_indirect_client.

Если фича включена, в squid.conf можно использовать следующие опции:

  • follow_x_forwarded_for
  • acl_uses_indirect_client
  • delay_pool_uses_indirect_client
  • log_uses_indirect_client

Подготовка (компиляторы и исходники)

Установите инструменты для сборки:

apt-get install devscripts build-essential fakeroot

Получите исходники пакета Squid и зависимости для сборки:

cd /usr/src
apt-get source squid
apt-get build-dep squid

Правка debian/rules и включение опции

Перейдите в папку с исходниками и откройте debian/rules:

cd squid-2.6.5/debian
vi rules

Найдите секцию конфигурации, которая начинается примерно так:

# Configure the package.
config.status:

        $(opt_ac_cv_func_setresuid) \
        ./configure \

и добавьте опцию –enable-follow-x-forwarded-for
в список параметров configure. В результате секция должна выглядеть так:

[...]
# Configure the package.
config.status:

        $(opt_ac_cv_func_setresuid) \
        ./configure \
        --prefix=/usr \
        --exec_prefix=/usr \
        --bindir=/usr/sbin --sbindir=/usr/sbin \
        --libexecdir=/usr/lib/squid \
        --sysconfdir=$(sysconfdir) \
        --localstatedir=/var/spool/squid \
        --datadir=/usr/share/squid \
        $(with_pthreads) \
        $(with_netfilter) \
        $(with_arp_acl) \
        $(with_epoll) \
        --enable-removal-policies=lru,heap \
        --enable-snmp \
        --enable-delay-pools \
        --enable-htcp \
        --enable-cache-digests \
        --enable-underscores \
        --enable-referer-log \
        --enable-useragent-log \
        --enable-auth="basic,digest,ntlm" \
        --enable-carp \
        --enable-follow-x-forwarded-for \
        --with-large-files \
        $(DEB_HOST_ARCH_CPU)-debian-$(DEB_HOST_ARCH_OS)
[...]

Обратите внимание: строки с обратной косой чертой (\) используются для продолжения команды configure на нескольких строках. Не убирайте их.

Пересборка пакета

Выйдите на уровень выше и начните сборку:

cd ..
./configure
debuild -us -uc -b

Когда сборка завершится, вернитесь в /usr/src и проверьте список файлов:

cd /usr/src
ls -l

Ожидаемый результат — появление новых .deb-файлов, например:

server1:/usr/src# ls -l
total 3332
drwxr-xr-x 15 root root    4096 2008-11-26 01:14 squid-2.6.5
-rw-r--r--  1 root src   273063 2008-11-26 00:41 squid_2.6.5-6etch4.diff.gz
-rw-r--r--  1 root src      432 2008-11-26 00:41 squid_2.6.5-6etch4.dsc
-rw-r--r--  1 root src   143884 2008-11-26 01:14 squid_2.6.5-6etch4_i386.build
-rw-r--r--  1 root src     1135 2008-11-26 01:14 squid_2.6.5-6etch4_i386.changes
-rw-r--r--  1 root src   655604 2008-11-26 01:14 squid_2.6.5-6etch4_i386.deb
-rw-r--r--  1 root src  1636886 2006-11-06 12:32 squid_2.6.5.orig.tar.gz
-rw-r--r--  1 root src   117120 2008-11-26 01:14 squid-cgi_2.6.5-6etch4_i386.deb
-rw-r--r--  1 root src    86132 2008-11-26 01:14 squidclient_2.6.5-6etch4_i386.deb
-rw-r--r--  1 root src   442218 2008-11-26 01:14 squid-common_2.6.5-6etch4_all.deb
server1:/usr/src#

Установка пересобранных пакетов

Установите основные пакеты Squid (подставьте свои имена файлов, если отличаются):

dpkg -i squid_2.6.5-6etch4_i386.deb squid-common_2.6.5-6etch4_all.deb

После установки Squid будет собран с поддержкой X-Forwarded-For.

Проверка и отладка

  1. Проверьте, что бинарник Squid обновлён и имеет ожидаемый номер версии:
squid -v
  1. Убедитесь, что опция follow_x_forwarded_for используется в конфигурации (squid.conf) и нужные опции для ACL/логов включены:
# пример в squid.conf
follow_x_forwarded_for allow all
log_uses_indirect_client on
acl from_lb src /32
http_access allow from_lb
  1. Перезапустите Squid и протестируйте запросы через балансировщик, проверив логи на наличие реальных IP клиентов.

Альтернативные подходы

  • Использовать балансировщик с поддержкой проброса реального IP на уровне L4 (например, режим transparent/PROXY protocol) — в этом случае заголовок X-Forwarded-For может не понадобиться.
  • На современных Debian/Ubuntu собрать пакет из актуальных исходников Squid (версия >2.6) — возможно, нужная поддержка уже включена или реализована иначе.
  • Использовать веб-сервер/прокси (nginx, Apache) как реверс-прокси с поддержкой X-Forwarded-For, а Squid — в другом слое топологии.

Когда это может не сработать

  • Если балансировщик переписывает или удаляет заголовок X-Forwarded-For.
  • Если цепочка прокси настроена ненадёжно и вы не доверяете источникам заголовка — это может привести к подделке IP.
  • Если вы используете версии Squid или Debian, где структура пакетов и скрипты сборки отличаются — пути и команды могут быть иными.

Риски и смягчения

Риск: подделка X-Forwarded-For любым ненадёжным прокси. Смягчение: включайте follow_x_forwarded_for и разрешайте следование только от доверенных источников (acl по IP балансировщиков).

Риск: несовместимость бинарного пакета с другими компонентами системы. Смягчение: тестируйте в staging, сохраняйте оригинальные .deb файлы и умейте откатиться.

Чек-лист для администратора

  • Сделал резервную копию текущих .deb-пакетов.
  • Установил devscripts, build-essential, fakeroot.
  • Получил исходники apt-get source squid и зависимости build-dep.
  • Внес –enable-follow-x-forwarded-for в debian/rules.
  • Собрал пакет с debuild и сохранил результаты.
  • Установил пересобранные пакеты и перезапустил Squid.
  • Проверил логи и соответствие ACL/логирования.

Критерии приёмки

  • Squid успешно запускается без ошибок.
  • Бинарный пакет соответствует ожидаемой версии и дате сборки.
  • В логах указаны реальные IP клиентов (а не IP балансировщика), когда запрос идёт через доверенный балансировщик.
  • Настройки follow_x_forwarded_for/acl_uses_indirect_client работают как ожидается.

Справочник по командам (шорт-лист)

  • Установка инструментов: apt-get install devscripts build-essential fakeroot
  • Получение исходников: apt-get source squid
  • Зависимости сборки: apt-get build-dep squid
  • Сборка пакета: debuild -us -uc -b
  • Установка .deb: dpkg -i <файл1.deb> <файл2.deb>

Краткий глоссарий

  • X-Forwarded-For — заголовок HTTP, содержащий цепочку IP-адресов клиентов/прокси.
  • acl_uses_indirect_client — настройка Squid, позволяющая использовать indirect client для ACL.
  • debuild — утилита из devscripts для сборки Debian-пакетов.

Ссылки

Итого

Пересборка пакета Squid 2.6 с опцией –enable-follow-x-forwarded-for даёт возможность учитывать X-Forwarded-For в логах и для ACL. Процесс включает установку инструментов сборки, изменение debian/rules, сборку пакета и установку новых .deb. Тестируйте изменения в контролируемой среде и соблюдайте меры безопасности при доверии к заголовкам от внешних источников.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро