README.md

Описание

Набор сценариев safews4lin предназначен для упрощения адаптации рабочей станции под управлением ubuntu (20.04) под использование в качестве учебной машины. Для достижения цели применяется набор настроек ограничивающих доступ в интернет до рунета и/или до избранных сайтов. Ограничения накладываются на учетная запись состоящей в заданной группе. Помимо основных функций добавлен ряд настроек упрощающих удаленное сопровождение установки.

состав пакета

  • audit/ базовые правила аудита
  • bin/
    • cidr2ipset конвертер списка сетей в формате CIDR в команды для ipset restore
    • init.audit.sh настройка аудита
    • init.autossh.sh настройка autossh
    • init.network.sh настройка сетевых ограничений
    • init.otp.sh настройка OTP
    • init.squid.sh настройка squid
    • init.x11vnc.sh настройка достпа к X-сессии
    • init.whois.sh настройка допусков через анализ whois
    • init.grub.sh настройка пароля на grub
    • range2cidr конвертер списка диапазонов в CIDR
  • data/runet.db вероятн список ip-сетей зоны RU
  • iptables заготовки правил для iptables и плагин для загрузки ipset
  • squid.regular файлы нужные для настройки сквида в режиме обычного прокси
  • squid.transparent для сквида в режиме прозрачного прокси (не доделано)
  • x11vnc конфиги для x11vnc

установка и применение

Настраивалось и проверялось все на свежей версии ubuntu 20.04 с графической оболочкой unity/gdm3. В случае изменений конфигурации вполне вероятно что-то поломается.

ограничение доступа только рунетом

Выполнить сценарий init.network.sh. Будет создана группа safeusers с gid=8425, произведена инициализация правил iptables с отдельной цепочкой OUTPUT для трафика членов группы. Правила сохранены в /etc/iptables/rules.[v4|v6]. На базе data/runet.db созданы списки ipset которые будут сохранены в /etc/iptables/rules.ipset. В /usr/share/netfilter-persistent/plugins.d/10-ipset скопирован сценарий инициализации списков. В результате все кто будет добавлен в контрольную группу будут ограничены по доступу к сети перечнем заданным в соответствующих ipset. Следует учитывать, что они не включают локальнкую сеть и при необходимости ее следует задать отдельно.

ВНИМАНИЕ: Данный этап является обязательным во всех случаях т.к. именно на нем создаются ограничения препятствующие бесконтрольному выходу в сеть. Если план развертывания предполагает доступ только на белый списой сайтов через прокси (следующий этап), достаточно удалить из /etc/iptables/rules.ipset все записи для адресов, оставив настройки цепочек ipset.

Белые списки сайтов

Так как доступа к рунету может быть не достаточно, либо нужен режим доступа только на заданные сайты, в схему можно добавить прокси (squid) работа через который позволит либо дополнить рунет списком ресурсов перечисленных в белом списке либо вообще ограничить перечень сайтов конкретными наименованиями. Настройка производится выполнением скрипта bin/init.squid.sh который скопирует из squid.regular/ списки и конфиг и перезапустит прокси который будет принимать соединения на 127.0.0.1:3128.

Базовый список доступа squid.regular/lists/whitelist детальнее описан в WHITELIST.md.

Дополнение squid.regular/lists/blacklist позволяет ограничить доступ к сайтам которые проходят паровозом в составе runet.db.

Дополнительно, можно использовать скрипт bin/squid.learn который переводит сквид в разрешительный режим (подсовывая конфиг squid.regular/learn.conf) и собирает перечень адресов куда был осуществлен доступ, с последующим добавлением в whitelist. В данном случае предполагается что оператор прокликает по нужному сайту в нужных местах и получит набор допусков достаточный для того, что бы шариться по нему позднее когда ограничения будут снова взведены.

ВНИМАНИЕ: ввиду того, что сквид не расшифровывает содержимое которым обменивается с интернетом браузер, все ограничения осуществляются исключительно по доменам верхнего уровня т.к. больше ничего не видно. В связи с этим повлиять на конкретные пути в рамках сайта или осуществить фильтрацию контента (например с поисковиков) в этом режиме не возможно.

аудит

Настройка производится выполнением команды bin/init.audit.sh. Все программы выполняемые членами группы safeusers будут записаны в /var/log/audit.log.

autossh

Применяется для организации доступа к машине за NAT. Настройка запускается выполнением команды bin/init.autossh.sh. Будет сгенерирована ключевая пара и создана служба autossh которая соединяется с заданным белым адресом под указанной учетной записью и пробрасывает с удаленной машины порт 8422 на локальный 22.

otp

Подготовка для включения двухфакторной аутентификации. Добавляются правила pam.d/common-auth которые требуют ввода одноразового кода для членом группы otp. Инициализация затравки должна производится самостоятельн путем выполнения с правами целевого пользователя программы googlt-authenticator.

x11vnc

Удаленный доступ к X-сессии пользователей из группы safeusers. При выполнении bin/init.x11vnc.sh будет запрошен пароль на доступ к vnc сессии и создан файл с паролем /etc/x11vnc.pw который будет использоваться всеми x11vnc запускаемыми для сессии пользователей группы safeusers. Автозапуск реализован путем копирования сценария x11vnc/98x11-vnc_start в каталог /etc/X11/Xsession.d/.

whois

Фильтры по адресам могут быть дополнены на основе анализа отбоек в логах. Для этого используется модуль bin/init.whois.sh который запускает службу safews4lin-iptracker. Данны модул по факту отбоя в доступе к какому либо адресу выгружает whois запись для наего и пробует ее проверить по условиям перечисленным в соответствующей секции конфига. Если проверка пройдена, то адрес добавляется в рантайм конфиг и в сохраненный. В процессе работы пополняется бд /var/tmp/iptracker.db что бы при перезапуске не терять уже опрошенные адреса. Работа модуля прозрачна (если конечно у вас не тормозят whois-запросы) и задержки при доступе к валидным адресам составляет не больше 5 секунд. В базовом конфиге прописаны допуски по стране автономки = ру, ресурсы принадлежащие вики и каноникалу.

GRUB

Инициализация через через bin/init.grub.sh. Создается заданный пользователь с паролем и настраивается беспарольная загрузка по-умолчанию и запрос учетки при попытке войти в подменю с режимом восстановления или редактированием настроек.

Заметки по результатам опытной эксплуатации

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

TODO

  • трекинг отбоек в логах, прогон whois и определение страны на лету с добавлением в белый список. + внешний скрипт проверки для кастомизации
  • трекинг отбоек в сквиде для дополнения белого списка адресов если запрошеных урл удовлетворяет каким-то параметрам
  • какой нибудь фронтенд для управления списками и режимом доступа неквалифицированным оператором
  • модуль запрета выполнения user-owned files созданны позднее заданного времени
Описание

настройка рабочей станции linux (ubuntu) с контролем доступа в интернет

Конвейеры
0 успешных
0 с ошибкой