Некоторое время назад потребовалось поднять прокси на нескольких адресах, для этого я использовал программу proxy из комплекта 3proxy:
proxy -iIP -eIP -l/dev/null -d -p3128
Увы, когда адресов становится чуть больше чем несколько, это начинает утомлять своей избыточностью и кучей процессов. Поэтому было решено заменить кучу этих proxy на старый добрый squid. Ставится он из репозитория дистрибутива без всяких заморочек, поэтому опишу только конфигурацию.
acl all src all http_access allow all http_port 3128 access_log none cache_store_log none maximum_object_size 0 KB minimum_object_size 0 KB no_cache deny all cache_dir null /tmp forwarded_for off
Отключаем какой-либо контроль за входящими соединениями (их я фильтрую в iptables/ipset), логи, кеширование. Затем добавляем контроль заголовков:
# Header control header_access Allow allow all header_access Authorization allow all header_access Cache-Control allow all header_access Content-Encoding allow all header_access Content-Length allow all header_access Content-Type allow all header_access Date allow all header_access Expires allow all header_access Host allow all header_access If-Modified-Since allow all header_access Last-Modified allow all header_access Location allow all header_access Pragma allow all header_access Accept allow all header_access Accept-Encoding allow all header_access Accept-Language allow all header_access Accept-Charset allow all header_access Content-Language allow all header_access Mime-Version allow all header_access Cookie allow all header_access Set_Cookie allow all header_access Retry-After allow all header_access Title allow all header_access Connection allow all header_access Proxy-Connection allow all header_access Proxy-Authorization allow all header_access Proxy-Authenticate allow all header_access WWW-Authenticate allow all header_access User-Agent allow all header_access All deny all
Теперь ничего кроме заголовков, у которых указано allow за прокси не уйдет. X-Forwarded-For тоже отключен. Далее добавляем «магию» для IP-адресов:
acl ip1 myip 10.0.0.1 tcp_outgoing_address 10.0.0.1 ip1 acl ip2 myip 10.0.0.2 tcp_outgoing_address 10.0.0.2 ip2 acl ip3 myip 10.0.0.3 tcp_outgoing_address 10.0.0.3 ip3
Все, теперь все запросы, пришедшие на какой-то адрес, прокси будет отправлять с этого же адреса, что и требовалось.