Меню Рубрики

Установка squid из исходников freebsd

Установка и настройка прокси сервера на Freebsd 10 (squid+sams2)

В связи с развитием доступа в интернет сейчас стали не так популярны прокси сервера, как раньше, тем не менее они до сих пор остаются востребованными. На мой взгляд, самой удобной связкой для прокси является squid + sams2, прежде всего за свое удобство администрирования. Остальные продукты со схожим функционалом выглядят гораздо хуже и менее удобно, а зачастую они старее и тоже не поддерживаются.

Введение

Я успешно разобрался с настройкой sams2 под CentOS 7 и решил проделать то же самое на Freebsd 10.2. Мне нравится эта система. Не могу аргументировать чем именно, просто нравится и все. С нее началось мое первое знакомство с unix системами и с тех пор я стараюсь не забывать о ней, хотя работаю в ней все меньше и меньше.

Sams популярная и в своем роде уникальная система управления конфигурацией squid, которая работает через свой демон и php панель управления. Аналогов по удобству и функционалу я не встречал. Есть что-то похожее, но еще более старое, например STC. Но мне она внешне вообще не нравится, тоже очень старая и давно не развивается.

Можно схожий функционал реализовать отдельными средствами. Например, настроить ту или иную авторизацию в squid, создать списки доступа, списки ресурсов, включить все это. Потом анализировать логи, например, с помощью SARG. По идее, получится то же самое, что и самс, но управлять неудобно, отчеты в SARG не такие красивые и наглядные. В общем, не то.

Так что будем разбираться и настраивать самую последнюю из выпущенных версий самс — sams 2.0 от 1 апреля 2014 года.

Подготовка системы и установка зависимостей

Если вы только знакомитесь с материалом и еще не подготовили свою систему, то рекомендую воспользоваться моей подробной инструкцией с видео по установке freebsd 10.2. Именно на ней я буду производить установку и настройку sams2.

После установки необходимо на всякий случай обновить freebsd до последней версии. Если вы это уже сделали, то рекомендую выполнить предварительную настройку системы, ну или хотя бы установите MC, с ним удобнее.

Теперь установим необходимые пакеты. Можно все собрать из портов, но я буду ставить готовые пакеты, просто потому что так быстрее. Это не принципиально, если вы привыкли собирать из портов, делайте это.

Нам понадобится web сервер для работы панели администрирования. Подробно этот вопрос я уже рассматривал отдельно в статье посвященной настройке web сервера. Можно подсмотреть там, как быстро установить apache + php + mysql + phpmyadmin. Здесь я просто приведу список команд, которые я использовал при установке. За всеми подробностями и комментариями прошу обращаться по приведенной ссылке.

Сервер, с которым будем работать:

Выполним установку mysql, ее использует самс для хранения данных:

Добавляем mysql_enable=»YES» в /etc/rc.conf и запускаем mysql:

Выполним начальную настройку mysql с помощью скрипта:

Устанавливаем web сервер apache, он нам нужен для работы панели администрирования:

Добавляем apache24_enable=»YES» в /etc/rc.conf и запускаем:

Устанавливаем все необходимое, связанное с php:

Этот шаг не обязательный, можно пропустить. Я просто привык использовать phpmyadmin в работе. С ним удобно. Устанавливаем phpmyadmin:

Редактируем конфиг apache, добавляем в самый конец для работы php скриптов и доступа к phpmyadmin:

Создаем файл настроек php.ini, скопировав дефолтный:

И устанавливаем там временную зону:

Если не установить, то в веб интерфейсе самса будут постоянно вылезать ошибки, связанные с временной зоной. После всех изменений перезапускаем apache:

Все, web сервер готов. Для теста можете зайти на http://ip-сервера/phpmyadmin/ и проверить, все ли в порядке. Если что-то не так, то разберитесь сначала с работой веб сервера, и только потом двигайтесь дальше.

Установка прокси сервера squid

Теперь установим сам прокси сервер squid:

Сейчас можно проверить работу прокси сервера squid. В дефолтной конфигурации он должен выпускать в интернет по ip, список которых есть в конфигурационном файле — /usr/local/etc/squid/squid.conf. Рекомендую на всякий случай это сделать, чтобы убедиться в корректности работы сквида.

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

Чтобы самс корректно добавлял свои изменения в файл конфигурации, в нем должны быть метки, начинающиеся с # TAG:. Раньше дефолтный конфиг сквида уже был с ними, но затем его существенно уменьшили в размере и метки из него исчезли. Нам нужно добавить их самим. Вот необходимый набор этих меток. Между ними обязательно должна быть пустая строка:

Установка и настройка sams2 в Freebsd

Переходим к самому главному — настройке sams2. Перед этим установим wget и unzip. Они нам нужны будут для скачивания и распаковки исходных текстов.

Читайте также:  Установка двух версий wine

Скачиваем исходники с github:

Извлекаем содержимое архива:

После этого устанавливаем необходимые для сборки пакеты autoconf, automake и libtool:

Переходим в папку sams2-master и начинаем сборку программы:

Скрипт должен отработать без ошибок и вывести информацию:

Если у вас так же, то все в порядке, продолжаем. Если какие-то ошибки, то надо разбираться. Обязательно должны быть указаны значения yes в пунктах Use MySQL API и Using pcre. Без первого ничего не заработает, так как хранить конфигурацию будет негде, без второго не будет работать редиректор.

Устанавливаем sams2 на freebsd сервер:

Установка не проходит, выскакивает ошибка:

