Ротація проксі-IP без VPN: що бачить вихід
Змінюйте виходи проксі без VPN: що може прочитати HTTP-проксі, як липкі сесії запобігають зламаному стану і який вихід ви зможете захистити в політиці.
Ротація проксі та VPN змінюють вашу публічну адресу на різних рівнях, і ця різниця визначає, що витікає. VPN переносить кожен пакет у тунель, тому адреса джерела, яку бачить ціль, — це кінцева точка тунелю. Проксі стоїть вище мережевого рівня: з виходу видно лише ті запити, які ви надсилаєте через нього, а все інше на машині зберігає справжню адресу. Якщо правильно вибудувати цей поділ, ротація перетворюється з галочки на проєктне рішення.
Звідки насправді береться публічна адреса
Адреса, яку бачить ціль, — це та, звідки ваш трафік вийшов востаннє, а в домашньому підключенні це адреса провайдера на вашому маршрутизаторі, а не щось, чим володіє машина. Перезавантаження маршрутизатора може повернути ту саму оренду, а зміна його MAC-адреси іноді створює нову, але жодне з них не дає вам вибору країни. VPN підміняє адресу джерела на рівні IP, тому кожен пакет з машини, включно з DNS і фоновими оновленнями, виходить із кінцевої точки тунелю. Проксі працює на рівень вище: він приймає запит, відкриває власне з'єднання з ціллю, і лише цей запит з'являється з виходу. Усе інше на машині далі використовує справжню адресу.
Цей поділ пояснює більшість сюрпризів. Розширення браузера, скероване на проксі, змінює лише те, що надсилає браузер, і нічого більше, тому другий застосунок на тому самому хості все ще видає початкову адресу. Системний VPN має протилежний режим відмови: він покриває трафік, який ви хотіли залишити локальним, і закривається лише якщо клієнт так налаштований. Вибір між ними — це насправді вибір того, який трафік має рухатися.
Далі ротація застосовується до того рівня, який ви обрали. З проксі ротація означає, що наступний запит використовує інший вихід. З VPN це означає знести й заново збудувати тунель, що повільніше і проявляється як помітне перепідключення.
Що HTTP-проксі може прочитати, а що ні
За звичайного HTTP проксі бачить абсолютний URI в рядку запиту, кожен заголовок і тіло. Він може все це записати й переписати будь-яку частину, тому безкоштовний проксі, який вставляє скрипт у відповіді, робить рівно те, що дозволяє протокол. Автентифікація використовує Proxy-Authorization, а відсутні або хибні облікові дані дають 407 Proxy Authentication Required замість помилки з'єднання.
За HTTPS клієнт надсилає CONNECT host:port і проксі відкриває сирий тунель, після чого бачить зашифровані байти. Він усе ще дізнається ім'я хоста з рядка CONNECT і зазвичай із поля SNI в TLS-рукостисканні, тому журналювання на рівні імені хоста зберігається, навіть якщо корисне навантаження — ні. Щоб прочитати навантаження, треба завершити TLS сертифікатом, якому клієнт довіряє, а це інший продукт з іншим ризиком. А специфікація семантики HTTP визначає CONNECT як запит тунелю, і це правильна розумова модель того, що вихід може й чого не може бачити.
curl -v -x http://proxy.example.net:8080 https://example.com 2>&1 | grep -E 'CONNECT|Proxy-'
Докладний вивід показує рядок CONNECT до будь-якого трафіку TLS, і саме в цей момент проксі дізнається ваш пункт призначення. Проксі, який відповідає 407, так і не відкрив тунель, тому повтор із іншими налаштуваннями TLS не допоможе.
Гранулярність ротації вирішує, що зламається
Ротація на кожен запит — це налаштування, яке виглядає найбезпечнішим і ламає найбільше. Файли cookie, CSRF-токени й серверні сесії прив'язані до ідентичності, а ідентичність, яка змінюється між входом і наступним викликом, для цілі виглядає як викрадення сесії. Багато провайдерів пропонують липку сесію, кодуючи її в імені користувача проксі, тому вихід залишається фіксованим на вибране вікно.
Обирайте гранулярність за завданням, а не за замовчуванням провайдера. Сканер, який забирає незалежні сторінки, може ротуватися на кожен запит, а платіжному потоку або автентифікованому API треба утримувати один вихід на весь потік. Два виклики нижче показують липке ім'я користувача й звичайну ротувальну кінцеву точку, а socks5h схема розв'язує імена на проксі, а не локально.
curl -sS -x http://user-session-a1b2:[email protected]:8080 https://ifconfig.me
curl -sS -x socks5h://127.0.0.1:1080 https://ifconfig.me
Локальний DNS — це тихий витік. Якщо клієнт розв'язує ім'я до підключення, резолвер усе одно дізнається про кожен хост, який ви відвідуєте, навіть якщо HTTP-запит виходить деінде. А socks5h форма й розв'язання на боці проксі уникають цього, і їх використання нічого не коштує.
Що ціль класифікує крім адреси
Репутація адреси — один із кількох входів. Цілі поєднують ASN та його позначку дата-центр або житловий, TLS-відбиток клієнта, налаштування HTTP/2, порядок заголовків, частоту запитів і форму навігації. Житловий вихід під керуванням браузера без інтерфейсу може провалитися там, де вихід із дата-центру під керуванням справжньої сесії проходить.
Тип виходу визначає, що ви можете чесно стверджувати про трафік, і кожен несе свою ціну.
| Exit type | What the target sees | Main cost |
|---|---|---|
| Datacenter proxy | Hosting ASN, cheap, often pre-blocked | Low reputation, easy to detect |
| Residential network | A consumer ISP address belonging to someone else | Consent and terms-of-service exposure |
| Mobile carrier | A carrier NAT address shared by many subscribers | Price, plus shared blame for abuse |
| Your own cloud egress | An address you are accountable for | Recognisable, but defensible |
Спільний вихід не є нейтральним. Усе інше, що працює з цієї адреси, потрапляє до того самого кошика репутації, а адреса, яку інші орендарі вже спалили, провалюється раніше, ніж буде прочитано ваш перший запит.
Виберіть вихід, який ви зможете описати в політиці
Корисне питання не в тому, як приховати адресу, а в тому, хто відповідає за трафік, що з неї виходить. Ваш власний хмарний вихід на завдання, підрядник із договором про обробку даних і опублікованим терміном зберігання та самостійно розміщений VPN з однією ідентичністю на завдання — усе це описується одним реченням. Безкоштовний список — ні, бо його оператор не має перед вами жодних зобов'язань і має всі стимули вести журнали.
Тримайте свої обмеження швидкості нижче того, що терпить ціль, і збирайте лише ті поля, які потрібні завданню, щоб помилка залишалася малою. Швидша ротація, щоб утекти від блокування, зазвичай підвищує частоту запитів, яка її спричинила.
Запишіть вибраний вихід, його вікно ротації та його власника у конфігурацію завдання перед першим запуском. Коли прийде блокування, саме ця нотатка скаже вам, міняти вихід чи міняти поведінку.