Ubuntu Server. Настраиваем аутентификацию через Squid.

  • Автор:

squid-auth-000.png

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Сразу важное предупреждение: аутентификация и прозрачный прокси несовместимы! Придется выбирать что-то одно. Второе предупреждение: аутентификация через прокси позволит ограничить доступ в Интернет только по HTTP протоколу. Остальные протоколы: FTP, SMTP, POP3 и другие будут спокойно продолжать работать через NAT. Хотя в небольших организациях это не столь критично, наиболее употребляемым (и злоупотребляемым) является именно протокол HTTP, и одной из задач администратора является ограничение доступа сотрудников в интернет именно через браузер.

Подготовка сервера.

В качестве базы мы будем использовать роутер, обновленный до Ubuntu Server 10.04 LTS. В первую очередь отключим прозрачное проксирование, для этого в файле /etc/nat закомментируем последнюю строку:

#iptables -t nat -A PREROUTING -i eth1 -d ! 10.0.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 10.0.0.1:3128

Также следует запретить HTTP соединения (порт 80) через NAT, для этого перед строкой:

# Разрешаем доступ из внутренней сети наружу

добавляем:

# Запрещаем HTTP через NAT
iptables -A FORWARD -i eth1 -p tcp --dport 80 -j REJECT

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

# Запрещаем все по умолчанию
iptables -P FORWARD DROP

# Разрешаем нужные службы (FTP, SMTP, POP3)
iptables -A FORWARD -i eth1 -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --dport 110 -j ACCEPT

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

Настройка Squid

Подготовив сервер, перейдем к настройке Squid, для этого откроем /etc/squid/squid.conf, далее пойдем от начала файла. Найдем, раскомментируем и приведем к следующему виду строку:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd

Данная строка указывает использовать NCSA аутентификацию на основе списка пользователей из файла passwd. Далее найдем и раскомментируем следующие строки:

auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

Первая строка указывает количество одновременно доступных каналов для аутентификации, вторая выводимое приветствие, можете заменить Squid proxy-caching web server на то, что вам нравиться, например Интернет сервер ООО "Рога и Копыта". Третья строка отвечает за время хранения пары логин - пароль, по истечении этого времени сервер попросит повторную проверку.

Зададим группу доступа для всех прошедших проверку, раскомментировав:

acl password proxy_auth REQUIRED

Теперь изменим права доступа через Squid, найдем и закомментируем строку, разрешающую доступ всем членам локальной сети:

#http_access allow localnet

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

http_access allow password

Не забываем убрать настройку, отвечавшую за прозрачность, вместо

http_port 10.0.0.1:3128 transparent

оставьте

http_port 10.0.0.1:3128

Важно, в версиях Squid3, начиная с 3.1 и новее, вместо опции transparent используется intercept.

Сохраняем файл. Теперь нам надо создать файл паролей и завести пользователей. Для этого нам понадобится утилита htpasswd из состава apache2-utils, установим этот пакет:

sudo apt-get install apache2-utils

Теперь заведем пользователя командой:

htpasswd -c  /etc/squid/passwd ivanov

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

htpasswd  /etc/squid/passwd petrov

Перезагружаем Squid.

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

squid-auth-001.png

Автоматическое определение настроек прокси-сервера

Вроде бы мы все настроили, но данное решение требует ручной настройки браузеров на каждом клиентском ПК, а если завтра мы поменяем параметры прокси, порт или IP адрес? Снова бегать? Здесь нам на помощь придет WPAD (Web Proxy Auto Detection), который позволяет один раз указать в настройках браузера клиента адрес скрипта автоматической настройки и дальнейшие изменения вносить уже в этот скрипт.

Скрипт WPAD должен быть опубликован на локальном веб-сервере, если вы не собираетесь использовать роутер в качестве полноценного веб-сервера то нет необходимости устанавливать такой тяжеловес как Apache, с данной задачей отлично справиться быстрый и легкий Lighttpd. Данный веб-сервер благодаря именно этим качествам прочно "прописался" в аппаратных маршрутизаторах, модемах и т.п. Для установки выполним:

sudo apt-get install lighttpd

Для проверки работы веб-сервера наберем в любом браузере http://10.0.0.1, если все работает нормально мы увидим стандартную страничку Lighttpd:

