Меню

Настройка squid для прозрачного прокси freebsd



Squid на практике. Прозрачный прокси Squid используя IPFW на FreeBSD

О чем этот текст ?

Данный материал позволит тебе сделать прозрачный прокси. Прозрачность заключается в том, что для выхода в Интернет, на стороне клиента не надо ничего настраивать. Он будет пользоваться Интернетом, так как будто работает напрямую. Минус здесь в том, что невозможно будет организовать авторизацию по имени, плюс в том, что ничего на стороне клиента делать не надо, а на 100-500 пользователях это ощутимая помощь техподдержке. Считать статистику можно по IP адресам. Закрепить за конкретной ПК, конкретный IP адрес это ведь не проблема?

Как это проделать используя IPTables мы уже писали. Теперь тот же трюк, но в связке с IPFW. Ведь линукс не всегда есть под рукой.

Прежде чем рваться в бой убедись, что ты обладаешь малейшими навыками работы с IPFW(хотя бы где лежат конфиги и какой из них править), а также понимаешь значение следующих тегов:

1. Настройка Squid

У тебя уже установлен Squid? Посмотри на строку ниже:

Она тебе о чем-то говорит? Ну хотя бы, ты помнишь, что включал поддержку IPFW при компиляции Squid? Если такого нет, то надо пересобрать Squid с этой опцией.

Как только сделаешь, открывай squid.conf и вставляй следующую строку:

http_port 3129 transparent

Она говорит Squid, что мы хотим сделать прозрачный прокси и перехватывать трафик.

В версии Squid старше 3.1, эта строка выглядит несколько иначе, чтобы не путаться:

http_port 3129 intercept

2. Настройка IPFW

Чтобы трафик заворачивать, необходимо добавить несколько важных строк в файл

Правило для IPFW дано шаблоном, поэтому при подстройке под себя замени два параметра.

IFACE — сетевой интерфейс откуда будут приходить запросы пользователей.

SQUIDIP — IP адрес на котором Squid будет слушать перехваченные запросы пользователей (может быть петля 127.0.0.1)

IPFW=/sbin/ipfw
$ -f flush
$ add 60000 permit ip from any to any
$ add 100 fwd SQUIDIP,3128 tcp from any to any 80 recv IFACE

Готово. Перезапускай Squid и у тебя начинает работать прозрачный прокси. Скорость работы Интернета у пользователей повысится прилично. Готовь место под медали от благодарных пользователей и техподдержки.

Источник

Настройка squid для прозрачного прокси freebsd

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

