Введение
Существует проверенная временем связка для прокси сервера – squid + sams. Я настраивал ее еще лет 8 назад на Freebsd. Недавно у меня появилась необходимость настроить что-то подобное на CentOS 7, и я с удивлением обнаружил, что ничего принципиально нового с тех пор не появилось. Никакой более удобной и информативной web панели к squid не придумали.
Так что будем настраивать проверенный временем набор программ. Ко всему прочему, удобнее его сразу интегрировать с виндовым доменом, для простой авторизации на прокси с помощью учетных записей домена. Так проще будет смотреть статистику и давать доступ. Особенно это актуально, если у вас есть терминальные пользователи, работающие с одного ip. Здесь у вас вообще нет других вариантов, если вам нужна статистика и ограничение доступа по пользователям.
Приступим к настройке. В своей работе я буду подразумевать, что вы установили и настроили centos по моим рекомендациям. Советую ознакомиться с материалом. Это позволит здесь не тратить время на второстепенные настройки, которые не имеют прямого отношения к теме статьи.
Авторизация на основе групп AD
Ранее, мы предоставили доступ к сети Интернет любому пользователю Active Directory. Теперь ограничим доступ с помощью групп AD DS.
Для начала, создаем 2 группы пользователей, например:
- squidusers. Пользователи squid, которым будет предоставлен доступ к сети Интернет с ограничениями.
- squidsuperusers. Этим пользователям будет предоставлен неограниченный доступ.
Теперь на прокси-сервере открываем конфигурационный файл squid:
vi /etc/squid/squid.conf
Добавляем после настройки аутентификации:
external_acl_type squid_users_from_ad_krb ttl=300 negative_ttl=60 %LOGIN /usr/lib64/squid/ext_kerberos_ldap_group_acl -g [email protected]
external_acl_type squid_superusers_from_ad_krb ttl=300 negative_ttl=60 %LOGIN /usr/lib64/squid/ext_kerberos_ldap_group_acl -g [email protected]
external_acl_type squid_users_from_ad_ntlm %LOGIN /usr/lib64/squid/ext_wbinfo_group_acl -d
* где
- squid_users_from_ad_krb — произвольное название acl, авторизованных пользователей в AD через kerberos, принадлежащих группе squidusers в домене DOMAIN.LOCAL.
- squid_superusers_from_ad_krb — произвольное название acl, авторизованных пользователей в AD через kerberos, принадлежащих группе squidsuperusers в домене DOMAIN.LOCAL.
- squid_users_from_ad_ntlm — произвольное название acl, авторизованных пользователей в AD через NTLM.
В секции acl:
#acl auth proxy_auth REQUIRED
acl squid_users_acl_krb external squid_users_from_ad_krb
acl squid_superusers_acl_krb external squid_superusers_from_ad_krb
acl squid_users_acl_ntlm external squid_users_from_ad_ntlm squidusers
acl squid_superusers_acl_ntlm external squid_superusers_from_ad_ntlm squidsuperusers
* где
- squid_users_acl_krb — произвольное название acl для всех, кто входит в squid_users_from_ad_krb;
- squid_superusers_acl_krb — произвольное название acl для всех, кто входит в squid_superusers_from_ad_krb;
- squid_users_acl_ntlm — произвольное название acl для всех, кто входит в squid_users_from_ad_ntlm;
- squid_superusers_acl_ntlm — произвольное название acl для всех, кто входит в squid_superusers_from_ad_ntlm;
* предыдущую acl для общей аутентификации комментируем.
В секции allow:
#http_access allow auth
http_access allow squid_superusers_acl_krb
http_access allow squid_superusers_acl_ntlm
http_access allow squid_users_acl_krb
http_access allow squid_users_acl_ntlm
* разрешаем доступ для созданных ранее acl; предыдущее разрешение для всех пользователей AD запрещаем. На данном этапе разницы между пользователями групп squidusers и squidsuperusers нет — позже мы настроим ограничение доступа к сайтам, где будем применять разные группы для предоставления различных прав.
Перечитываем конфигурацию прокси-сервера:
squid -k reconfigure
Установка Squid на Centos 7.3
Squid это пожалуй самый распространенный прокси-сервер для Linux. Прокси-сервер позволяет организовывать контролируемый доступ к сети интернет, а также осуществлять мониторинг ресурсов, на которые заходил пользователь. Может быть прозрачным (незаметным) для пользователя или нет, проксировать (пропускать через себя) различные протоколы, авторизовать пользователей через домен или по паролю, использовать списки доступа (ACL) и так далее. Как и большинство демонов Linux установить Squid достаточно несложно. В Centos для этого используется менеджер пакетов yum.
После завершения установки необходимо выполнить настройку squid. Основным файлом настройки являетcя файл /etc/squid/squid.conf. Его можно редактировать обычным текстовым редактором, например Vi, Nano и т.д. Squid имеет достаточно большое количество настроек, они описаны например на официальном сайте. Файл конфигурации работает сверху вниз — т.е то, что описано выше в файле срабатывает первым. Рассмотрим минимально необходимые из них.
- acl localnet src … и acl localnet src 10.0.0.0/8 — определяют какие сети для squid будут являться локальными. Необходимо оставить одну, остальные закомментировать.
- acl … ports и acl Safe_ports 21 — определяют какие порты будет контролировать Squid.
- http_access
- http_access deny !Safe_ports
- http_access deny all
- Правила доступа deny — запрет, allow разрешение
- Запрещает соединение по всем портам, кроме группы !Safe_ports
- Запрещает все соединения, кроме тем что были описаны выше. после этих слов не должно быть других описаний правил доступа иначе они не сработают.
- http_port указывает на каком порту работает прокси-сервер
- transparent указывает что прокси будет прозрачным.
- cache_dir ufs /var/spool/squid 4096 32 256 — указывает где будут созданы каталоги под кэш, суммарный размер, и количество каталогов 1 и второго уровня.
Например нижеприведенный листинг файла /etc/squid/squid.conf настроит прозрачный прокси-сервер (сервер который не заметен пользователю, т.е не требует специальной настройки в браузерах).
После того как первоначальная настройка выполнена Squid необходимо проинициализировать командой squid -z. Это создаст структуру папок для кеша.
Убедится что сервис запущен, а также управлять им, можно используя systemctl.
- systemctl status squid — проверить запущен ли squid
- systemctl start squid — запустить squid
- systemctl stop squid — остановить squid
- systemctl enable squid — добавить squid в автозагрузку
После этого данный сервер можно использовать для фильтрации трафика в вашей сети.
источник
Установка прокси сервера squid
Теперь установим сам прокси сервер squid:
# pkg install -y squid
Добавляем squid_enable=»YES» в /etc/rc.conf и запускаем его:
# /usr/local/etc/rc.d/squid start
Сейчас можно проверить работу прокси сервера squid. В дефолтной конфигурации он должен выпускать в интернет по ip, список которых есть в конфигурационном файле — /usr/local/etc/squid/squid.conf. Рекомендую на всякий случай это сделать, чтобы убедиться в корректности работы сквида.
Если вы будете использовать кэш, то перед запуском сквида раскомментируйте в конфигурационном файле соответствующую настройку и выполните команду в консоли:
# squid -z
Чтобы самс корректно добавлял свои изменения в файл конфигурации, в нем должны быть метки, начинающиеся с # TAG:. Раньше дефолтный конфиг сквида уже был с ними, но затем его существенно уменьшили в размере и метки из него исчезли. Нам нужно добавить их самим. Вот необходимый набор этих меток. Между ними обязательно должна быть пустая строка:
# TAG: acl # TAG: url_rewrite_access # TAG: url_rewrite_program # TAG: url_rewrite_children # TAG: delay_pools # TAG: delay_class # TAG: delay_access # TAG: delay_parameters # TAG: http_access # TAG: http_access2 # TAG: icp_access
Предупреждаю, если вы вдруг забудете. Проверьте ротацию логов squid. Если она не будет работать, то есть большая вероятность, что логи займут весь раздел диска. При интенсивном использовании прокси сервера, логи разрастаются очень быстро
Обратите на это внимание.
Дополнительные материалы по Freebsd
Онлайн курс Infrastructure as a code
Если у вас есть желание научиться автоматизировать свою работу, избавить себя и команду от рутины, рекомендую пройти онлайн курс Infrastructure as a code. в OTUS. Обучение длится 4 месяца.
Что даст вам этот курс:
- Познакомитесь с Terraform.
- Изучите систему управления конфигурацией Ansible.
- Познакомитесь с другими системами управления конфигурацией — Chef, Puppet, SaltStack.
- Узнаете, чем отличается изменяемая инфраструктура от неизменяемой, а также научитесь выбирать и управлять ей.
- В заключительном модуле изучите инструменты CI/CD: это GitLab и Jenkins
Смотрите подробнее программу по .
Рекомендую полезные материалы по Freebsd: |
Описание установки Freebsd 11 на одиночный диск, либо на софтовый raid1, сделанный средствами zfs, которые поддерживает стандартный установщик. Базовая настройка Freebsd, которую можно выполнить после установки сервера общего назначения. Представлены некоторые рекомендации по повышению удобства пользования и безопасности. Описание и нюансы обновления системы Freebsd с помощью утилиты freebsd-update. Показано пошагово на конкретном примере обновления. Настройка Freebsd шлюза для обеспечения выхода в интернет. Используется ipfw и ядерный нат, dnsmasq в качестве dhcp и dns сервера. Мониторинг сетевой активности с помощью iftop. Подробная настройка на Freebsd прокси сервера squid + sams2 — панели управления для удобного администрирования. Настройка максимально быстрого web сервера на базе Freebsd и nginx + php-fpm. Существенный прирост производительности по сравнению с классическим apache. Настройка web сервера на Freebsd в связке с apache, nginx, php и mysql. Пошаговая установка и настройка каждого компонента. |
Web сервер на CentOS 8
Итак, наш веб сервер centos будет состоять из трех основных компонентов — http сервера apache, интерпретатора языка программирования php и сервера баз данных mysql. Познакомимся немного с каждым из них:
- Apache — http сервер или просто веб сервер апач. Является кросплатформенным ПО, поддерживающим практически все популярные операционные системы, в том числе и Windows. Ценится прежде всего за свою надежность и гибкость конфигурации, которую можно существенно расширить благодаря подключаемым модулям, которых существует великое множество. Из недостатков отмечают большую требовательность к ресурсам, по сравнению с другими серверами. Держать такую же нагрузку, как, к примеру, nginx, apache не сможет при схожих параметрах железа.
- PHP — язык программирования общего назначения, который чаще всего применяется в веб разработке. На сегодняшний день это самый популярный язык в этой области применения. Поддерживается практически всеми хостинг-провайдерами.
- Mysql — система управления базами данных. Завоевала свою популярность в среде малых и средних приложений, которых очень много в вебе. Так что, как и php, на сегодняшний день является самой популярной бд, использующейся на веб сайтах. Поддерживается большинством хостингов. В CentOS вместо mysql устанавливается mariadb — ответвление mysql. Они полностью совместимы, возможен в любой момент переход с одной субд на другую и обратно. Я встречал информацию, что mariadb пошустрее работает mysql и люди потихоньку перебираются на нее. На практике мне не довелось это наблюдать, так как никогда не работал с нагруженными базами данных. А в обычных условиях разница не заметна.
Подопытным сервером будет выступать виртуальная машина от ihor, характеристики следующие:
Процессор | 2 ядра |
Память | 3 Gb |
Диск | 30 Gb SSD |
Хочу сразу уточнить, что разбираю базовую дефолтную настройку. Для улучшения быстродействия, повышения надежности и удобства пользования нужно установить еще несколько инструментов, о чем я расскажу отдельно. В общем случае для организации веб сервера будет достаточно того, что есть в этой статье.
Установка и настройка Squid
Устанавливаем прокси-сервер следующей командой:
И открываем на редактирование конфигурационный файл:
Если сеть клиентских компьютеров отличается от стандартной (192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8), необходимо ее добавить в acl, например:
acl localnet src 217.66.157.0/24
acl localnet src «/etc/squid/acl_localnet»
* кавычки обязательны ** после необходимо создать файл /etc/squid/acl_localnet и с каждой строчки перечислить разрешенные IP-адреса.
Чтобы разрешить весь трафик, добавляем следующую строчку:
* важно, чтобы она была выше запрещающей — http_access deny all
Настраиваем директорию для кэша:
cache_dir ufs /var/spool/squid 4096 32 256
* где ufs — файловая система (ufs для SQUID является самой подходящей); /var/spool/squid — директория хранения кэша; 4096 — объем пространства в мегабайтах, которое будет выделено под кэш; 32 — количество каталого первого уровня, которое будет создано для размещение кэша; 256 — количество каталого второго уровня, которое будет создано для размещение кэша.
Теперь создаем структуру папок под кэш следующей командой:
И уже можно запускать squid:
Не забываем разрешить его автозапуск:
Фильтрация HTTPS трафика в интернет-шлюзе ИКС
Рассмотрим теперь ситуацию, когда нам нужно запретить пользователю или группе пользователей доступ к какому-то сайту. Пусть это будет mail.ru. Идем в настройки правил пользователя и добавляем Запрещающее правило прокси.
Идем к пользователю и проверяем. Если сайт открыть по http, то будет видно запрещающее сообщение. Если сайт https, то никакого сообщения не будет, он просто не откроется.
Пользователей можно объединять в группы и настраивать запреты по группам. Помимо ограничений по адресам сайтов, можно настроить и другие правила запретов и разрешений.
Давайте теперь включим контентный фильтр и настроим ограничения доступа на основе содержимого https страниц. Фильтровать можно будет как по готовым спискам от госорганов, так и создавать свои. Для этого нам надо включить Контент-фильтр в разделе Защита.
Далее нужно создать сертификат, который будет использоваться для MITM. То есть нам надо этот сертификат поместить на прокси сервер и в доверенные сертификаты клиента. Только в таком случае возможно анализировать и разбирать https трафик. Других способов нет. Создаем сертификат в разделе Защита -> Сертификаты.
Теперь указываем прокси серверу использовать этот сертификат. Идем в раздел Сеть -> Прокси -> Настройки.
Делаем экспорт этого сертификата и передаем его на компьютер клиента.
На компьютере клиента устанавливаем этот сертификат в хранилище Доверенные корневые центры сертификации.
Теперь нам можно создать свой список в Контент-фильтре. Я назвал его Мой список и добавил туда слово google, которое фильтр будет искать в содержимом страницы.
Добавляем пользователю правило Сканировать трафик с помощью контент-фильтра.
Теперь идем на компьютер пользователя и пробуем открыть сайт google.com, где на странице точно встречается слово google.
Если на каком-то сайте будет встречаться слово google, открываться он не будет. Можно убедиться, что MITM работает, проверив сертификат любого https сайта. Там будет стоять метка нашего CA.
Если браузер использует не системное хранилище сертификатов, а свое, например Firefox, то сертификат нужно добавить отдельно в браузер через его настройки.
Таким образом фильтруется https трафик. С помощью подмены сертификата можно смотреть подробную статистику по всем посещенным страницам пользователя. Срабатывание контент-фильтра логируется.
Анализ сетевой активности на шлюзе в linux
В данной конфигурации шлюз может успешно функционировать. Но иногда хочется посмотреть, а что вообще на нем происходит. Например, кто-то занимает весь канал, интернет тормозит, а мы как слепые котята сидим и не видим ничего. Нужно какое-то средство для просмотра загрузки сети на шлюзе. И такое средство есть — программа iftop.
Она отсутствует в стандартном репозитории CentOS 7. Для ее установки необходимо подключить репозиторий epel:
# yum -y install epel-release
Устанавливаем iftop на CentOS 7:
# yum -y install iftop
Теперь мы можем смотреть загрузку сети на шлюзе в режиме реального времени. Чтобы увидеть сетевую активность, достаточно запустить iftop:
# iftop
По-умолчанию она слушает интерфейс eth0. Это внешний интерфейс шлюза, на нем все подключения будут отображены от имени самого шлюза и определить, кто же в сети занимает канал мы не сможем. Чтобы это увидеть, необходимо запустить просмотр сетевой активности на локальном интерфейсе. Сделать это не сложно, достаточно запустить iftop с параметром:
# iftop -i eth1 -P
Теперь уже гораздо интереснее. Я еще добавил параметр -P, который отображает порты, по которым проходят соединения. Посмотрим, кто больше всех загружает канал интернета:
В моем случае это пользователь с ip 192.168.10.98, на котором я запустил проверку скорости интернета с серверов Яндекса.
Если у вас не большая сеть и не много пользователей, то с помощью этой простой и эффективной утилиты вы сможете легко определить, кто, к примеру, качает торренты или чем-то еще загружает канал.
Заключение
Пришло время подвести итог того, что мы сделали. Проведена большая работа по настройке прокси сервера на базе CentOS 7. Были выполнены следующие шаги:
- Сервер был введен в домен Windows для настройки авторизации доменных пользователей на прокси сервере.
- Настроен прокси сервер squid для работы с доменными учетными записями.
- Собран из исходников многофункциональный web интерфейс для управления squid – sams2 самой последней на текущий момент версии.
Первые два этапа сами по себе позволяют полноценно пользоваться прокси сервером, но не дают удобства и гибкости настройки. Иногда это и не нужно и можно не заморачиваться с установкой и настройкой sams. Как ни крути, но установка достаточно хлопотная и нет гарантии, что через некоторое время после смены версий каких-нибудь пакетов или исходников, не появятся новые нюансы, которые не будут отражены в этой статье. С ними придется разбираться заново.
Уровень данной статьи получился чуть выше, чем может рассчитывать новичок в линуксе, но тем не менее я постарался расписать все максимально подробно. Все этапы проверены на чистой системе, чтобы убедиться в достоверности данных и отсутствии ошибок. То есть сначала была исследована тема, настроена конфигурация на тестовой машине. После того, как я убедился, что все работает так, как мне нужно, я на чистой системе еще раз с нуля провел всю конфигурацию по своей шпаргалке и зафиксировал эту чистую настройку в статье.
Онлайн курс по Linux
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом “Administrator Linux. Professional” в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.
Что даст вам этот курс:
- Знание архитектуры Linux.
- Освоение современных методов и инструментов анализа и обработки данных.
- Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
- Владение основными рабочими инструментами системного администратора.
- Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
- Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .