Как объясняется в заголовке, я пытаюсь настроить прозрачный прокси-сервер Squid на машине отдельно от маршрутизатора, а также отдельно от частной сети, которую я хочу фильтровать через прокси.
Контекст будет таким:
Router Machine работает под управлением CentOS 6.0 с примененными политиками iptables.
Интерфейс WAN - eth0. Интерфейс eth3 соединяет сеть, содержащую прокси-сервер, а eth2 - интерфейс частной сети.
Правила Iptables применяются для приема трафика в частных сетях.
Версия Squid - 3.5.2, работает на CentOS 7.0.
Кое-что важное: прокси-сервер отлично работает, если настроен вручную в браузере клиента и без прозрачного флага в файле squid.conf.
Проблемы начинают возникать, когда я пытаюсь сделать прокси прозрачным. Это то, что я уже пробовал: на машине маршрутизатора я применил следующее правило iptables:
$ iptables -t nat -I PREROUTING 1 -i eth2 -s private-ip -p tcp --dport 80 -j DNAT --to squid-ip: 3128
Сначала я подумал, что этого будет достаточно, поскольку он отлично работал при настройке вручную, и единственная разница теперь в том, что мне нужно перенаправить трафик на машину squid. Но все пошло не так, как я ожидал.
Выполнив несколько тестов с tcpdump на маршрутизаторе, я понял, что без прозрачного флага прокси-машина знает свой путь в Интернет и обратно к клиентской машине через маршрутизатор (privateIP> router> proxyServer> router> internet | и обратно | > маршрутизатор> прокси-сервер> маршрутизатор> частный IP).
Но с прозрачным флагом пакеты проходят только через маршрутизатор и прокси-сервер, а затем снова возвращаются на клиентский компьютер, полностью игнорируя файл squid.conf, блокирующий все, поэтому ни один пакет не покидает прокси-сервер для перехода в Интернет (privateIP> маршрутизатор> прокси-сервер> маршрутизатор> частный IP). Кажется, что прокси-сервер Squid не знает, что делать с входящим трафиком, поэтому он не может правильно обрабатывать петиции, которые настроены как прозрачные и не расположены на шлюзе.
Я думал, что мне нужно правило POSTROUTING для выполнения SNAT и изменения адреса источника, чтобы входящий интернет-трафик также проходил через прокси, но на самом деле ни один пакет не отправлялся в Интернет, поэтому теперь я застрял.
Возможно, есть что-то, что squid выполняет автоматически, когда он не в прозрачном режиме, что мне нужно настроить вручную, когда я установил его в прозрачный.
Любая помощь будет оценена.
Если есть прямой путь между прокси и клиентами или через другой маршрутизатор, вот что происходит
Шаги 1–5 повторяются несколько раз до тех пор, пока соединение не разорвется.
У меня эта установка (или близкая к ней) работает в настоящее время, но с некоторыми отличиями. Вместо CentOS я использую статический маршрут для перехвата трафика через порт 80 на мой шлюз pfSense и перенаправления его на другой сервер на базе pfSense, на котором запущен Squid. Разница с моей настройкой заключается в том, что когда pfSense Squid настроен на прозрачное проксирование, он прослушивает соединения на 80-м порту вместо обычного 3128. Вы можете запустить netstat и посмотреть, прослушивает ли ваш Squid порт 80, и попробовать перенаправить на это вместо этого.
Удачи.