Гид по технологиям

Squid + DansGuardian: прозрачный прокси с NTLM

7 min read Сеть Обновлено 11 Oct 2025
Squid + DansGuardian: прозрачный прокси с NTLM
Squid + DansGuardian: прозрачный прокси с NTLM

О чём эта инструкция

Кратко: инструкция описывает последовательную настройку Squid и DansGuardian для прозрачного веб-фильтра с авторизацией по NTLM (winbind/ntlm_auth). Подойдет для Ubuntu-дистрибутивов, где используются winbind/samba и Webmin. При необходимости подсказки по отладке и сценарии восстановления приведены в конце.

Ключевые термины:

  • NTLM — протокол аутентификации Microsoft; здесь используется helper ntlm_auth. Определение: программа, которая получает учетные данные от Squid и запрашивает проверку у winbind.
  • Прозрачный прокси — прокси, в который трафик перенаправляется маршрутизацией/iptables, а не настройкой клиента.

Требования и подготовка

  • Сервер с установленными squid, dansguardian, samba/winbind и Webmin.
  • Привилегии root для правки системных файлов и установки пакетов.
  • Подключение к Active Directory и корректная работа winbind (если используется NTLM).
  • Резервная копия конфигураций перед изменениями.

Важно: все команды и пути в файле оставлены в исходном виде; внимательно проверяйте номера строк в своих конфигурациях — в разных версиях Squid/DansGuardian номера строк будут отличаться.

Резервная копия конфигурации Squid

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

cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
nano -c /etc/squid/squid.conf

Если нужно откатиться — восстановите файл из .bak.

Правки в squid.conf

В файле squid.conf внесите следующие изменения (строки указаны в исходном материале; у вас они могут отличаться — ищите аналогичные директивы):

  • Замените строку 73 на:
http_port 127.0.0.1:3128 transparent
  • Замените строку 74 на:
http_port 8080
  • Замените строку 593 на:
cache_peer 127.0.0.1 parent 8081 0 no-query login=*:nopassword
  • Раскомментируйте блок, примерно строки 1783–1791, и вставьте вместо заглушки:
/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
  • Раскомментируйте блок примерно строк 1800–1803 и вставьте:
/usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
  • Измените строку 2449 на:
acl ntlm_auth proxy_auth REQUIRED
  • Измените строку 2579 на:
http_access allow ntlm_auth
  • Измените строку 3161 на:
forwarded_for off

Сохраните файл.

Примечание: отключение forwarded_for предотвращает отправку внутреннего IP клиента в заголовках X-Forwarded-For. Это важно для приватности и точности логов.

Права доступа winbind

Squid/ntlm_auth должны иметь доступ к сокету winbind: /var/run/samba/winbindd_privileged. На некоторых системах при загрузке права восстанавливаются стандартным режимом, и нужно принудительно установить группу и запись на запись для группы proxy.

Создайте init-скрипт /etc/init.d/winbind-ch.sh с таким содержимым:

#!/bin/sh
#set -x
WINBINDD_PRIVILEGED=/var/run/samba/winbindd_privileged
chmodgrp() {
chgrp proxy $WINBINDD_PRIVILEGED || return 1
chmod g+w $WINBINDD_PRIVILEGED || return 1
}
case "$1" in
start)
chmodgrp
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac
#EOF

Затем зарегистрируйте скрипт в автозагрузке:

update-rc.d winbind-ch.sh start 21 2 3 4 5 .

Note: если ваша система использует systemd, вместо init-скрипта можно создать systemd unit, который выполняет те же chmod/chgrp при старте winbind или добавить ExecStartPost в юните winbind. В этом руководстве показан классический init-скрипт, совместимый с Ubuntu с SysV.

Почему это важно

Если права на сокет закрыты, ntlm_auth не сможет общаться с winbind, и авторизация NTLM провалится. Сценарий с запуском chmod при старте обеспечивает, что при каждом перезапуске демона права будут корректны.

Настройка DansGuardian

Откройте основной конфиг:

