Описание
Набор сценариев 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
- cidr2ipset конвертер списка сетей в формате 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) с контролем доступа в интернет