Настройка squid centos 6

Обновлено: 04.07.2024

Параметр src позволяет регулировать доступ для клиентов со статичными ip -адресами :

acl User_Group src 192.168.0.2 - 192.168.0.9 - группа пользователей

acl Single_User src 192.168.0.10 - отдельный пользователь

Параметр dst позволяет указать список ip -адресов назначения , к которым клиент желает получить доступ :

acl Net194 dst 194.67.0.0 / 16 - описываем некую подсеть 194.67.0.0 / 16

Параметр dstdomain даёт возможность указывать домен , к которому выполняется запрос :

acl SitesBlocked dstdomain . example . ru . sample . ru - указываем несколько доменных имён

Если необходимо указать домен источника , используется параметр srcdomain :

acl aSitesBlocked srcdomain . example . ru . sample . ru - указываем несколько доменных имён

Параметры srcdom_regex и dstdom_regex позволяют использовать в ACL регулярные выражения :

acl SitesRegexFree dstdom_regex free - сайты , содержащие в доменном имени слово “ free ”

acl SitesRegexComOrg dstdom_regex \ . com $ \ . org $ - сайты доменных зон . com и . org

С помощью параметра url_regex возможно указать шаблон регулярного выражения для URL .

Ключ - i необходим для игнорирования регистра символов в регулярных выражениях .

acl MusicMP3 url_regex - i \ . mp3 $ - охватывает музыкальные файлы . mp3

Важно отметить что время начала промежутка должно быть всегда меньше времени конца .

но промежуток 20 : 00 - 09 : 00 придётся разбить на 20 : 00 - 23 : 59 и 00 : 00 - 09 : 00.

acl WeekendTime time AS 10 : 00 - 15 : 00 - обозначим некоторый временной промежуток для выходных дней

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

Параметр proto позволяет указывать протокол передачи информации .

Используя его можно запретить пересылку файлов по протоколу ftp .

delay_access номер _ пула действие имя _acl - действия для пула

delay_class 1 1 - пул № 1 ограничит скорость для всех клиентов , для которых он будет применен

delay_parameters 1 64000 / 64000 - 512 Кбит = 64 Кбайта = 64000 байт

delay_parameters 1 - 1 - неограниченная скорость доступа для пула № 1

delay_access 1 deny UserGroup - не применять к User_Group

delay_access 1 allow SingleUser - применит к SingleUser

cache_mem 1024 MB - объем доступной для кэширования памяти ( сбрасывается при перезагрузке )

maximum_object_size_in_memory 512 KB - максимальный размер объекта в кэше

cache_dir тип _ хранилища путь _ к _ хранилищу размер L1 L2

cache_dir ufs / var / squid_cache 1024 16 256 - использование HDD кэша

maximum_object_size 2 MB - максимальный размер объекта в дисковом кэше

store . log - содержит записи , относящиеся к действиям с кэшем

access_log daemon : / etc / squid3 / logs / access . log squid

cache_store_log daemon : / etc / squid3 / logs / store . log

debug_options ALL , 1 - секция “ ALL ” , глубина отладки 1

logfile_rotate 31 - ротация логов ( расширение файлов логов 0 - 30 )

squid - k reconfigure - применить настройки без перезагрузки

service squid3 reload - применить настройки без перезагрузки

Аутентификация пользователей прокси-сервера Squid:

Очень важно помнить , что аутентификация невозможна в прозрачном режиме работы прокси-сервера ( transparent proxy ) .

Это ограничение вызвано исключительно особенностями работы протокола TCP / IP , а не недостатками функционала Squid .

Одновременно могут быть сконфигурированы несколько схем аутентификации .

Прокси-сервер будет пытаться использовать разные схемы аутентификации в зависимости от порядка их указания в squid . conf

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

а не только хелперы входящие в состав пакета Squid , даже самописные скрипты .

htpasswd - c / etc / squid / squidusers user1 - создание файла для паролей и добавление в него пользователя user1 ( пароль создастся при создании )

htpasswd / etc / squid / squidusers user2 - добавлене нового пользователя user2 в файл с паролями ( пароль создастся при создание )

chmod 440 / etc / squid / squidusers - выставляем прова 440 для файла / etc / squid / squidusers

