Налаштування Squid 3 як прозорого проксі в FreeBSD - Proxy - Laquo; Unix, Linux – Laquo;

Налаштовуємо Squid як прозорий проксі-сервер для офісної мережі. Передбачається, що маршрутизація на сервері налаштована, і доступ до сайтів із внутрішньої мережі вже працює. Використовуємо проксі-сервер для розшифровки веб-трафіку, обмеження доступу до сайтів та фільтрації медіа-контенту.

Налаштування ядра

Для роботи в прозорому проксі необхідно забезпечити перенаправлення веб-трафіку проксі-серверу. Якщо в якості брандмауера використовується IPFW, необхідно увімкнути форвардинг пакетів, перебравши ядро ​​з опцією IPFIREWALL_FORWARD. У ядрі GENERIC параметр перенаправлення за замовчуванням вимкнено.

В ядрі GENERIC опція перенаправлення за замовчуванням відключена. Перевіряємо, чи перенаправлення пакетів передано командою:

Отримуємо наступний результат:

Якщо бачимо: "rule-based forwarding disabled ", форвардинг вимкнений, необхідно перезбирати ядро. Якщо повідомлення відсутнє, IPFW не налаштовано.

Отримуємо ідентифікатор ядра:

Якщо раніше ядро ​​не змінювалося, в результаті одержуємо:

Створюємо конфіг ядра IPFORWARD, на основі GENERIC

Включаємо перенаправлення пакетів:

Перевіряємо отриманий конфіг:

В результаті отримуємо:

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

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

Збираємо та встановлюємо ядро, використовуючи створений конфіг:

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

У разі успішного встановлення ядра, у відповідь отримуємо:

Перевіряємо статус IPFW:

У разі успіху отримуємо:

Установка Squid

Оновлюємо колекцію портів:

Отримуємо список доступних версій Squid:

Упараметри збирання включаємо прозоре проксіювання для використовуваного брандмауера та підтримку великих файлів:

Для збирання пакета використовуються стандартні параметри, встановлений з пакета прозорий проксі працюватиме некоректно.

Налаштування Squid

Зберігаємо конфігураційний файл, встановлений за замовчуванням:

Створюємо новий конфігураційний файл:

Створюємо папку для списків контролю доступу

Створюємо необхідні списки, значення у списку поділяються новим рядком.

Деякі сайти використовують протокол https, який фільтрувати при прозорому проксуванні неможливо. Для обмеження доступу до таких сайтів доведеться використовувати брандмауер або DNS-сервер, або проксіювати https традиційним, непрозорим способом.

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

Створюємо структуру кешу:

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

Лог доступу протягом місяця може займати досить великий обсяг, тому у аналізованої конфігурації лог був розміщений в /usr. Якщо вільного місця /var достатньо, лог доступу можна залишити в /var/log/squid.

Відображення місцевого часу на сторінках помилок Squid

За промовчанням на сторінках помилок Squid відображає час за Грінвічем, для відображення місцевого часу необхідно скоригувати шаблони помилок. Параметр шаблону %T вказує світовий час, %t – місцевий.

Копіюємо шаблони помилок до папки erros.local:

Замінюємо загальносвітовий час (% T), на місцевий (% t):

Задаємо шлях до змінених шаблонів помилок у squid.conf:

Запуск Squid

Включаємо Squid у rc.conf:

Перевіряємо, чи стартанув демон:

Перевіряємо, чи слухається сокет:

У разі успішного старту висновок буде приблизно наступним:

З приводу "WARNING: no_suid: setuid(0): (1) Operation not permitted", відстежуємо баг-репорт: http://bugs.squid-cache.org/show_bug.cgi?id=3785.

У брандмауері дозволяємо вихідні підключення для Squid (порядковий номер правила та зовнішній інтерфейс необхідно задати свій):

Перенаправляємо веб-трафік з тестового комп'ютера до Squid:

Ініціюємо веб-трафік з тестового комп'ютера та перевіряємо лог доступу:

У разі проблем перевіряємо, чи працює правило брандмауера:

Лічильник для правила перенаправлення не повинен бути нульовим.

Якщо при тестуванні проблем не виявлено, загортаємо у проксі всю підмережу:

Протокол керування кешем

Якщо керування кешем не було заборонено в конфізі, використовуємо squidclient для отримання статистики та оперативного управління.

Отримати загальну статистику сервера:

Отримати список доступних команд:

Ротація лога доступу Squid

Налаштовуємо щомісячну ротацію та архівацію access.log

Створюємо скрипт RotateAccessLog:

З таким вмістом:

Дозволяємо запуск скрипту:

Виконуємо тестовий запуск:

Перевіряємо, чи створено архів:

Настроюємо cron на щомісячний запуск першого числа опівночі:

Автоматичний перезапуск Squid при відмові

Squid 2.7 рідко грішив періодичними відмовими, залишаючи при цьому мережу без доступу до Інтернету. Хоча у третій версії таких неподобств більше не помічено, зайва перевірка не зашкодить. Перевіряємо сценарієм, чи завантажений Squid і запускаємо за необхідності. Принагідно, чистимо кеш, при виявленні повідомлення про брак дискового простору.

Створюємо сценарій AutoRestart:

З таким вмістом:

Дозволяємо запуск скрипту:

Виконуємо тестовий запуск:

Запускаємочерез cron кожні 15 хвилин:

У разі проблем на пошту root'у буде надіслано повідомлення.

Аналіз логів Squid

Список інших аналізаторів доступний на сайті проекту: http://www.squid-cache.org/Misc/log-analysis.html

Вирішення проблем

Якщо в cache.log постійно пишуться попередження:

Під час збирання не було включено підтримку прозорого проксі для вашого брандмауера. Перевстановіть Squid із колекції портів із включенням відповідних параметрів.

Якщо отримуємо такі попередження:

Виявлено декларацію acl all. У третій версії список доступу all створюється сквідом автоматично, його декларація не потрібна. Видаліть або перейменуйте acl all.