squid-auth-002.pngОткроем конфигурационный файл Lighttpd и добавим в него следующую секцию:

mimetype.assign += (".dat" => "application/x-ns-proxy-autoconfig")

Теперь в корневой папке веб-сервера создадим файл WPAD:

sudo touch /var/www/wpad.dat

Откроем его внесем следующий текст:

function FindProxyForURL(url, host)
{
if(isInNet(host, "10.0.0.0", "255.255.255.0")) { return "DIRECT"; }
return "PROXY 10.0.0.1:3128";
}

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

if (shExpMatch(host, "127.0.0.1" )) {return "DIRECT";}
if (shExpMatch(host, "*/localhost*" )) {return "DIRECT";}

Кроме того, отправим напрямую протокол HTTPS, который Squid все равно не обрабатывает, тем самым сняв возможные проблемы с сайтами работающими по этому протоколу:

if (shExpMatch(url, "https:*")) {return "DIRECT";}

В итоге файл должен принять вид:

function FindProxyForURL(url, host)
{
if(isInNet(host, "10.0.0.0", "255.255.255.0")) { return "DIRECT"; }
if (shExpMatch(host, "127.0.0.1" )) {return "DIRECT";}
if (shExpMatch(host, "*/localhost*" )) {return "DIRECT";}
if (shExpMatch(url, "https:*")) {return "DIRECT";}
return "PROXY 10.0.0.1:3128";
}

Если в вашей сети используется Internet Explorer можно передавать расположение скрипта WPAD при помощи DHCP сервера, для этого в /etc/dnsmasq.conf добавьте:

dhcp-option=252,http://10.0.0.1/wpad.dat

В свойствах подключения браузера достаточно будет установить галочку "Автоматическое определение параметров"

squid-auth-003.pngК сожалению, не все альтернативные браузеры не умеют получать настройки по DHCP, в этом случае адрес скрипта настройки придется указать вручную.

Для Firefox:

squid-auth-004.pngДля Opera:

squid-auth-005.pngGoogle Chrome использует настройки Internet Explorer, однако не умеет получать настройки по DHCP, поэтому потребуется дополнительно указать прямой путь к скрипту автонастройки:

squid-auth-006.png На этом настройку можно считать законченной. Остается пожелать аптайма вашему серверу.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Дополнительные материалы:


  1. Linux. Настройка роутера (NAT + DHCP + Squid)
  2. Ubuntu Server. Настраиваем роутер NAT + DHCP + Squid3
  3. Ubuntu Server. Настраиваем контент-фильтр роутера (DansGuardian)
  4. DansGuardian. Сложности фильтрации русскоязычного контента
  5. Ubuntu Server. Настраиваем антивирусный фильтр роутера (ClamAV)
  6. Ubuntu Server. Дополняем контент-фильтр роутера антивирусом (DansGuardian + ClamAV)
  7. Ubuntu Server. Настраиваем форвардинг портов на роутере
  8. Ubuntu Server. Настраиваем аутентификацию через Squid
  9. Ubuntu Server. Ограничиваем скорость клиентов через Squid
  10. SARG - анализируем логи прокси-севера Squid
  11. SAMS - веб-интерфейс для управления Squid и не только
  12. Squid - настраиваем URL-фильтрацию по спискам
  13. Squid - блокируем потоковое мультимедиа
  14. Как устроена и работает система контроля доступа в Squid
  15. Настраиваем Squid для работы с Active Directory. Часть 1 - базовые настройки
  16. Настраиваем Squid для работы с Active Directory. Часть 2 - Kerberos-аутентификация
  17. Настраиваем Squid для работы с Active Directory. Часть 3 - Авторизация на основе групп AD
  18. WPAD или автоматическая настройка параметров прокси
  19. Устраняем ошибки Windows Update при работе через прокси-сервер Squid
  20. Настраиваем ограничение скорости для пользователей в Squid
  21. Сборка Squid 3.5 с поддержкой SSL из исходных кодов для Debian / Ubuntu
  22. Настраиваем роутер NAT + DHCP + Squid3 с поддержкой фильтрации SSL-трафика

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал



Loading Comments