chown proxy : proxy / etc / squid / squidusers - задаем пользователя и группу proxy

auth_param basic program / usr / lib64 / squid3 / basic_ncsa_auth / etc / squid3 / squidusers

autch_param basic program /путь _ к _ самому _ хелперу /файлу _ содержит _ логины _ пароли

acl lan proxy_auth REQUIRED - создание списка доступа , в который включены все прошедшие аутентификацию пользователи

------создать таблицу passwd с полями user , password , enabled , fullname и comment

insert into passwd values ( 'test' , 'pass' , 1 , 'Test User' , 'for test' ) ;

auth_param basic program / usr / lib64 / squid / basic_db_auth -- user user -- password password -- md5 -- persist

-- usercol - столбец с именами пользователей , по умолчанию "user" ;

-- passwdcol - столбец с паролями , по умолчанию "password" ;

-- plaintext - означает , что пароли в базе хранятся в открытом виде ;

-- md5 - означает , что пароли зашифрованы в md5 без добавления “соли” ;

-- persist - оставляет соединение с БД открытым в промежутке между запросами .

auth_param basic realm "This is corparete proxy" - приветствие при аутентификации пользователей

auth_param basic credentialsttl 2 hours - срок хранения в кэше связки "username:password" .

auth_param basic casesensitive off - чувствительность имен пользователей к регистру .

auth_param basic blankpassword off - поддержку пустых паролей . по умолчанию аутентификация с пустым паролем возможна только при гостевом входе

authenticate_cache_garbage_interval 1 hour - как долго логин пользователя будет храниться в кэше

authenticate_ttl 1 hour - время , которое должно пройти с момента последнего запроса

authenticate_ip_ttl 0 seconds - сколько хранить данные об IP -адресе авторизованного пользователя


Предлагаю свой вариант настройки шлюза для доступа в Интернет на основе связки CentOS + squid + sarg + iptables + HTB.init. Данное решение подойдет для малой компании.

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

Краткое содержание

1. Кирпичики из которых построен шлюз

2. Вводные данные

3. Установка операционной системы CentOS 6.5 x64

4. Настройка сетевых адаптеров

5. Установка и базовая настройка Squid

6. Установка анализатора логов Sarg

7. Настройка firewall

8. Установка и настройка шейпера HTB.init

9. Установка и настройка кэширующего DNS сервера

10. Проверка Интернет доступа

11. Установка и настройка DHCP сервера

12. Источники информации

1. Кирпичики из которых построен шлюз

Связка состоит из:

2. Вводные данные

Здесь описаны данные которые понадобятся при настройке в моих примерах:

  • IP-адрес локальной сети: 192.168.50.0/255.255.255.0
  • Внутренний IP-адрес шлюза: 192.168.50.2
  • Внешний IP-адрес шлюза: 10.168.50.2
  • IP-адрес DNS сервера провайдера: 217.15.11.11
  • Сетевые интерфейсы: eth0 - Интернет и eth1 - локалка

3. Установка операционной системы CentOS 6.6 x64

Если у вас не установлена операционная система CentOS 6 x64, установите ее. Образ этой операционной системы лежит на следующих ftp серверах:

Я устанавливал эту систему в минимальной установке.

Теперь когда система установлена, первым делом настройте сетевые адаптеры.

4. Настройка сетевых адаптеров

У нас сервер играет роль шлюза в Интернет, поэтому он должен иметь два сетевых адаптера.

Операционная система CentOS по умолчанию, дает установленным сетевым картам имена "ifcfg-eth0" и "ifcfg-eth1". В итоге у вас будет два файла:

  • /etc/sysconfig/network-scripts/ifcfg-eth0
  • /etc/sysconfig/network-scripts/ifcfg-eth1

Система Windows адаптеры например обзывает как "Сетевое Подключение по Локальной сети 1" и "Сетевое подключение по Локальной сети 2"

Настройка сетевых адаптеров производится путем редактирования файлов /etc/sysconfig/network-scripts/ifcfg-ethX

В нашем случае этих файлов два, так как сервер имеет всего два сетевых установленных интерфейса.

Откроем первый файл, который отвечает за первый адаптер. Подключим этот интерфейс к Интернету.

DEVICE="eth0"
HWADDR="08:00:27:79:17:85"
NM_CONTROLLED
ONBOOT
GATEWAY=10.168.50.1
IPADDR=10.168.50.2
PREFIX=24
BROADCAST=10.168.50.255
DNS1=217.15.11.11

Жирным шрифтом, я пометил свои изменения, которые произвел в этом файле.

Теперь пришла очередь второго файла, отвечающего за сетевую карту подключенную в локальную сеть.

DEVICE="eth1"
HWADDR="08:00:27:1D:7B:43"
NM_CONTROLLED
ONBOOT
IPADDR=192.168.50.2
PREFIX=24

Перезапустим сетевую службу, чтобы наши изминения вступили в силу:

Как только мы настроили сетевую часть, можно непосредственно приступать к настройке прокси сервера.

5. Установка и базовая настройка Squid

Установим и не много настроим Squid.

Прокси сервер Squid установлен, настроим его под наши скромные нужды, включим прозрачный режим. Открываем файл /etc/squid/squid.conf

Найти в нем строчку:

transparent

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

Поставим службу прокси сервера в автозагрузку:

Установим вспомогательные пакеты, такие как веб сервер "Apache", утилиту закачки файлов "wget".

Разрешим пересылку пакетов через наш шлюз:

Применим новую настройку без перезагрузки:

Пришла очередь анализатора логов, займемся установкой Sarg.

6. Установка анализатора логов SARG

Теперь отредактируем конфигурационный файл /etc/sarg/sarg.conf

Здесь много разных настроек, подправим его под наши нужды:

Откроем файл sarg.conf:

В этом файле добавляем строчку:

Эта настройка открывает доступ к отчетам анализатора для всех ПК.

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

Запустим Sarg в тестовом режиме:


7. Настройка firewall

Настройка фаерволла должна идти по следующей последовательности:

1. Чистка всех цепочек

2. Закрыть все и вся. (DROP)

3. Пропускать все уже инициированные и их дочерние соединения.

4. Локальные разрешить.

6. Пишем что открыть, пробросить и другие свои дополнительные правила и т. п.

Итого смотря на эту последовательность, становится ясно как настраивает правильно фаервол.

Осталось настроить фаервол и шейпер. Но для начала надо отключить:

Отключаем встроенную цепочку "RH-Input":

Firewall Configuration -> Убрать звездочку -> OK -> YES-> QUIT


Для настройки фаервола, создайте файл /etc/sysconfig/firewall.sh

Теперь в этот файл вставьте следующий текст:

iptables -A FORWARD -i eth1 -s 192.168.50.0/24 -p tcp -m multiport --dports 21,22,25,110,143,443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Вставляем наш скрипт в автозагрузку:

Теперь давайте прикрутим шейпер HTB.init.

8. Установка и настройка шейпера HTB.init

У нас два интерфейса на роутере, один который зовется eth0 подключен к Интернету, провайдер по нему дает следующие скорости 20 мбит на входящий и 10 мбит на исходящий трафик.

Сетевая карта под именем eth1 подключена в локальную сеть, скорость ее работы 100 мбит.

Наша задача решить с помощью шейпера следующее:

* разделение канала поровну между машинами

Скрипт HTB.init задействует утилиту tc. Почему используют HTB.init ? Потому что с помощью него, наглядно и легко можно динамически управлять пропускной способностью канала.

Вся идеология этого шейпера строится на классах. Описание классов производится с помощью простых текстовых файлов. Все правила по ограничению скорости лежать в них, эти файлы находятся в папке /etc/sysconfig/htb/

Поставьте его в автозагрузку:

Создайте каталог для конфигурации:

Перейдите в каталог конфигурации htb.init:

Настроим скорость входящего трафика для локальной сети - адаптер eth1

Создадим корневой файл eth1:

В нем впишем текст:

Здесь строчка DEFAULT=20 задает параметр по которому будет учитываться трафик не попадающий ни под одно правило шейпера.

Теперь создадим файл который будет описывать максимальную скорость этого интерфейса:

Впишем в него текст:

Здесь RATE описывает гарантированную пропускную способность, а CEIL описывает максимальную доступную скорость.

А теперь давайте займемся самими ограничениями (нарезкой канала).

Создадим файл eth1-2:10.ssh:

Здесь мы даем гарантированную ширину канала в 128Кбит для сервиса ssh.

Параметр RATE как раз описывает эту скорость. Как и выше было написано CEIL это у нас максимальная доступная скорость если канал не нагружен.

Параметр как RULE описывает порт который нужно контролировать (наш сервис ssh).

Приоритет задается параметром PRIO, у нас он имеет наивысшее значение.

Создадим файл eth1-2:11.contra:

Создадим файл eth1-2:11.web:

Здесь параметр LEAF=sfq отвечает за равномерное распределение канала между участниками локальной сети, всем достанется поровну.

Настроим скорость исходящего трафика

Теперь займемся адаптером внешней сети eth0, здесь нет ограничений.

Последний шаг - запуск системы контроля трафика с помощью следующей команды:

При запуске HTB выйдет окошко с ошибкой:

find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.

Так как ошибка не критичная, и не влияет на работу скрипт, на нее можно не обращать внимания.

Если вы еще не поставили демон в автозагрузку:

9. Установка и настройка кэширующего DNS сервера

Установим пакет Bind, который позволит добавить функцию кэширующего DNS сервера на наш шлюз:

Поставим его в автозагрузку:

Настроим его, откроем файл /etc/named.conf

Запускаем службу named:

10. Проверка Интернет доступа

Проверим работу шлюза, для этого возьмем свободный компьютер с установленной Windows XP в нашей локальной сети. В настройках сетевой карты пропишем:

IP адрес - 192.168.50.10

Адрес шлюза - 192.168.50.2

DNS сервер - 192.168.50.2 или DNS провайдера - 217.15.11.11

Адрес DNS сервера берем нашего шлюза или провайдерский.

11. Установка и настройка DHCP сервера

Чтобы не настраивать всем компьютерам сетевые платы, установим DHCP сервер, который будет автоматически проставляь нужные IP адреса:

Создаем конфигурационный файл /etc/dhcp/dhcpd.conf

Установка 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 пользователя из домена.

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

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

И так, если это выполнено правильно, мы получим ответ 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 адресов, разрешенные):

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

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

Приведенный конфиг 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

CentOS-Squid

Теперь нужно ограничить доступ на Squid, так как изначально он позволяет любому пользователю подключиться с помощью IP-адреса данного сервера.

DNSClient

Чтобы использовать прокси-сервер Squid на телефоне, нужно установить обновленный динамический DNS-клиент.

Для этого можно использовать такие приложения как Dynamic DNS Client для Android или FreeDynPro для iOS.

DNSClient2

Настройте crontab, перезагружающий Squid каждый час, на случай если IP-адрес изменится:

echo 0 */1 * * * service squid reload >> /var/spool/cron/root

4: Настройка прокси-сервера Squid

По умолчанию Squid прослушивает порт 3128. Чтобы изменить порт, отредактируйте /etc/squid/squid.conf.

Чтобы просмотреть данный прокси Squid, не обнаруживая его как прокси, необходимо установить анонимные настройки, добавив следующие строки в /etc/squid/squid.conf:

via off
forwarded_for off
request_header_access Allow allow all
request_header_access Authorization allow all
request_header_access WWW-Authenticate allow all
request_header_access Proxy-Authorization allow all
request_header_access Proxy-Authenticate allow all
request_header_access Cache-Control allow all
request_header_access Content-Encoding allow all
request_header_access Content-Length allow all
request_header_access Content-Type allow all
request_header_access Date allow all
request_header_access Expires allow all
request_header_access Host allow all
request_header_access If-Modified-Since allow all
request_header_access Last-Modified allow all
request_header_access Location allow all
request_header_access Pragma allow all
request_header_access Accept allow all
request_header_access Accept-Charset allow all
request_header_access Accept-Encoding allow all
request_header_access Accept-Language allow all
request_header_access Content-Language allow all
request_header_access Mime-Version allow all
request_header_access Retry-After allow all
request_header_access Title allow all
request_header_access Connection allow all
request_header_access Proxy-Connection allow all
request_header_access User-Agent allow all
request_header_access Cookie allow all
request_header_access All deny all

Читайте также: