Ubuntu Server. Настраиваем авторизацию через Squid.

| Комментариев: 82
squid-auth-000.png
Как показал читательский отклик, одной из наиболее интересных тем является настройка авторизации через прокси-сервер Squid. Сегодня, располагая небольшим свободным временем, мы решили написать небольшую заметку на эту тему, которая в итоге вылилась в полноценную статью.
Сразу важное предупреждение: авторизация и прозрачный прокси несовместимы! Придется выбирать что-то одно. Второе предупреждение: авторизация через прокси позволит ограничить доступ в Интернет только по 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
Сохраняем файл. Теперь нам надо создать файл паролей и завести пользователей. Для этого нам понадобится утилита htpasswd из состава apache2-utils, установим этот пакет:

sudo apt-get install apache2-utils

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

htpasswd -c  /etc/squid/passwd ivanov
Ключ указывает создать файл паролей в случае его отсутствия, второго и последующего пользователей следует заводить командой:

htpasswd  /etc/squid/passwd petrov
Теперь следовало бы перезагрузить Squid, но в 10.04 присутствует баг не позволяющий перезагрузить Squid ни по старому /etc/init.d/squid restart, ни по новому service squid restart, поэтому перезагружаем сервер.

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

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";
}
Если в вашей сети используется 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 На этом настройку можно считать законченной.  Остается пожелать аптайма вашему серверу.

 

Комментариев: 82

Спасибо за статью... но хотелось бы увидить про билинг!!! запрет одного http не подходит)

Хотелось бы без авторизации пользователей управлять скоростью трафика и лимитами по ip-адресу или по mac-адресу. Если это возможно, подскажите в какую сторону смотреть?

Спасибо большое! )

Хотелось бы увидеть статью по установке системы билинга под Ubuntu а так же на уровне фаервола запрещать пользователям внутренней сети доступ к определённым ресурсам Интернета тоесть иметь аналог (ТИ)но на Linux для полноценной миграции Интернет шлюза с ОС Windows

Хотел напомнить про почтовый сервер на Ubuntu. Теоретическую часть уже освоили!
Ваши статьи просто на вес золота! Спасибо Вам!

Здравствуйте! Вы пишете что "доступ в Интернет только по HTTP протоколу. Остальные протоколы: FTP, SMTP, POP3 и другие будут спокойно продолжать работать через NAT", а как можно сделать чтобы и эти протоколы работоли только после авторизации пользователя? очень нужно...

Спасибо.

Здравствуйте! А можно сделать чтобы эти протоколы шли через прокси-сервер, чтобы авторизация проходила на нем и протоколы FTP, SMTP, POP3 работали через него?
Спасибо.

Спасибо! Проверено - работает! Хотелось бы получить дополнительные разъяснения по вопросам возникшим по статье "Ограничиваем скорость клиентов через Squid" :)

Добрый день!
Подскажите какие параметры нужно еще прописать в SQUID3 для авторизации через AD Windows2003 Кроме
##
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30
#
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 30
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

т.е рекомендуете взять последнюю squid2 и на ней проделать тоже самое.
Тогда вопрос тот же, достаточно ли для авторизации в AD для squid2 строк указанных выше?

Здравствуйте! спасибо вам большое за предоставленную информацию. Очень помогает

Вопрос относящийся к squid3

Дело в том что после команды # apt-get install squid - squid не установился, единственное что появилось это файл конфигурации /etc/squid/squid.conf и не появилось /etc/init.d/squid, вернее процесс установки происходил, и даже было видно что пакет squid скачивается и устанавливается, но в итоге squid`a не было - пришлось воспользоваться squid`om #3.

На мое удивление все заработало нормально, но будет ли настройка авторизации пользователей приведенная выше аналогична для squid3 ??
Меня очень интересует именно настройка авторизации пользователей и разграничение инета для них, по времени и по скорости.
И хотелось бы спросить - будет ли какая-нибудь информация по вабалайзеру или аналогу - для ведения статистики пользователей.

ps:устанавливал все что у вас было описано (iptables + squid(3) + dansguardian + clamav + havp + webmin)

Вообщем вы были правы. Взял SQUID 2.7 взял SAMS 1.5 и всё заработало, статиситка считается, авторизация через АД проходит, всё что нужно ограничивается.

Настроил роутер по вашему ману. Добавил авторизацию по squid, но вот например машина из локальной сети на которой стоит ubuntu 10 в инет через прокси с авторизацией выходит а обновиться из репозиториев не может и не работают на других машинах программы использюущих 25 110 порты. Да и мессенджер по умолчанию empathy тоже не конектится в инет