nano -c /etc/dansguardian/dansguardian.conf
  • Комментируйте строку 3 (как указано в исходнике).
  • На строке 62 измените порт 8080 на 8081 (этот порт будет использоваться Squid как cache_peer).
  • На строке 102 измените filtergroups = 1 на filtergroups = 2 и создайте вторую группу конфигурации.

Копируйте шаблон группы фільтра:

cp /etc/dansguardian/dansguardianf1.conf /etc/dansguardian/dansguardianf2.conf
nano -c /etc/dansguardian/dansguardianf2.conf

В файле группы (dansguardianf2.conf) на строке 29 установите:

naughtynesslimit = 100

Это повышает порог «неприличности» для второй группы; адаптируйте по политике вашей организации.

Антивирусные определения (AV) обычно не должны сканироваться DansGuardian, т.к. они часто блокируются по сигнатурам. Добавьте сайты обновления AV в белые списки определений:

Edit /etc/dansguardian/exceptionvirussitelist и добавьте, например:
activeupdate.trendmicro.com

А также добавьте домен в список исключений сайтов:

Edit /etc/dansguardian/exceptionsitelist и добавьте:
trendmicro.com

Перезапустите DansGuardian:

/etc/init.d/dansguardian restart

Настройка файервола и прозрачного прокси

Мы используем ipmasq — утилиту для автоматической настройки роутера/маршрутизатора. Установите пакет:

apt-get install ipmasq -y

Чтобы перенаправлять весь исходящий HTTP-трафик на порт 8081 (DansGuardian), используйте пример правил:

cp /usr/share/doc/ipmasq/examples/basics/I89tproxy.rul /etc/ipmasq/rules/I89tproxy.rul

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

/usr/share/doc/ipmasq/examples/dnat/C50dnat.rul

После внесения правил перезапустите ipmasq/iptables-config, либо перезагрузите сервер.

Установка модуля DansGuardian для Webmin

Откройте Webmin по HTTPS на порту 10000, например:

https://192.168.1.1:10000/

Войдите под root. Перейдите: Webmin > Webmin Configuration > Webmin Modules. Выберите “From ftp or http URL” и вставьте ссылку:

http://internap.dl.sourceforge.net/sourceforge/dgwebminmodule/dg-0.5.10-pr5.wbm

Нажмите Install Module и дождитесь установки интерфейса управления DansGuardian.

Тестирование и ожидаемое поведение

  1. Перезагрузите систему.
  2. Настройте браузер доменного компьютера на использование прокси — IP сервера:3128 или 127.0.0.1:3128 (в зависимости от схемы), либо укажите автоматическое перенаправление через ipmasq.
  3. Для доменного компьютера должна происходить автоматическая авторизация через NTLM (если join к домену выполнен). Internet Explorer может потребовать явного ввода DOMAIN\username, если NTLM не сработал автоматически.
  4. На недоменных компьютерах проверьте: они должны проходить через DansGuardian без NTLM-авторизации (пользователь будет видим как IP или анонимный трафик, в зависимости от настроек). Логи DansGuardian/Webmin должны показать запись запросов.

Если видите в логах, что IP доменного компьютера равен 127.0.0.1 для некоторых записей — это ожидаемо и происходит потому, что для доменного клиента трафик идёт: клиент -> squid -> dansguardian -> squid (loop через cache_peer), а для недоменных: клиент -> dansguardian -> squid.

Отладка и распространенные ошибки

  • ntlm_auth не отвечает/ошибка: проверьте работу winbind, статус службы и права на /var/run/samba/winbindd_privileged.
  • Авторизация продолжается запрашивать логин/пароль: проверьте, что браузеры настроены на автоматическое логон в локальной зоне и что squi( d) разрешает ntlm_auth.
  • Доступ в интернет отсутствует: посмотрите syslog, /var/log/squid/access.log, /var/log/dansguardian/access.log.
  • Правила ipmasq/iptables не перенаправляют трафик: проверьте текущие правила iptables -t nat -L -n.