Где-то в исходниках ошибка — добавлен лишний слеш в пути. Вместо того, чтобы разбираться, где ошибка, проще создать директорию data самим:

Запускаем установку снова. Теперь все должно пройти без ошибок.

Дальше нам нужно добавить web интерфейс sams2 в конфигурацию apache. Для этого в /usr/local/etc/apache24/httpd.conf добавляем в самый конец:

Перезапускаем apache для применения изменений:

Отредактируем файл настроек sams2. Он располагается по адресу /usr/local/etc/sams2.conf. Меняем только 2 параметра:

Указываем в них пользователя mysql root и его пароль. Теперь идем в браузер по адресу http://ip-сервера/sams2/setup.php Скорее всего вы увидите чистую белую страницу, либо вообще ошибку при загрузке. Если посмотреть при этом в лог веб сервера, то там будет следующее:

Это баг самса, его нужно исправить. Для этого открываем в редакторе файл /usr/local/share/sams2/lang/lang.EN и убираем пробелы в начале строк с 1100 по 1105, там есть лишние символы. Должно получиться вот так:

После редактирования обновляем страничку и начинаем настройку самса через web интерфейс. Выбираем кодировку Russian UTF-8. Нужна именно эта кодировка, так как мы ее же указали в свойствах алиаса в апаче. Если там этого не сделать, а здесь выбрать привычную кодировку 1251, то в интерфейсе будут проблемы с отображением текста. Я опытным путем выяснил, что именно в такой конфигурации все работает нормально.

Проверяем, чтобы все важные параметры были зеленые, на safe_mode не обращаем внимание.

Указываем root учетку от mysql и данные для вновь создаваемой базы данных и учетной записи sams:

Если все нормально, то должны увидеть следующую картинку:

После нажатия на Далее >> откроется окно для входа в панель администрирования самс.

Чтобы авторизоваться администратором, нужно снизу нажать на ссылку «Авторизация администратора SAMS» и ввести учетные данные по-умолчанию: пользователь admin, пароль qwerty. Открывается главная страница с системной информацией.

Теперь еще раз отредактируем конфигурационный файл sams.conf и введем туда данные от учетки sams, которую мы создали. Заодно поменяем еще несколько параметров, так как изначально там стоят не верные данные. Должно быть вот так:

Чтобы запускать sams2 нужно создать для него скрипт запуска и поместить в /usr/local/etc/rc.d/. Делаем это:

Сохраняем файл и делаем его исполняемым:

Добавляем samsd_enable=»YES» в rc.conf и запускаем sams2daemon:

Логинимся в веб интерфейс и настраиваем sams.

Сразу обращаю внимание на один нюанс. По-умолчанию в самс уже указан один временной диапазон Full day. Он включает в себя весь день, но при применении настроек squid, в его конфиге этот интервал почему-то обозначается как

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

Добавим теперь тестового пользователя с доступом по ip. Для этого идем в раздел Пользователи и жмем на кнопочку Добавить пользователя.

Заполняем необходимые поля и добавляем юзера.

Не забываем перезапустить демон squid через веб интерфейс самса. Для этого идите в раздел SQUID -> Proxy Server и снизу нажимайте на вторую иконку слева.

Синяя строка с текстом Команда на реконфигурирование Squid получена демоном означает, что команда на перезапуск нормально отработала.

В конфигурационном файле /usr/local/etc/squid/squid.conf должны добавиться следующие строки:

Теперь можно включать этому пользователю в настройках браузера proxy сервер и выходить в интернет. Через несколько минут его статистика посещений появится в панели управления.

Дальше каждый продолжает настройку по своим потребностям. Там все достаточно понятно и практически не отличается от настроек 1-й версии, описание которой достаточно много в интернете.

Заключение

Поле завершения установки и настройки sams2, а затем и реальной эксплуатации у меня ложилось двоякое впечатление. С одной стороны вроде работает, но как-то криво. В программе баги, в логи она во время работы постоянно сыпет сообщениями:

Хотя на работу это вроде как не влияет. В инет пускает, статистику считает. Я еще не настраивал редиректор и списки запрета доступа, но по отзывам, там тоже есть проблемы и работает все нестабильно. Начиная с версии 3.4 поменялся формат ответа редиректора и он стал несовместим с самсовским. Нужно править исходники и собирать с исправлениями. На CentOS я обошелся просто более старой версией squid, чтобы не разбираться с этой проблемой. Думаю, можно вообще без запретов обойтись, это сейчас не актуально из-за большого развития мобильных гаджетов и хорошего доступа в интернет с них. Но если вам это важно, имейте в виду.

Читайте также:  Установка катушки зажигания на мопеде

Несмотря на все проблемы, я не нашел замены, которая была бы такой же удобной и наглядной, как sams. Придется пока с ним дружить и находить общий язык. Надеюсь, что кто-нибудь возьмется за его развитие и поддержку.

источник

Настройка 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

Если при старте получаем предупреждение: » 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/squ >действие :

  • Статистика сервера — http://192.168.0.1:3128/squ >пароль @192.168.0.1:3128/squid-internal-mgr/config

Настройка IPFW

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

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

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

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

Редактируем список правил 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-протоколу невозможна ни в прозрачном, ни в не прозрачном режиме.

Читайте также:  Установка зажигания skoda felicia

Для настройки ограничений, корректируем 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-у.

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

Не задан порт для входящих подключений. Проверяем наличие в 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 отсутствуют, необходимо установить исходники, соответствующие вашей версии системы.

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

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

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

источник