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