Краткий чек-лист диагностики:

  • Проверить, что winbind запущен: service winbind status
  • Проверить права на сокет: ls -l /var/run/samba/winbindd_privileged
  • Проверить доступность ntlm_auth: /usr/bin/ntlm_auth –version (или попытка запроса через helper)
  • Проверить, что squid слушает на нужных портах: netstat -tulpen | grep squid
  • Проверить правила NAT: iptables -t nat -L -n –line-numbers
  • Просмотреть логи: tail -f /var/log/squid/access.log /var/log/dansguardian/access.log /var/log/syslog

Роль-ориентированные задачи

  • Сетевой администратор: проверить iptables/ipmasq, убедиться в пробросе портов и отсутствии конфликтов с другими правилами.
  • Администратор домена: проверить join к AD, работу winbind и соответствие политик NTLM.
  • Офисный администратор: протестировать клиенты, настроить браузеры (IE/Edge/Chrome) для автоматической аутентификации в локальной зоне.

Мини-методология внедрения (пошагово)

  1. Подготовка тестовой среды (виртуальная сеть с AD и клиентами).
  2. Установить и настроить squid, сделать резервные копии.
  3. Настроить winbind и проверить NTLM вручную.
  4. Настроить и протестировать DansGuardian на отдельном порту (8081).
  5. Настроить ipmasq, протестировать перенаправление на 8081.
  6. Интегрировать Webmin/DansGuardian модуль, настроить мониторинг логов.
  7. Постепенно перенаправлять трафик производства, отслеживать логи и метрики.

Примеры проверочных тестов

  • При успешной настройке: доменный клиент открывает страницу и в логах DansGuardian появляется дом\пользователь и URL.
  • При провале NTLM: в логах ntlm_auth видно ошибку соединения с winbind.
  • Параметр forwarded_for: убедиться, что X-Forwarded-For не содержит внутреннего IP (проверить через HTTP-инструмент, например curl с заголовками).

Примечания и советы

  • Всегда держите резервную копию оригинального squid.conf и dansguardian.conf.
  • Тестируйте изменения на одном клиенте, прежде чем массово включать перенаправление.
  • Если используете SELinux/AppArmor — убедитесь, что процессы имеют права на доступ к сокету winbind.

Быстрая сводка

  • Резервная копия конфигураций обязательна.
  • В squid: назначьте порты, cache_peer, helper для ntlm_auth, отключите forwarded_for.
  • В DansGuardian: настройте порт на 8081, создайте вторую группу фильтра и белые списки для AV-обновлений.
  • Обеспечьте права на /var/run/samba/winbindd_privileged при старте системы.
  • Используйте ipmasq для прозрачного перенаправления HTTP на DansGuardian.
  • Установите модуль DansGuardian в Webmin для удобства управления.

В конце: перезагрузите систему и проверьте логи. Если возникнут ошибки — начните с прав на сокет winbind и доступности ntlm_auth.

Ссылки:

Критерии приёмки:

  • Доменный клиент аутентифицируется автоматически и виден в логах DansGuardian как DOMAIN\username.
  • Недоменный клиент проходит через фильтр, но отображается по IP или как анонимный.
  • X-Forwarded-For не раскрывает внутренний IP клиентов.

Обновление для systemd (совет): настройте unit с ExecStartPost, который выполняет chgrp/chmod для /var/run/samba/winbindd_privileged при запуске службы winbind.

Итог: при следовании шагам вы получите прозрачный защищённый прокси с поддержкой NTLM и централизованным фильтром контента через DansGuardian.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Восстановление удалённых файлов в Microsoft Teams
Microsoft Teams

Восстановление удалённых файлов в Microsoft Teams

Скачать платные iPhone‑приложения бесплатно без джейлбрейка
iOS

Скачать платные iPhone‑приложения бесплатно без джейлбрейка

Замена сбойного диска в RAID1 и восстановление
Linux

Замена сбойного диска в RAID1 и восстановление

Opigno LMS на Ubuntu 18.04 — установка и настройка
LMS

Opigno LMS на Ubuntu 18.04 — установка и настройка

Почему слабый мобильный и интернет‑сигнал и как исправить
Связь

Почему слабый мобильный и интернет‑сигнал и как исправить

Как заблокировать панель задач Windows
Windows

Как заблокировать панель задач Windows