В squid.conf надо записать просто
http_port 127.0.0.1:3128 transparent

  • 3.14 , Touch ( ? ), 13:30, 08/12/2007 [^] [^^] [^^^] [ответить]
  • + / –
    именно, в новых версиях так и нужно делать
  • 2.11 , Аноним ( — ), 10:49, 05/12/2007 [^] [^^] [^^^] [ответить]
  • + / –
    да не хочу я его кэшировать:)
    я хочу чтобы у пользователей автоматом работало без прописывания
    у каждого настроек прокси сервера
    чтобы к каждому юзеру который вдруг решил зайти например на gmail
  • 3.13 , кино ( ? ), 12:24, 07/12/2007 [^] [^^] [^^^] [ответить]
  • + / –
    >да не хочу я его кэшировать:)
    >я хочу чтобы у пользователей автоматом работало без прописывания
    >у каждого настроек прокси сервера
    >чтобы к каждому юзеру который вдруг решил зайти например на gmail

    именно туда (гуглямыйл) врядли прозрачная прокся корректно отрабатывает все запросы по 443 порту

    3.18 , PavelR ( ?? ), 07:28, 18/12/2007 [^] [^^] [^^^] [ответить] + / –
    >да не хочу я его кэшировать:)
    >я хочу чтобы у пользователей автоматом работало без прописывания
    >у каждого настроек прокси сервера
    >чтобы к каждому юзеру который вдруг решил зайти например на gmail

    Ну так раздай всем настройки браузера через DHCP/WINS/Domain Policy/Logon Script/
    или как там, через http://wpad/wpad.dat/ через такой вариант тоже можно..

    1.12 , sf. ( ? ), 11:56, 07/12/2007 [ответить] [﹢﹢﹢] [ · · · ] + / –
    А что такое Прозрачное проксирование?
    1.16 , digger ( ?? ), 09:45, 12/12/2007 [ответить] [﹢﹢﹢] [ · · · ] + / –
    Это когда клиент не видит, что ходит через прокси.
    1.17 , WAG ( ? ), 14:18, 12/12/2007 [ответить] [﹢﹢﹢] [ · · · ] + / –
    #!/bin/sh
    rm -R /var/squid.txt
    ps -U root|grep squid >/var/squid.txt
    if (cat /var/squid.txt |grep -q ‘squid -F’)
    then exit
    fi
    rm /usr/local/squid/var/logs/squid.pid
    /usr/local/squid/sbin/squid -F

    Примерно так. По вопросу отслеживания сквида.
    Можно повесить на крон раз в 3 мин.

    2.21 , sergei_ vasilyev ( ? ), 13:27, 19/12/2007 [^] [^^] [^^^] [ответить] + / –
    >#!/bin/sh
    >Примерно так. По вопросу отслеживания сквида.
    >Можно повесить на крон раз в 3 мин.

    костыли.
    во-первых, для отслеживания работы демонов и их повторного запуска есть monit.
    во-вторых, у хорошего админа squid просто так не падает.
    в-третьих, если он все-таки упал, то для этого были веские причины и банальный перезапуск не поможет.

    1.22, Peter ( ?? ), 20:30, 24/12/2007 [ответить] [﹢﹢﹢] [ · · · ] + / –
    Странно, у меня эксплорер лезет не через 80 порт, судя по всему. Форвард отрабатывает только если указать руками эксплореру прокси сервер, а порт поставить 80. На 3128 тоже соответственно работает. Куда копать?
    1.23, АвторСтатьи ( ? ), 10:45, 09/01/2008 [ответить] [﹢﹢﹢] [ · · · ] + / –
    Странно, с такой системой как я описал, есть некоторые траблы (я не специалист в никсах) как такие:
    все клиенты ходящие через прокси не могут попасть на countdown.ru, если отключить прокси все нормально.
    подскажите. плз.
    2.24, reticon ( ok ), 20:24, 11/05/2008 [^] [^^] [^^^] [ответить] + / –
    >Странно, с такой системой как я описал, есть некоторые траблы (я не
    >специалист в никсах) как такие:
    >все клиенты ходящие через прокси не могут попасть на countdown.ru, если отключить
    >прокси все нормально.
    >подскажите. плз.

    Если глянуть в access.log, то можно увидеть, например, следующее:
    11/May/2008:22:46:57 +0400 1 192.168.0.3 TCP_DENIED/400 1188 NONE error:unsupported-request-method — NONE/- text/html

    Смысл в том, что HTTPS-запросы не прокисруются, т.е. 443 порт заворачивать на прокси-сервер не нужно, пусть ходит через NAT. Например, у меня так:

    iptables -t nat -A PREROUTING -i eth1 -p tcp -m multiport —dport 80,8080,8008,8081 -j REDIRECT —to-port 3128

    iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.0.3 -p tcp -m multiport —dport 443 -j ACCEPT

    Источник

    Настройка Squid 3 в качестве прозрачного прокси в FreeBSD

    Настраиваем Squid в качестве прозрачного прокси-сервера для небольшой сети.

    Содержание

    Установка Squid

    Бинарный пакет собран с поддержкой прозрачного прокси с перенаправлением пакетов с помощью IPFW. Если требуется поддержка прозрачного прокси с брандмауэром отличным от IPFW, необходима сборка Squid из коллекции портов.

    Настройка Squid

    В FreeBSD 9.1 и более ранних версиях для работы прозрачного прокси с IPFW необходима настройка ядра. Начиная с FreeBSD 9.2, настройка ядра не требуется.

    Редактируем файл конфигурации:

    Если необходимо, задаем дополнительные параметры squid.conf:

    Отображение местного времени на страницах ошибок Squid

    Из коробки на страницах ошибок Squid отображает время по Гринвичу, для отображения местного времени необходимо скорректировать шаблоны ошибок. Параметр шаблона %T указывает мировое время, %t — местное.

    Копируем шаблоны ошибок в папку erros.local:

    Заменяем общемировое время (%T), на местное (%t):

    Задаем путь к измененным шаблонам ошибок в squid.conf:

    Запуск Squid

    Включаем Squid в rc.conf:

    Если при старте получаем предупреждение: » WARNING: Could not determine this machines public hostname. Please configure one or set ‘visible_hostname’ «. Задаем имя сервера параметром » visible_hostname » в конфиге.

    Проверяем, запущен ли демон:

    Проверяем, слушается ли порт:

    Проверяем системный лог на наличие сообщений от Squid:

    В случае успешного старта вывод будет примерно следующим:

    Протокол управления кэшем Squid

    Для получения статистики и оперативного управления кэшем, используем squidclient.

    Получить общую статистику сервера:

    Получить список доступных действий:

    Получить текущие параметры конфигурации:

    Для работы этой команды необходимо задать пароль в squid.conf:

    Управление кэшем возможно также из браузера. Если на сервере браузер не установлен, можно разрешить доступ с другого компьютера, для этого потребуется скорректировать параметры разрешений в squid.conf:

    Для управления кэшем используем URL следующего формата: http:// адрес :3128/squid-internal-mgr/ действие :

    • Статистика сервера — http://192.168.0.1:3128/squid-internal-mgr/info
    • Список доступных действий — http://192.168.0.1:3128/squid-internal-mgr/menu
    • Параметры конфигурации — http://admin: пароль @192.168.0.1:3128/squid-internal-mgr/config

    Настройка IPFW

    Далее предполагается, что IPFW настроен на примере, предложенном в руководстве FreeBSD.

    Проверяем, включена ли маршрутизация:

    Если необходимо, включаем NAT:

    Находим параметры IPFW:

    Запоминаем путь к скрипту с правилами.

    Редактируем список правил IPFW:

    Добавляем правила, выделенные красным, перед правилом, разрешающим доступ в интернет:

    Если менялись параметры rc.conf, включаем маршрутизацию и NAT. Будьте осторожны при настройке брандмауэра с внешнего IP, есть риск перекрыть себе доступ.

    Загружаем обновленный список правил:

    Инициируем веб-трафик с клиентского компьютера, проверяем лог доступа:

    В случае проблем проверяем, работает ли правило брандмауэра:

    Счетчик для правила перенаправления (fwd 127.0.0.1,3128) не должен быть нулевым.

    Если перенаправление работает, но сайты не открываются, проверяем cache.log на предмет ошибок:

    Ротация логов Squid

    Проверяем, поддерживается ли вашей системой newsyslog.conf.d

    Если в вашей системе отсутствует папка newsyslog.conf.d, редактируем newsyslog.conf:

    Если папка newsyslog.conf.d имеется, создаем папку с тем же именем в /usr/local/etc:

    Создаем файл правил ротации логов Squid:

    Задаем правила ротации логов:

    Выполняем ротацию ежедневно в полночь, сохраняем логи за последние 180 дней, раскомментируйте store.log, если он используется в вашей системе.

    Для корректной ротации логов в squid.conf необходимо добавить следующий параметр:

    Кэширование контента в Squid

    На современных высокоскоростных безлимитных каналах связи кэширование потеряло свою актуальность. Для ускорения работы YouTube и других сетей доставки контента, кэширование также неэффективно, поскольку контент раздается с различных серверов.

    По умолчанию дисковый кэш отключен, но в качестве кэша используется 256Мб оперативной памяти.

    Полностью запретить кэширование можно добавив следующий параметр в squid.conf:

    Если необходим дисковый кэш, добавляем в squid.conf следующие параметры:

    Если путь к кешу был изменен, создаем папку кэша, задаем права доступа:

    Создаем структуру кэша:

    Ограничения доступа к сайтам и контенту в Squid

    С переходом гигантов интернет индустрии на HTTPS ограничение доступа к сайтам на уровне прозрачного прокси больше не эффективно, поскольку HTTPS-трафик прозрачно проксировать не удастся. Для решения проблемы необходимо переходить к традиционному непрозрачному прокси, либо блокировать сайты на уровне DNS.

    Фильтрация по типу контента передаваемого по HTTPS-протоколу невозможна ни в прозрачном, ни в не прозрачном режиме.

    Для настройки ограничений, корректируем squid.conf следующим образом:

    Создаем папку для списков контроля доступа:

    Создаем необходимые списки, значения в списке разделяются новой строкой.

    Список IP-адресов с неограниченным доступом:

    Список сайтов, доступ к которым запрещен пользователям. Точка в начале адреса блокирует доступ ко всем адресам в заданном домене. Для массовой блокировки развлекательных ресурсов потребуется установка редиректора SquidGuard.

    Подмена заголовков в запросе клиента в Squid

    Дело было на домашнем Debian-сервере. Один из интернет радио порталов напрочь отказывался воспроизводиться на моем музыкальном центре, настойчиво предлагая закрыть плейер и открыть браузер. К сожалению, не смотря на наличие интернета, браузер в музыкальном центре конструкцией не был предусмотрен. Пришлось замаскировать центр под браузер путем подмены заголовка User-Agent с помощью Squid’а и прозрачного проксирования.

    Для подмены HTTP-заголовка, добавляем три опции в squid.conf:

    Поскольку это безобразие нагло нарушает HTTP-стандарт, требуется сборка Squid с параметром LAX_HTTP, он же —enable-http-violations.

    Перенос логов доступа Squid

    Логи доступа Squid могут занимать достаточно большой объем. На старых установках, где /var/log размещен на отдельном небольшом разделе, приходится перемещать лог доступа в /usr/local.

    Создаем папку для логов, задаем права доступа:

    Перемещаем логи в новое расположение:

    Удаляем папку /var/log/squid и создаем ссылку на /usr/local/squid/log:

    Решение проблем

    Предупреждение в cache.log:

    Баг Squid появился в версии 3.2, возникает на BSD-системах, из-за некорректного вызова функции setuid.

    В зависимости от параметров конфигурации Squid, в некоторых случаях помогает изменение параметра daemon на stdio при указании пути к access.log-у.

    Ошибка при запуске Squid:

    Начиная с версии 3.2 списки контроля доступа: manager, localhost и to_localhost являются предопределенными и создаются сквидом автоматически. При попытке их переопределения в файле конфигурации возникает ошибка. Данные параметры необходимо удалить из конфига.

    Ошибка в cache.log:

    Не задан порт для входящих подключений. Проверяем наличие в squid.conf директивы:

    В случае с прозрачным прокси, начиная с версии 3.2, необходимо задать две опции http_port. Одина для обычных запросов, вторая для перенаправляемого трафика:

    При запуске Squid получаем следующие предупреждения:

    В файле конфигурации обнаружена декларация acl all. В третьей версии список контроля доступа all является предопределенным и создается сквидом автоматически. При попытке его переопределения в файле конфигурации возникает ошибка. Удалите или переименуйте acl all.

    В cache.log постоянно пишутся предупреждения:

    При сборке не была включена поддержка прозрачного прокси для вашего брандмауэра. Переустановите Squid из коллекции портов с включением соответствующих параметров.

    Установка Squid из коллекции портов

    Обновляем коллекцию портов:

    Если коллекция портов используется впервые, получаем ее актуальную версию:

    Выполняем настройку порта:

    В параметрах сборки проверяем, что включена поддержка прозрачного проксирования для используемого брандмауэра и поддержка больших файлов:

    Если необходима модификация HTTP-заголовков (использование опций via, request_header_access), также включаем LAX_HTTP, для сборки Squid с параметром —enable-http-violations.

    Если параметры сборки были изменены, блокируем переустановку Squid пакетным менеджером:

    Пакетный менеджер и кастомизированный Squid

    При обновлении, пакетный менеджер обнаружит порт, собранный с нестандартными параметрами и предложит выполнить переустановку. После установки бинарного пакета прозрачный прокси перестанет работать.

    Частично проблему можно решить, заблокировав обновление Squid:

    Теперь пакетный менеджер не будет обновлять Squid, но вместе с ним блокируется обновление и всех его зависимостей. Что рано или поздно приведет к неразрешимому конфликту зависимостей, когда другим пакетам потребуются новые версии библиотек.

    Чтобы избежать проблем придется собирать Squid из портов при каждом обновлении, затрагивающем Squid или его зависимости. Процедура обновления получается следующая.

    Обновляем коллекцию портов:

    Снимаем блокировку обновления пакета:

    Обновляем установленные пакеты:

    Компилируем Squid, будут использованы параметры компиляции, заданные при первичной установке:

    Собираем и устанавливаем Squid:

    Блокируем переустановку Squid:

    Настройка ядра (FreeBSD 9.1 и ранее)

    Начиная с FreeBSD 9.2 настройка ядра не требуется, форвардинг пакетов отныне включен изначально, параметр IPFIREWALL_FORWARD удален из настроек ядра.

    Для работы в режиме прозрачного прокси в версиях системы до 9.2 необходимо обеспечить перенаправление веб-трафика прокси-серверу. Если в качестве брандмауэра используется IPFW, необходимо включить форвардинг пакетов пересобрав ядро с опцией IPFIREWALL_FORWARD.

    В ядре GENERIC опция перенаправления по умолчанию отключена. Чтобы проверить, включено ли перенаправление пакетов в вашей системе, выполняем команду:

    Получаем следующий результат:

    Если видим: «rule-based forwarding disabled«, форвардинг отключен, необходимо пересобрать ядро. Если сообщение отсутствует, значит IPFW не настроен. Если отсутствует параметр «rule-based forwarding», пересборка ядра не требуется.

    Получаем идентификатор ядра:

    Если ранее ядро не изменялось, в результате получаем:

    Создаем файл конфигурации ядра IPFORWARD:

    Переходим в папку с исходниками системы:

    Если файлы в /usr/src отсутствуют, необходимо установить исходники, соответствующие вашей версии системы.

    Собираем и устанавливаем ядро, используя созданный конфиг:

    Проверяем идентификатор ядра:

    В случае успешной установки ядра, в ответ получаем:

    Источник

    Читайте также:  Мастер для настройки оверлока
    Adblock
    detector