IT blog - Blog Archive - Три способи швидко підняти forward proxy
Date January 24th, 2014 Author Vitaly Agapov

При зверненні на проксі браузер особливим чином формує запити. У випадку звичайного протоколу HTTP він просто додає обов'язковий заголовок Host:, а сам URL у запиті формує в абсолютному вигляді. В даному випадку принципової різниці з reverse proxy немає. Але при зверненні на HTTPS або будь-який нестандартний порт відбувається встановлення наскрізного тунелю з цільовим сервером за допомогою методу CONNECT, що надсилається на проксі. Проксі при цьому використовує заголовки цього запиту для встановлення з'єднання, але не може ні ловити сесійні SSL-ключі, ні тим більше дивитися трафік, що проходить.
Налаштування браузера для тестування
Для надсилання всього трафіку на проксі:
У тому ж Firefox цей файл можна підсунути в меню Правка -> Налаштування -> Додаткові -> З'єднання.
Apache Traffic Server
Після встановлення ATS (apt-get install trafficserver, якщо йдеться про Ubuntu/Debian) потрібно дозволити старт сервера init'ом, для чого в /etc/default/trafficserver треба прописати
Для включення forward proxy треба в /etc/trafficserver/records.config встановити значення:
ACL тут немає, але можна налаштувати ремапінг (у файлі remap.config) для переправлення навіть невирішених запитів на потрібний нам бекенд. Щоправда, він спрацьовує лише HTTP.
Apache2/mod_proxy
Apache може працювати як forward proxy при включенні модулів mod_proxy, mod_proxy_http і mod_proxy_connect. Базовий функціонал усередині віртуального хоста:
Зручних Squid-like ACL тут також немає, але працюватиме ремаппінг. Для http він працюватиме коректно, а https просто обмежувати доступ. Тобто функціональністькраще, ніж у ATS, і ми на півкроку ближче до досконалості.
Базовий конфіг squid.conf, що реалізує функції forward proxy із забороною звернення на сторонні сайти:
У Squid працюють різноманітні ACL, так що потрібну нам функціональність ми можемо побудувати прямо з коробки без будь-яких милиць у вигляді ремапінгу.
Щоправда, якщо ми таки захочемо зробити ремапінг урлів, то його можна зробити за допомогою зовнішньої програми та директиви
Сама програма (наприклад, redirect.sh) може виглядати приблизно так:
З HTTPS за традицією та зрозумілими причинами ремапінг не спрацює.