Пересборка Squid 2.6 для Debian с 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.
Проверка и отладка
- Проверьте, что бинарник Squid обновлён и имеет ожидаемый номер версии:
squid -v- Убедитесь, что опция 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 - Перезапустите 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: http://www.squid-cache.org/
- Debian: http://www.debian.org/
Итого
Пересборка пакета Squid 2.6 с опцией –enable-follow-x-forwarded-for даёт возможность учитывать X-Forwarded-For в логах и для ACL. Процесс включает установку инструментов сборки, изменение debian/rules, сборку пакета и установку новых .deb. Тестируйте изменения в контролируемой среде и соблюдайте меры безопасности при доверии к заголовкам от внешних источников.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента