Linux content filtering server

Ubuntu → Настройка прокси-сервера SQUID+простой контент фильтр на Ubuntu Server 10.04 / 10.10

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

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

sudo apt-get install squid
sudo nano /etc/squid/squid.conf

По умолчанию SQUID использует для работы порт 3128, но нам необходимо сделать так чтобы не было необходимо перенастраивать каждого клиента, для этого необходимо использовать прозрачное проксирование, по этому нам в строку определяющую порт, необходимо добавить transparent, чтобы все конфиге это выглядело:

http_port 3128 transparent
#acl localnet src 10.0.0.0/24 # 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

Для повышения безопасности сервер будет обслуживать запросы только из локальной сети, IP адреса в моей локальной сети из диапазона 192.168.1.0/24,
Где: 192.168.1.0-подсеть, /24-количество бит в маске-идентификаторе сети (255.255.255.0)

#acl localnet src 10.0.0.0/24 # RFC1918 possible internal network #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.1.0/24 # RFC1918 possible internal network

Разрешаем доступ из localnet:

http_access allow localnet

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

cache_dir ufs /var/spool/squid 4096 32 256

Здесь все можно оставить как есть.

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

memory_pools on memory_pools_limit 50 MB

50мб установлено по умолчанию, у меня используется это значение-вполне нормально работает.

Для уведомления пользователей об ошибках можно установить страницу ошибок на русском задается она в параметре error_directory и установить кодировку Windows-1251, для желающих можно зайти в директроию /usr/share/squid/errors/ и там посмотреть список папок.

error_directory /usr/share/squid/errors/Russian-1251

На этом основная настройка закончена, сохраняем изменения выходим.
Нам необходимо перестроить кеш который хранится в /usr/sbin/squid

sudo /usr/sbin/squid -z sudo /etc/init.d/squid start

Технически сервер работает и готов к использованию и данной, минимальной конфигурации, вполне хватит для тестов, но он висит на порту 3128 к которому http запросы никаким образом не попадают, для этого нам необходимо завернуть порт 80 и 8080 на 3128 где их примет Squid и обработает.

Читайте также:  Все о скриптах linux

Лезем в файл rc.local

В локальную сеть у меня смотрит интерфейс eth2 IP которого 192.168.1.1
В сеть провайдера eth1, из этих условий вытекает то что указано ниже:

iptables -t nat -A PREROUTING -i eth2 ! -d 192.168.1.0/24 -p tcp -m multiport --dports 80,8080 -j DNAT --to-destination 192.168.1.1:3128

Добавляем это в rc.local заменив IP адрес шлюза на тот что используется в вашей сети.
Перезагружаем шлюз чтобы настройки применились, можно конечно перезапустить rc.local, но иногда возникают непонятные глюки, которые отнимают много времени. Намного быстрее перезагрузить систему!

Проверяем на любом клиентском ПК интернет должен работать, без дополнительных настроек браузера.
В целом кеширование данных передаваемых из сети, а также DNS запросов от пользователей, будет производиться, но нам необходимо заблокировать, некоторые сайты и создать нечто, похожее на контент-фильтр.

Собирать в «рукопашную» доменные адреса порников- довольно утомительное и неблагодарное занятие, быстрое гугление выдало базу URL адресов, которые были рассортированы по категориям, меня интересовала категория adult, база занимала 14Мб -для текстового файла, реально много, попытка скормить ее? как есть Squid, с треском провалилась прокси-сервер просто отказывался запускаться.
Пришлось немного поработать руками, были удалены дублирующиеся записи и домены находившиеся на бесплатных хостингах типа narod.ru, pochta.ru и прочих, т.к. размещение сайтов данной тематики, является нарушением условий использования, то они довольно быстро прибиваются администрацией этих ресурсов, зачастую, они там живут не более месяца, а места занимают много.
Для простоты обслуживания я их рассортировывал по доменным зонам com, ru, net, org. Для тех кто будет использовать мои наработки, то их можно копировать как есть, все названия и расширения из данной статьи сохранены.
В результате удалось сократить размер файла до 1,7Мб, конечно многое пришлось выкинуть, но на эффективность рабы это не сильно повлияло.

Теперь нам необходимо добавить правила для заблокированных сайтов

sudo nano /etc/squid/squid.conf

И добавляем туда следующее:

acl ru url_regex "/etc/squid/ru.acl" acl com url_regex "/etc/squid/com.acl" acl org url_regex "/etc/squid/org.acl" acl net url_regex "/etc/squid/net.acl" http_access deny ru http_access deny com http_access deny org http_access deny net

Для тех кто использует файлы из архива, их достаточно скопировать в /etc/squid/.
Чтобы заблокировать сайт достаточно добавить его в один из файлов и перезагрузить squid.
Перезапускаем Squid:

sudo /etc/init.d/squid stop sudo /etc/init.d/squid start

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

Читайте также:  Просмотр таблицы маршрутизации linux

Источник

Сервер контентной фильтрации на базе Debian 9 «Stretch»

Прокси-сервер

Вопрос контентной фильтрации в образовательном учреждении остается все также на повестке дня и по сей день. Никто не снимал ответственность со школы за неисполнение Федерального закона от 29.12.2010 N 436-ФЗ (ред. от 29.06.2015) «О защите детей от информации, причиняющей вред их здоровью и развитию» . Поэтому в каждом образовательном учреждении назначается ответственный за информационную безопасность, которая включает в себя и ответственность за работу контентной фильтрации. Решить эту задачу можно разными способами. Один из таких — настройка сервера контентной фильтрации.

Работа в этом направлении разбивается на три этапа:

  1. Подготовка нормативной документации.
  2. Настройка сервера контентной фильтрации.
  3. Настройка ПК в локальной сети образовательного учреждения.
1. Подготовка нормативной документации

Этот этап очень важен, так как именно он будет определять правомерность действий ответственного лица при исполнении возложенных на него задач. Как только пакет документов разработан (посмотреть примеры можно здесь), можно переходить к наиболее сложному этапу — настройке сервера.

2. Настройка сервера контентной фильтрации

Ключевая роль сервера — обеспечение техническими и программными средствами выполнение 436-ФЗ. Сервер контентной фильтрации может физически располагаться где угодно, все зависит от того как специалист настроит сеть и обмен трафиком с сетью Интернет. Как организовать работу локальной сети можно прочитать здесь.

В качестве платформы для нашего сервера мы воспользуемся операционной системой Debian 9 «Stretch». Однако, так как у нас имеется сервер виртуальных машин на базе Proxmox, то для экономии ресурсов школы мы организуем работу сервера контентной фильтрации на базе контейнера. Такой подход позволит нам создавать снимки на ключевых этапах настройки и организовать периодическое бэкапирование сервера. Процесс разворачивания системы из контейнера достаточно прост и непродолжителен по времени.

После того как мы получим в распоряжение готовую систему — приступаем к ее настройке под наши нужды.

В нашем случае у виртуальной машины один сетевой адрес, в качестве DNS сервера укажем адреса Яндекс.DNS — семейный.

Яндекс.DNS для CT

Еще один способ фильтрации трафика нам не повредит.

Позволим трафику свободно проходить через наш сервер. Для этого в файле /etc/sysctl.conf заменим строку net.ipv4.ip_forward=0 на net.ipv4.ip_forward=1
Если строчка закомментирована — то нужно будет раскомментировать её.

Читайте также:  Linux find and chmod

Для применения изменений необходимо перезагрузить систему или выполнить команду:

Не всем нравиться работать с конфигами в консоли, поэтому можно установить систему управления Webmin и администрировать сервер при помощи веб-интерфейса.

Находим пункт «Прокси-сервер Squid» и устанавливаем его:

Webmin - Прокси-сервер Squid

После несложных настроек переходим в раздел «Управление доступом» и создаем ACL для нашей локальной сети или ее диапазона:

ACL - адрес клиента

В нашем случае адрес имеет вид:

Редактирование ACL

Сохраняем изменения и переходим на вкладку «Ограничения прокси»:

Ограничения прокси

Добавляем наше правило в разрешенные и применяем изменения.

Переходим в консоль и скачиваем архив инсталяционного пакета программы для организации контентной фильтрации фильтрации Rejik. На момент написания статьи актуальная версия Редиректор 3.2.12 для squid версии 3.4 и старше.

Распаковываем архив и вносим изменения в файл Makefile:

Устанавливаем дополнительные пакеты:

Собираем пакет и инсталлируем его:

Rejik будет установлен в директорию /usr/local/rejik3/

Во избежание проблем:

Открываем на редактирование конфиг Squid и в секцию url_rewrite_program вносим строку:

Пакет с первичной базой бан-листов можно, также, скачать с официального сайта. Но изначально Rejik настроена на фильтрацию по «черным» спискам, нас же интересует фильтрация по «Белым». Для этого в конфиге Rejik добавляем раздел и формируем его следующим образом:

work_ip [диапазон ip адресов, на которые распространяется правило]ban_dir /usr/local/rejik3/banlists/whitelists
url [веб-сервер]/whitelist.html
reverse
#log off

work_ip — правило для компьютерного класса. В него включена подсеть класса, работающего по «белым спискам»

url [веб-сервер]/whitelist.html — страница, для перенаправления в случае попытки перейти на адрес, не входящий в «белый» список.

Соответственно в директории /usr/local/rejik3/banlists должна находится директория whitelists, аналогичная banners.

Последний штрих.

«Заворачиваем» весь трафик на ПК в нашей сети на прокси-сервер:

#iptables -t nat -A PREROUTING -s [наша сеть/маска] -p tcp -m multiport —dport 80,443,8080 -j REDIRECT —to-port 3128

После этого все запросы на ПК в локальной сети будут уходить на порт 3128 нашего сервера.

3. Настройка ПК в локальной сети образовательного учреждения.

В сетевых настройках подконтрольных ПК необходимо указать в качестве шлюза IP-адрес нашего сервера. А после того как мы «завернули» весь трафик на прокси-сервер, то пользователь не сможет выйти в сеть Интернет, пока не задаст в настройках браузера адрес прокси-сервера и его порт:

Squid - настройка Firefox

Итог

После всех проделанных действий мы получим рабочий вариант сервера контентной фильтрации на базе свободно-распространяемого программного обеспечения. Формирование «черных» списков можно по этой инструкции. А для «белых» списков, в качестве основы, можно взять здесь.

Источники:

Источник

Оцените статью
Adblock
detector