подскажите пожалуйста что изменить

и кстати из локалки не пингуется инет. ping ya.ru - и висит ничего не показывая и даже не говоря что нет такого узла и т.д.

оооо здравствуйте! не ожидал что так быстро полу ответ )))

спасибо щас буду смотреть внимательно с начала.

кстати совсем забыл У меня еще стоит havp в его настройка я ничего не меня кроме языка - он может мешать? я его отключил проверил но не помогло - и кстати все сначала переделал - так и не получается чтоб обновлялся комп с инета

Здравствуйте! Настроен squid+sams, теперь нужно чтобы определенные порты ходили через http-прокси, а именно 25, 110.
Если делаю:
# Запрещаем все по умолчанию
iptables -P FORWARD DROP
то кроме 80 порта, всё остальное режиться.
Подскажите как на строит iptables чтобы завернуть эти 25, 110 порты?
В общем мне нужно чтобы пользователь авторизировался на прокси (решино), и после авторизации получал интернет, и свё внешнее(без разницы что почта с помощью почтовых клиентов, подключение к mail агенту (например) )
Спосибо!

PS разьясните пожалуйста следующие строки:

iptables -A FORWARD -s 10.10.10.1/24 --dport 20 -j ACCEPT
iptables -A FORWARD -s 10.10.10.1/24 --dport 21 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.10.10.1/24 -o eth0 -j SNAT --to xx.xx.xx.xx

Ой... прошу прощения за ошибки...

Мдя.... тишина...

Здравствуйте! Спасибо за ответ. Да уж... этот факт с почтой, честно говоря расстроил... можно даже сказать... сутки в пустую ушли на рассмотрение перехода с виндового UserGate на Linux и Squid.
Всё бы хорошо, если ни одно но, представьте:
в одной физической сети порядка 100 пользователей, но эти 100 делим примерно на 10 (эти десять - отдельные фирмы снимающие помещения в здании где проложена локалка, в которой действуют ip 192.168.10.0/24). У каждой из этих фирм есть свои интернет ADSL есть свой IT-специалист, интернет у них раздается через UserGate.
А, если я воткну свой роутер со Squid'ом, то получается эти порты будут доступны для всех..., а если в ручную забивать кому доступны эти порты, это не реально, пользователей "нужных" много примерно 60 пользователей... и IP адреса динамические.
Вот из за этого и проблемы... пока ни знаю как решить. В теории если сделать vpn сеть поверх физической, и в этой виртуальной сети развернуть Squid+фильтр контента, но пока ни знаю как это сделать.

Если у кого есть мысли как реализовать последнее, поделитесь?
Спасибо!

Здравствуйте! Спасибо за ответ! Хорошо, я вечерком сегодня набросаю схемку, так лучше будет понять постановку задачи.

Здравствуйте! В общем просили постановку задачи:
Что имеем.
Локальная сеть состоящая из 5 подсетей:
192.168.100.0/24 (локальная сеть);
192.168.110.0/24 (локальная сеть);
192.168.120.0/24 (локальная сеть);
192.168.130.0/24 (локальная сеть);
192.168.1.10 (к этой сети подключен ADSL роутер с ip 192.168.1.1).
Компьютер с Ubuntu server 10.04, в котором 5 сетевых карт соответственно, он работает маршрутизатором.
Необходимо.
Пользователям в локальной сети 192.168.100.0/24 раздать ADSL интернет, но так, чтобы был интернет, и работала почта только авторизированным пользователям, так же нужен запрет на определенные расширения и сайты, необходима возможность просмотра кто и на каком сайте в онлайн режиме.
Теоретическое решение.
Поднять VPN сеть, например 192.168.10.0/24 поверх физической 192.168.100.0/24, и уже в VPN пустить интернет через squid без авторизвции (прозрачный режим), и установить SAMS для просмотров, запретов и подсчета трафика.
Получается пользователи авторизируются через VPN и получают интернет, работу с полчтой.
Так вот прошу помощи как организовать этот VPN и настроит на него squid, чтобы интернет шел только в VPN сеть, но ни в какую другую.

Спасибо за оперативный ответ, это порадовало!!!
Тыкните пожалуйста пальчиком где посмотреть "Как поднять NAT и VPN мы уже писали"?
Спасибки!

Спасибо! Подскажите управлять VPN пользователями (создавать, удалять, менять пароли), можно через Webmin или только с командной строки?

Здравствуйте! Поднял по вашей статье VPN сервер, к серверу клиенты коннектятся. Настроил также по вашей статье "Linux. Настройка роутера (NAT + DHCP + Squid)", работает. Теперь хочу чтобы этот прокси работал только в VPN.... но ничего ни получается, по отдельносьт всё работает а если указываю в настройках NAT эту VPN тоесть ppp0 вместо eth1 интернет ни идет в VPN.... что может быть? Как всётаки сделать это в VPN сети... подскажите?

Великолепно!!!
Для простого смертного супер!
СПАСИБО Вам за очень понятный о прекрасно написанный мануал!!!

Господа, очень хотелось бы увидеть комплексную статью по разворачиванию шлюза, включению его в WIN -домен, в результате единая база пользователей. и обвешиваем все это: ftp c авторизацией снаружи, расшаренные ресурсы изнутри, фаервол,интернет статистика с фильтрацией через регулярные выражения и тематических сайтов, vpn для связи удаленных отделов, voip для голосовой связи, jabber с базой AD, корпоративная почта + описанная возможность подключения relay к Exchange сервер.
P.S. почему часто в ваших описаниях присутствует ubuntu server? это же, можно, сказать необкатанный свежак. Почему не debian, rhel, suse, FREEBSD.
Спасибо!

у RHEL есть бесплатный аналог - CentOS. Debian - консервативен поэтому и стабилен. Убунта как раз его форк, рвущийся вперед, потому и писал об обкатке.
Фря всегда была особняком, у нее есть сообщество и есть неплохой "хэндбук". Ее преимущество - нет кучи вариаций и семейств как в линуксе. Поддержка? Вы серьезно? Кто ей пользуется? Обычно или на форум или в гугл.
в идеологии никс роли - демоны. роль - термин для винды. на счет количества "ролей", возможно правы, можно на втрой убрать джаббер, voip, но на каждую по одному серверу. как-то жирновато.
Аутсайдер? Имхо убунту изначально строилась как десктоп и со своей ролью справляется неплохо, во многих обзорах определение железа из коробки лучшее.
Принципиального отличия в серверной версии нет, архитектура одна.
Фря - исключительно для построения "шлюзов", потому и спросил вас о ней.

P.S.
Ваши статьи интересны и полезны, хотелось бы увидеть акцент на построении гибридных сетей (гейт-никс, внутри - win домен, база общая)

Обзоры об оговоренных демонах (сервисах) будут описаны? как скоро? ориентированно на какую платформу?
Спасибо!

P.P.S. Прошу не рассматривать меня как противника убунты и фаната фрибсд. И тем более это не повод для холиваров. Системы схожи но все таки разные. Для меня например понимание этапа разбиения дисковой подсистемы во фре намного сложнее чем в линукс, а расположение и редактирование конфигов более логично.

mozg777

Попробуйте Zentyal - zentyal.org Всё перечисленное есть. Основан на ubuntu server.
Как вариант clearos - clearos.ru. только нет по моему телефонии. это centos.

& Уваров А.С. простите за рекламу чужих ресурсов.
С нетерпением жду статей (если такие предвидятся) про виртуализацию.

Как организовать в squid авторизация одновременно по AD Windows 2003 и по IP адресам.
Дело в том, что в фирме внутренняя адресация динамическая, а в филиалах свой домен и не входить в наш домен, у них адресация статическая, они выходит в интернет через наш прокси.
Я в Ubuntu начал работать недавно и в этом деле я ещё новичок. Поэтому хотел подробно узнать как организовать авторизация и по IP, и по AD Windows 2003.
Спасибо

Технически с вами согласен, но для этого нужна машинка помощней, и виртуалка отвечающая всем требованиям для бесперебойной работы, а также бэкапированию. присоединяюсь к Urfin - ждем статью по виртуализации на nix системах.
На счет сервисов наверное был неверно понят. хочется комплексной статьи по реализации сервисов в гормоничное решение, а не отдельных по реализации сервисов как таковых. Посудите сами, намного интереснее построить все сервисы завязанные в одну базу, а не отдельно базу под ftp, samba, почту и тп.
Также огласите ваше мнение на тему Zentyal, бывший ebox.

Комментировать

Подписка на блог

Подпишись  на обновление блога по RSS Мы в Твиттере

 

Архивы по месяцам

Реклама

Статистика

Работает на  Movable Type 5.12

 

Яндекс.Метрика

География

free counters

Об этой записи

Сообщение опубликовано 06.12.2010 14:58. Автор — Уваров А.С..

Предыдущая запись — Ubuntu. Создаем свой дистрибутив.

Следующая запись — Ubuntu Server. Ограничиваем скорость клиентов через Squid.

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.