X-Forwarded-For— це поле заголовка HTTP, яке використовується для ідентифікації вихідної IP-адреси клієнта, який підключається до вебсервера через HTTP проксі або балансувальник навантаження.

Заголовок HTTP-запиту X-Forwarded-For був введений розробниками кешуючого проксі сервера Squid.X-Forwarded-For також є заголовком електронної пошти, який вказує на те, що повідомлення електронної пошти було перенаправлено[en] з одного або кількох інших облікових записів (ймовірно, автоматично).[1]

Без використання X-Forwarded-For або іншої подібної техніки будь-яке з’єднання через проксі-сервер розкривало б лише вихідну IP-адресу проксі-сервера, фактично перетворюючи проксі-сервер на сервіс анонімізації, таким чином, виявляти та запобігати зловживанням доступу значно складніше, ніж якби вихідна IP-адреса була доступною. Корисність X-Forwarded-For залежить від того, що проксі-сервер правдиво повідомляє про вихідну IP-адресу хоста; з цієї причини для ефективного використання X-Forwarded-For потрібно знати, які проксі-сервери є надійними, наприклад, шукати їх у білому списку серверів, адміністраторам яких можна довіряти.

Формат

ред.

Загальний формат поля такий:[2]

X-Forwarded-For: client, proxy1, proxy2

де значення — це список IP-адрес, розділених комами+пробілом, крайня ліва — вихідний клієнт, а кожен наступний проксі-сервер, який передав запит, додає IP-адресу, з якої він отримав запит. У цьому прикладі запит пройшов через proxy1, proxy2, а потім через proxy3 (не показано в заголовку). proxy3 відображається як віддалена адреса запиту.

Приклади:[3]

X-Forwarded-For: 203.0.113.195, 70.41.3.18, 150.172.238.178
X-Forwarded-For: 203.0.113.195
X-Forwarded-For: 2001:db8:85a3:8d3:1319:8a2e:370:7348

Оскільки поле X-Forwarded-For легко підробити, цю інформацію слід використовувати обережно. Крайня права IP-адреса – це завжди IP-адреса, яка підключається до останнього проксі-сервера, що означає, що це найнадійніше джерело інформації. Дані X-Forwarded-For можна використовувати в сценарії прямого або зворотного проксі-сервера.

Простого реєстрації поля X-Forwarded-For не завжди достатньо, оскільки остання IP-адреса проксі-сервера в ланцюжку не міститься в полі X-Forwarded-For, вона знаходиться в фактичному заголовку IP. Для повноти вебсервер повинен реєструвати І IP-адресу джерела запиту, і інформацію поля X-Forwarded-For.

Проксі-сервери та механізми кешування

ред.

Поле X-Forwarded-For підтримується більшістю проксі-серверів.

Ведення журналу X-Forwarded-For підтримується багатьма вебсерверами, включаючи Apache. IIS також може використовувати модуль HTTP для фільтрації по цьому заголовку.[4][5][6]

Zscaler маскує заголовок X-Forwarded-For за допомогою Z-Forwarded-For, перш ніж додавати власний заголовок X-Forwarded-For, що ідентифікує вихідну IP-адресу клієнта. Це запобігає витоку внутрішніх IP-адрес із вузлів застосування Zscaler і надає стороннім постачальникам контенту справжню IP-адресу клієнта. Це призводить до несумісного з RFC запиту HTTP.

Альтернативи та варіації

ред.

RFC 7239 стандартизує заголовок HTTP Forwarded з аналогічним призначенням, але з більшими можливостями в порівнянні з заголовком HTTP X-Forwarded-For.[7] Приклад синтаксису заголовка Forwarded:

Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43

HAProxy визначає протокол PROXY, який може передавати IP-адресу вихідного клієнта без використання заголовка X-Forwarded-For або Forwarded.[8] Цей протокол можна використовувати для кількох транспортних протоколів і він не вимагає перевірки внутрішнього протоколу, тому він не обмежується HTTP.

Див. також

ред.

Примітки

ред.
  1. {title}. Архів оригіналу за 20 вересня 2014. Процитовано 5 травня 2014.
  2. squid : follow_x_forwarded_for configuration directive. Squid-cache.org. Архів оригіналу за 22 жовтня 2017. Процитовано 12 листопада 2017.
  3. X-Forwarded-For. MDN Web Docs (англ.). Архів оригіналу за 8 березня 2022. Процитовано 6 листопада 2020.
  4. Winfrasoft XFF for IIS [Архівовано 10 лютого 2011 у Wayback Machine.]. Winfrasoft.com
  5. IIS Advanced Logging [Архівовано 27 травня 2021 у Wayback Machine.]. Iis.net (2009-08-10). Retrieved on 2013-06-05.
  6. X-Forwarded-For HTTP Module For IIS7, Source Included! by Joe Pruitt [Архівовано 2012-01-06 у Wayback Machine.] Devcentral.f5.com. (2013-07-05).
  7. Petersson, A; Nilsson, M (June 2014). Forwarded HTTP Extension. IETF. doi:10.17487/RFC7239. RFC 7239. Процитовано 20 лютого 2020.
  8. Willy Tarreau: The PROXY protocol [Архівовано 4 червня 2014 у Wayback Machine.]. haproxy.1wt.eu. Retrieved on 2012-12-24.

Посилання

ред.