Pull to refresh

CentOS 6.x 64 и Squid с авторизацией из Win2008AD

Reading time 7 min
Views 30K
Установка Squid на CentOS 6.x 64 с авторизацией из Win2008AD, групповое распределение, привязка по mac адресам, фильтр расширений файлов и запрещенных сайтов.

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

Создаем пользователя squid, он будет отвечать за получение списка пользователей их паролей и групповую принадлежность. Назначаем ему делегирование на эти возможности.

Жмем правой клавишей мыши на корне нашего домена, выбираем Делегирование управления. Появляется мастер настройки. Жмем Далее. Жмем Добавить. Пишем нашего пользователя squid, который будет иметь права чтения из домена. Жмем ОК. Добавился наш пользователь. Жмем Далее. Включаем Чтение информации о всех пользователях и Чтение всей информации для intOrgPerson. Жмем Далее. Жмем Готово.

Создаем в корне дерева домена Подразделение proxy. Жмем правой клавишей мыши на корне нашего домена, выбираем Создать, выбираем Подразделение. Пишем имя proxy. Жмем ОК. В корне домена появится так называемый Организационный юнит с именем proxy.

В этом подразделении создаем структуру групп для распределения пользователей на получение разных прав доступа через Squid. Создаем группу admins-proxy и users-proxy.

Жмем правой клавишей мыши на proxy, выбираем Создать, выбираем Группа. Пишем имя группы admins-proxy. Жмем ОК. Повторяем для группы users-proxy.

Первая группа будет иметь полный доступ, вторая будет иметь ограничения. В каждую группу добавляем уже имеющихся пользователей. Пусть в группе admins-proxy будет находиться пользователь padmins, а в группе users-proxy будет находиться пользователь pusers, которые были созданы ранее и мы их сейчас добавили. Два раза жмем на имени группы. Выбираем закладку Члены группы. Жмем Добавить. Пишем нужного пользователя. Жмем ОК. Повторяем для остальных пользователей и групп.

Устанавливаем пакет Squid:

yum install squid

После успешной установки прописываем автозапуск squid:

chkconfig squid on

Авторизацию в squid будем использовать на основе LDAP. Для этого сначала необходимо проверить соединение с Win2008AD механизмом LDAP, который заложен в Squid.

Проверяем связку логина padmins и пароля VzRGI5xS пользователя из домена.

Выполняем:

echo «padmins VzRGI5xS» | /usr/lib64/squid/squid_ldap_auth -R -D squid@developer.com -w 3zdjK2H9 -b «dc=developer,dc=com» -f «sAMAccountName=%s» -h 192.168.151.2

padmins # /пользователь домена/
VzRGI5xS # /пароль пользователя padmins в домене/
squid@developer.com # /пользователь домена имеющий права просмотра списка пользователей их паролей и всех данных о них/
3zdjK2H9 # /пароль делегированного пользователя squid/
dc=developer,dc=com # /контроллер домена/
192.168.151.2 # /IP адрес домена/


И так, если это выполнено правильно, мы получим ответ OK. Это означает, что наш пользователь padmins найден в домене и он сверен с паролем VzRGI5xS. Если соответствия нет, то получим ответ ERR Success.

Теперь проверяем связку логина padmins и группы admins-proxy из домена в которую входит пользователь.

Выполняем:

echo «padmins admins-proxy» | /usr/lib64/squid/squid_ldap_group -R -D squid@developer.com -w 3zdjK2H9 -b «dc=developer,dc=com» -f "(&(objectclass=person) (sAMAccountName=%v)(memberof=cn=%a,ou=proxy,dc=developer,dc=com))" -h 192.168.151.2

И так, если это выполнено правильно, мы получим ответ OK. Это означает, что наш пользователь padmins найден в группе admins-proxy нашего домена. Если соответствия нет, то получим ответ ERR Success.

Принимаемся за настройку Squid.

Создаем каталог /etc/squid/rules:

mkdir /etc/squid/rules

В каталоге /etc/squid/rules создаем файлы для правил:

touch block-extension.txt

touch inet-mac.txt

touch url-block.txt

Содержимое файла block-extension.txt (фильтр расширений файлов):

\.exe$
\.mp3$
\.mpg$
\.mp4$
\.mpeg$
\.flv$
\.avi$
\.wmv$
\.swf$
\.mov$
\.mkv$
\.wav$
\.rar$
\.msi$
\.zip$
\.tar$
\.iso$
\.nrg$


Содержимое файла inet-mac.txt (фильтр mac адресов, разрешенные):

04:00:27:3a:45:13
10:6e:87:c4:8c
00:1f:d0:b5:c4:65


Содержимое файла url-block.txt (фильтр url):

odnoklassniki\.ru
vk\.com
facebook\.com

Открываем на редактирование файл конфиг /etc/squid/squid.conf и приводим его к виду:

squid.conf
################################################################################

# Squid normally listens to port 3128
http_port 3128

visible_hostname router-int.developer.com

#
# Recommended minimum configuration:
#
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

#
# Recommended minimum Access Permission configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager

# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on «localhost» is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

################################################################################
### AD команды для подключения к AD2008R2 ###
################################################################################
auth_param basic program /usr/lib64/squid/squid_ldap_auth -R -D squid@developer.com -w 3zdjK2H9 -b «dc=developer,dc=com» -f «sAMAccountName=%s» -h 192.168.151.2
auth_param basic children 5
auth_param basic realm Please insert your Windows credentials to navigate
auth_param basic credentialsttl 1 hour
################################################################################

################################################################################
### AD команды для подключения к группам AD2008R2 ###
################################################################################
external_acl_type ldap_group %LOGIN /usr/lib64/squid/squid_ldap_group -R -D squid@developer.com -w 3zdjK2H9 -b «dc=developer,dc=com» -f "(&(objectclass=person) (sAMAccountName=%v)(memberof=cn=%a,ou=proxy,dc=developer,dc=com))" -h 192.168.151.2
################################################################################

################################################################################
### Листы доступа и блокировок по группам из AD2008R2 ###
################################################################################

# (лист доступа пользователей из группы admins-proxy находящаяся в AD2008R2)
acl admins-proxy external ldap_group admins-proxy

# (лист доступа пользователей из группы users-proxy находящаяся в AD2008R2)
acl users-proxy external ldap_group users-proxy

# (лист доступа пользователей по MAС-адресу)
acl inet-mac arp "/etc/squid/rules/inet-mac.txt"

# (лист блокировки по списку URL)
acl url-block url_regex "/etc/squid/rules/url-block.txt"

# (лист блокировки по списку расширений файлов)
acl block-extension url_regex -i "/etc/squid/rules/block-extension.txt"

# (блокировка стрим потоков)
acl media rep_mime_type -i ^audio/.*$
acl media rep_mime_type -i ^video/.*$
acl media rep_mime_type -i ^video/x-flv$
acl media rep_mime_type -i ^application/x-shockwave-flash$
acl media rep_mime_type -i ^application/octet-stream$

# (разрешаем все для группы admins-proxy с привязкой по mac адресу)
http_access allow admins-proxy inet-mac
# (запрещаем группе users-proxy список url-block)
http_access deny users-proxy url-block

# (запрещаем группе users-proxy список block-extension)
http_access deny users-proxy block-extension

# (запрещаем группе users-proxy список media)
http_reply_access deny users-proxy media

# (разрешаем группе users-proxy все, что осталось)
http_access allow users-proxy

################################################################################

# And finally deny all other access to this proxy
http_access deny all

# We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin?

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid

# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern. 0 20% 4320

################################################################################

Приведенный конфиг 100% рабочий.

Стартуем Squid:

service squid start

Как это работает.

В настройках браузера прописываем адрес и порт 3128 нашего прокси сервера. Заходим на страницу сайта, получаем приглашение ввести логин и пароль.

Если наш пользователь padmins правильно ввел пароль, squid его пропускает и к нему применяются правила заданной группы. Из конфига видно, что для группы admins-proxy ограничений нет. Есть только привязка к mac адресам из списка.

Теперь если наш пользователь pusers правильно ввел пароль, squid его пропускает и к нему применяются правила заданной группы. Из конфига видно, что для группы users-proxy применяются фильтры url-block (список блокировки url), block-extension (список блокировки расширений) и media (списк блокировки стрим потоков).

И не забываем открыть порт, если он закрыт:

iptables -A INPUT -p tcp -m state -m tcp -s 192.168.0.0/16 --dport 3128 --state NEW -j ACCEPT
Tags:
Hubs:
+1
Comments 20
Comments Comments 20

Articles