У нас есть прокси-сервер squid, который прослушивает порт по умолчанию (3128): на eht0 (192.x.x.x).
У него есть еще один интерфейс eth1 (10.x.x.x), используемый для подключения к внешнему миру. Он выполняет качественную фильтрацию контента с помощью squidguard.
Но теперь мы хотим, чтобы некоторые хосты в сети обходили squid. предоставление полного доступа нескольким людям.
Я думаю о некоторых вещах, использующих iptables: любой пакет с этого конкретного хоста (для которого должен быть передан прокси-сервер), попадающий в eth0 на порт 3128 прокси, должен быть перенаправлен на eth1 и должен иметь доступ ко всему.
Это сработает? Если да, пожалуйста, помогите мне с правилами?
Я знаю, что это можно сделать с помощью squidgaurd, но хочу сделать это только с помощью iptables.
Обход в прозрачном режиме Squid возможен с помощью iptables с правилом диапазона.
#NAT:
iptables --table nat --append POSTROUTING --out-interface eth1 -j MASQUERADE
iptables --append FORWARD --in-interface eth0 -j ACCEPT
#Bypass range of ip:
iptables -t nat -A PREROUTING -i eth0 -m iprange ! --src-range 192.168.3.39-192.168.3.44 -p tcp --dport 80 -j DNAT --to 192.168.3.1:8028
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8028
Это не сработает, потому что HTTP-чат встроен в сеанс клиент-прокси.
Однако вы можете настроить прокси-сервер как прозрачный и установить правило перенаправления iptables по своему усмотрению.
Вы не сможете добиться этого, если не используете прозрачный прокси, а это не так. С явно настроенным прокси iptables сможет видеть только диалог между клиентским хостом и прокси-сервером squid. Это сделало бы манипулирование трафиком невозможным, потому что iptables не знал бы, на какой веб-сайт / IP-адрес вы пытаетесь попасть.
Однако вы можете сделать это довольно легко с помощью прозрачного прокси. То есть iptables перенаправляет весь трафик www на прокси, если он не соответствует определенным критериям.
Если использование вашего прокси в прозрачном режиме является вариантом для вас, вы можете достичь своей цели, следуя приведенному ниже руководству, но изменив этап предварительной маршрутизации в iptables, чтобы иметь исключения чуть выше перенаправления прокси. Вот так:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -s $PROXY_BYPASS_HOST -j RETURN
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port $SQUID-SERVER:$SQUID_PORT