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, например:
Войдите под 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.
Тестирование и ожидаемое поведение
- Перезагрузите систему.
- Настройте браузер доменного компьютера на использование прокси — IP сервера:3128 или 127.0.0.1:3128 (в зависимости от схемы), либо укажите автоматическое перенаправление через ipmasq.
- Для доменного компьютера должна происходить автоматическая авторизация через NTLM (если join к домену выполнен). Internet Explorer может потребовать явного ввода DOMAIN\username, если NTLM не сработал автоматически.
- На недоменных компьютерах проверьте: они должны проходить через 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) для автоматической аутентификации в локальной зоне.
Мини-методология внедрения (пошагово)
- Подготовка тестовой среды (виртуальная сеть с AD и клиентами).
- Установить и настроить squid, сделать резервные копии.
- Настроить winbind и проверить NTLM вручную.
- Настроить и протестировать DansGuardian на отдельном порту (8081).
- Настроить ipmasq, протестировать перенаправление на 8081.
- Интегрировать Webmin/DansGuardian модуль, настроить мониторинг логов.
- Постепенно перенаправлять трафик производства, отслеживать логи и метрики.
Примеры проверочных тестов
- При успешной настройке: доменный клиент открывает страницу и в логах 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.
Похожие материалы

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

Скачать платные iPhone‑приложения бесплатно без джейлбрейка
Замена сбойного диска в RAID1 и восстановление
Opigno LMS на Ubuntu 18.04 — установка и настройка

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