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