- PVSM.RU - https://www.pvsm.ru -
Привет, Хабр ие!
Пока серьезные дядьки в корпорациях (в том числе и в Canonical) закручивают гайки нам, простым смертным, превращая Ubuntu в подобие Windows своей телеметрией и прочими новшествами вроде Snap-пакетов, я решил, что терпеть это больше не могу (да и не хочу).
Я по крупицам собрал свой многолетний опыт харднинга Debian-подобных систем, раскидал его по главам и решил написать книгу. Начну потихоньку выкатывать интересные, на мой взгляд, моменты, которые я выстрадал сугубо опытным путем и, конечно же, бесконечными бессонными ночами. Полный текст я, разумеется, публиковать здесь не буду — я выдираю лишь самые интересные (опять же, на мой взгляд) куски, которые действительно оценят как энтузиасты, так и люди, вообще не относящиеся к IT сфере.
Весь проект, разумеется, полностью бесплатный, открытый и живет под лицензией GNU GPLv3 на GitHub. Пока что мануал там доступен на двух языках — английском и русском (предусмотрел я 17), но естественно я буду пополнять всё по мере изучения остальных 15-и языков (ха-ха, шутка).
Начну я сразу, пожалуй, с конкретно нужного и важного (даже сейчас думаю с чего начать лучше, чтобы не написать лишнего и не лить воду).
Допустим, что тут есть те, кто далеки от работы в Linux в целом и способны лишь установить и маломальски её настроить. Перейдем наверное сразу к 26.04 и настройке Ptyxis так как тут действительно с первых минут после гномовского терминала не очень привычно ориентироваться.
Перед тем как перейдем на постоянное использование «Птыксиса», настроим его для большего комфорта.
Справа в верхней части окна, нажимаем на кнопку «Бургер-меню» (три горизонтальные полоски) и заходим в раздел «Preferences». Здесь мы сразу попадаем в меню «Appearance», где программа любезно предложит выбрать готовый пресет для нашей дальнейшей работы.
Первым делом я рекомендую пролистать меню немного вниз и деактивировать ползунок «Use System Font», а далее уже выбрать необходимый размер шрифта.
Выбор цветовых палитр предустановлен, в самом верху «Appearance» кликаем по выпадающему меню «Show All Palettes» и выбираем наиболее «близкий по духу» вариант цветовой гаммы.
Для более глубокой настройки цветов и шрифтов придется обратиться к конфигурационным файлам.
Вариант кастомного профиля для Ptyxis.
1.1 Открываем консоль и создаем папку с файлом кастомного профиля:
mkdir -p ~/.local/share/org.gnome.Ptyxis/palettes && nano ~/.local/share/org.gnome.Ptyxis/palettes/my-homebrew.palette
1.2. Вставляем измененный более светлый темно-серый фон для профиля:
[Palette]
Name=My Homebrew
Foreground=#00ff00
Background=#0b1020
Color0=#000000
Color1=#990000
Color2=#00a600
Color3=#999900
Color4=#0d0dbf
Color5=#b200b2
Color6=#00a6b2
Color7=#bfbfbf
Color8=#666666
Color9=#e50000
Color10=#00d900
Color11=#e5e500
Color12=#0000ff
Color13=#e500e5
Color14=#00e5e5
Color15=#e5e5e5
BellForeground=#00ff00
BellBackground=#0b1020
RemoteForeground=#00ff00
RemoteBackground=#0b1020
SuperuserForeground=#00ff00
SuperuserBackground=#0b1020
Чтобы сохранить конфигурацию в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода.
Такой вариант цветового оттенка мне нравится больше. Кому например хочется других цветов фона, опять же нет проблем #0b1020 меняем этот вариант на свой вкус и усмотрение.
1.3. Добавим легкую прозрачность для окна. Значение 0.00 полная прозрачность, а 1.00 — полное отсутствие прозрачности. Выбираем наиболее подходящий вариант сами:
gsettings set org.gnome.Ptyxis.Profile:/org/gnome/Ptyxis/Profiles/$PTYXIS_PROFILE/ opacity 0.95
Далее закрываем консоль и запускаем ее снова. Созданный профиль должен появиться в разделе «Palettes». Через «Бургер-меню» (три горизонтальные полоски) переходим в «Preferences» → «Appearance» → «Show All Palettes», находим профиль «My Homebrew» и выбираем его.
2.1. Первое, что мы сделаем в консоли, — выключим автомонтирование носителей:
gsettings set org.gnome.desktop.media-handling automount false && gsettings set org.gnome.desktop.media-handling automount-open false
2.2. Разместим окна запускаемых программ строго по центру экрана. На мой взгляд, так работать гораздо удобнее особенно в виртуальны машинах:
gsettings set org.gnome.mutter center-new-windows true
Если по какой-то причине такое расположение окон не алё, выполняем ту же команду, заменив значение true на false.
2.3. Чтобы не тратить время на блуждание по графическим меню, возвращаем привычное многим переключение раскладки клавиатуры по классическому сочетанию Shift + Alt :
gsettings set org.gnome.desktop.input-sources xkb-options "['grp:alt_shift_toggle']" && gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['<Shift>Alt_L', '<Alt>Shift_L']"
По умолчанию Bash хранит историю команд с ограниченным размером: старые записи со временем удаляются, а несколько одновременно открытых терминалов могут приводить к сбоям при сохранении истории. Кроме того, та самая история обычно записывается в файл не после каждой команды, а при завершении shell. При аварийном завершении системы последние выполненные команды могут не попасть в анналы, что в нашем случае нежелательно.
3.1. Открываем конфигурационный файл .bashrc в домашней директории:
nano ~/.bashrc
3.2. Переходим в самый конец файла «Alt + /» и добавляем следующие строки:
# Бесконечный размер
export HISTSIZE=-1
export HISTFILESIZE=-1
# Мгновенная запись команды после нажатия Enter
export PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
# Игнорирование только последовательных дубликатов
export HISTCONTROL=ignoredups
# Логирование точной даты и времени выполнения
export HISTTIMEFORMAT="%F %T "
# Добавление команд в файл вместо перезаписи
shopt -s histappend
Сохраняем файл «Ctrl + O» → «Enter», а затем «Ctrl + X».
3.3. Применяем настройки к текущей сессии без перезапуска терминала:
source ~/.bashrc
3.4. Проверяем работу обновленного логирования:
history
Теперь мы получаем сквозную, защищенную от потерь хронологию с точным временем выполнения каждой команды.
3.5. Почистим нашу консоль от нагромождения строк:
clear
Если же нам требуется полностью очистить историю текущей сессии - используем комбинацию команд очистки и перезаписи:
history -c
Флаг -c полностью очищает историю в оперативной памяти текущего терминала, а если мы применим флаг -w то это действие принудительно записывает пустое состояние в наш файл истории, стирая все предыдущие логи. По простому удаляет всё что было ДО.
Даже если мы настроили мгновенную и бесконечную запись истории, обычный пользователь (или злоумышленник, получивший доступ к сессии) все еще может вручную очистить файл истории командой history -c && history -w или просто удалить его через rm ~/.bash_history.
Создадим изолированный файл конфигурации. Редактировать основной системный файл /etc/sudoers напрямую не рекомендуется, чтобы случайно не нарушить синтаксис конфигурации sudo и не потерять административный доступ.
4.1. Открываем текстовый редактор nano, создавая новый выделенный файл конфигурации:
nano /etc/sudoers.d/99_sudo_timeout
4.2. В открывшийся пустой файл впишем следующую строчку:
Defaults timestamp_timeout=2
Значение 2 указывает sudo хранить результат успешной аутентификации в течение двух минут. После истечения этого времени следующая команда sudo снова потребует пароль. Можно поставить и ноль, но тогда пароль придется вводить при каждом вызове sudo.
Чтобы сохранить конфигурацию в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода обратно в консоль root.
4.3. Выставляем права на конфигурационный файл:
chmod 0440 /etc/sudoers.d/99_sudo_timeout
Перед тем как закрыть терминал или выйти из режима root, критически важно в обязательном порядке проверить правильность синтаксиса созданного нами правила командой:
visudo -c
Если система вернула ...parsed OK, значит, ошибок нет и конфигурация впорядке. В противном случае правим ошибку.
Для проводного соединения Ethernet (Wired connection):
Переходим в системные настройки «Settings» и выбираем раздел «Network». Находим пункт «Wired» затем нажимаем на значок шестеренки «Network Options». В появившемся окне во вкладке «Details» сразу снимаем галочки с пунктов «Make available to other users» и «Connect automatically».
Далее переходим во вкладку «Identity». В графе «MAC Address» выбираем текущий сетевой интерфейс. Рядом будет отображено имя сетевого интерфейса (например, enp0s1, ens33 или другое) — необходимо запомнить или записать его, так как оно критически важно для дальнейших настроек сети и межсетевого экрана (файрвола).
Перейдем во вкладку «IPv4». Здесь принудительно задаем собственный DNS-сервер, чтобы не использовать DNS-серверы, предоставленные провайдером. Переводим ползунок «DNS» из режима «Automatic» в положение «Off» и в качестве примера используем Quad9: 9.9.9.9 (альтернативный: 149.112.112.112). Вписываем: 9.9.9.9, 149.112.112.112 через запятую. Это позволяет вынести DNS-разрешение за пределы инфраструктуры провайдера.
Во вкладке «IPv6» и в поле «IPv6 Method» строго выбираем значение «Disable». После выполнения всех манипуляций нажимаем кнопку «Apply».
Отключение IPv6 в графическом интерфейсе защищает только конкретный профиль сети.
Далее переходим в к части * Настройка для реального ПК или ноутбука (Полная рандомизация) где и докручиваем наши настройки.
Для беспроводного соединения Wi-Fi (Wireless connection):
5.1. Первым делом просматриваем имя сетевого интерфейса и запоминаем или записываем его (так как в дальнейшем оно будет нам необходимо при настройках):
ip a
После выполнения данного действия переходим к части главы Настройка для реального ПК или ноутбука (Полная рандомизация) выполняем инструкцию пошагово и возвращаемся назад в эту часть главы.
В «Show Apps» переходим в «Settings» и в разделе «Wi-Fi» в одноименном пункте переводим ползунок в активное положение. После чего ниже мы увидим активные wi-fi точки или только ту, которая настроена у нас. Кликаем по ней мышкой. В появившемся окне авторизации нажимаем Cancel после чего напротив имени сети появится значок в виде шестеренки. Первым делом на вкладке «Details» снимаем галочки с пунктов «Make available to other users» и «Connect automatically».
Далее переходим во вкладку «Identity». В графе «MAC Address» выбираем текущий сетевой интерфейс и в «Cloned Address» выставляем значение «Random».
Перейдем во вкладку «IPv4». Здесь принудительно задаем собственный DNS, чтобы не использовать DNS-серверы, предоставленные провайдером. Переводим ползунок «DNS» из режима «Automatic» в положение «Off» и в поле ввода прописываем к примеру серваки Quad9: 9.9.9.9 (альтернативный: 149.112.112.112).
Во вкладке «IPv6» и в поле «IPv6 Method» строго выбираем значение «Disable» .
Заходим во вкладку «Security» в поле вводим восемь рандомных символов, после чего кнопка «Apply» станет активна, нажимаем ее и применяем все настройки разом. В целом можно ввести и настоящий пароль: подключения к сети все равно не произойдет. Но мы параноики, поэтому перестрахуемся и введем настоящий пароль непосредственно перед первым выходом в интернет за обновлениями.
Отключаем Wi-Fi переведя ползунок в неактивное положение.
6. Настройка для реального ПК или ноутбука (Полная рандомизация)
Для реального «железа» оптимальным выбором является генерация совершенно нового случайного MAC-адреса при каждом подключении к сети. Конфигурационные файлы в conf.d обрабатываются в лексикографическом порядке, поэтому имя 99-... позволяет расположить наши параметры после стандартных конфигурационных файлов и тем самым повысить их приоритет.
6.1. Заходим в терминал с правами суперпользователя:
sudo -i
6.2. Создаем конфигурационный файл приоритетных правил:
nano /etc/NetworkManager/conf.d/99-macrandom.conf
6.3. Вносим в открывшийся редактор следующий блок параметров, активирующий автоматическую смену адресов:
[device]
wifi.scan-rand-mac-address = yes
[connection]
ethernet.cloned-mac-address = random
wifi.cloned-mac-address = random
Чтобы сохранить конфигурацию в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода обратно в консоль.
6.4. Перезапускаем сетевую службу для немедленного применения настроек:
systemctl restart NetworkManager
Теперь при каждом новом подключении к любой сети система будет генерировать новый случайный MAC-адрес.
6.5. После перезапуска сетевой службы проводим финальную верификацию, где enp0s1 меняем на имя своего интерфейса
ip link show enp0s1
Для того чтобы не вводить полное имя интерфейса вручную, можно применить фишку, при введении в терминале команды и первой буквы интерфейса (для проводных соединений это e, а беспроводных w) при нажатии кнопки Tab система сама подставит нужное имя.
В случае если все отработало как положено мы увидим в последней строчке вывода link/ether "сгенерированный MAC" brd ff:ff:ff:ff:ff:ff permaddr "реальный MAC"
Напоминаю что при настройке Wi-Fi соединения возвращаемся назад к следующему шагу в раздел Для беспроводного соединения Wi-Fi (Wireless connection).
По умолчанию NetworkManager может использовать механизмы локального разрешения имен mDNS (Multicast DNS) и LLMNR (Link-Local Multicast Name Resolution), предназначенные для обнаружения устройств и разрешения имен внутри локальной сети.
В публичных сетях — например, в кафе, ресторанах, гостиницах, макдональдсах — такие протоколы могут раскрывать локальным участникам сетевое имя компьютера и другую информацию о присутствии устройства в сетевом окружении. Особенно нежелательны подобные фэйлы в ситуациях, допустим когда VPN-туннель еще не установлен, ну или временно недоступен: локальный сетевой трафик в этот момент продолжает идти напрямую через основной интерфейс.
Кроме того, при автоматической настройке сети DNS-серверы могут передаваться через DHCP от локального маршрутизатора. В зависимости от конфигурации сети это позволяет использовать DNS-инфраструктуру провайдера или оператора точки доступа. Чтобы сократить объем локальных сетевых запросов мы зададим собственные DNS-серверы и отключим механизмы локального разрешения имен.
Для этого создаем отдельный файл конфигурации NetworkManager, где зафиксируем нужные нам параметры.
7.1. Открываем терминал и создаем файл:
sudo nano /etc/NetworkManager/conf.d/99-privacy-hardening.conf
7.2. Вносим в него следующий блок конфигурации, привязанный к нашим интерфейсам:
[device-privacy]
match-device=file:/sys/class/net/e*,file:/sys/class/net/w*
# Тотальное отключение mDNS на уровне сетевых соединений
mdns = 0
# Полное подавление протокола LLMNR
llmnr = 0
[connection-privacy]
match-device=file:/sys/class/net/e*, file:/sys/class/net/w*
# Защита от деанонимизации по DHCP (не отправляем имя хоста роутеру)
ipv4.dhcp-send-hostname = false
ipv6.dhcp-send-hostname = false
ipv4.dhcp-fqdn = none
ipv6.dhcp-fqdn = none
# Принудительное игнорирование настроек DNS от локального роутера
# (Защита от перехвата DNS-трафика через мошеннический DHCP-сервер)
ipv4.ignore-auto-dns = yes
ipv6.ignore-auto-dns = yes
Чтобы сохранить файл в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода обратно в консоль.
7.3. Перезапускаем службу для применения политик конфиденциальности:
sudo systemctl restart NetworkManager
7.4. Для Netplan вводим команду где указываем имя своего соединения (Wired connection 1 или имя Wi-Fi сети): и необходимые DNS:
sudo nmcli connection modify ИМЯ-СОЕДИНЕНИЯ ipv4.ignore-auto-dns yes
7.5. Прописываем необходимые DNS (указываем имя своего соединения и прописываем статические DNS):
sudo nmcli connection modify ИМЯ-СОЕДИНЕНИЯ ipv4.dns 9.9.9.9
7.6. Выставим права на yaml с правилами NM:
sudo chmod 0600 /etc/netplan/01-network-manager-all.yaml
7.7. Применим настройки чтобы все завелось без перезагрузки:
sudo netplan apply
7.8. Проверяем работу наших настроек (-LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported является положительным для нас показателем):
resolvectl status
Беспроводной протокол Bluetooth используется редко, поэтому в целях безопасности его гораздо эффективнее полностью деактивировать, нежели непрерывно контролировать его текущее состояние. Данный протокол имеет массу известных и потенциальных уязвимостей , создавая дополнительные векторы для атак в радиусе действия. Если компьютер находится в публичном месте, да и в квартире в целом, злоумышленникам не составит труда атаковать Bluetooth-стек ядра и перехватить удаленный контроль над устройством.
8.1. Блокируем передатчик Bluetooth на уровне ядра операционной системы (soft-block), запрещая чипу генерировать радиосигнал:
sudo rfkill block bluetooth
8.2. Полностью изолируем стек Bluetooth в пространстве пользователя, запрещая автоматический запуск системной службы при старте ОС, а флаг --now мгновенно останавливает ее выполнение в оперативной памяти хоста:
sudo systemctl disable --now bluetooth
8.3. Открываем конфигурационный файл черного списка модулей ядра:
sudo nano /etc/modprobe.d/blacklist-hardening.conf
8.4. Вносим туда следующие строчки для полной полной изоляции bluetooth на уровне ядра:
blacklist bluetooth
blacklist btusb
blacklist btrtl
blacklist btbcm
blacklist btintel
install bluetooth /bin/true
install btusb /bin/true
install btintel /bin/true
Чтобы сохранить конфигурацию в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода обратно в консоль.
8.5. Финализируем изменения и вшиваем новую конфигурацию в образ начальной загрузки ядра:
sudo update-initramfs -u -k all
После выполнения ядро Linux при обнаружении устройства физически не сможет загрузить для него драйвер.
Без этой защиты любой человек, включивший ПК, сможет модифицировать строки загрузки, передать ядру init=/bin/bash, получив возможность обойти обычную авторизацию уже на этапе загрузки системы.
Открываем терминал и последовательно выполняем следующие шаги:
9.1. Запускаем утилиту генерации защищенного хэша. Система попросит ввести и повторить пароль (рекомендуется использовать сложный пароль длиной не менее 16 символов):
grub-mkpasswd-pbkdf2
Утилита выдаст длинную строку хэша, начинающуюся с grub.pbkdf2.sha512.... Выделяем и копируем эту строку целиком.
В дистрибутивах Ubuntu конфигурация GRUB обычно генерируется автоматически из настроек /etc/default/grub и скриптов каталога /etc/grub.d/. Ошибка в одном из этих файлов может привести к сбою генерации grub.cfg при выполнении update-grub.
Чтобы не изменять стандартные скрипты генерации, мы воспользуемся отдельным файлом /boot/grub/custom.cfg. GRUB умеет подключать этот файл непосредственно при загрузке, поэтому пользовательские настройки можно хранить отдельно от автоматически создаваемой конфигурации.
9.2. Создаем автономный конфигурационный файл авторизации на самом низком уровне загрузчика:
sudo nano /boot/grub/custom.cfg
9.3. Вставляем внутрь открывшегося файла две чистые строки, объявляющие суперпользователя и привязывающие к нему созданный хэш (без использования кавычек или синтаксиса Bash):
set superusers="root"
password_pbkdf2 root НАШ_СКОПИРОВАННЫЙ_ХЭШ_ИЗ_ШАГА_1
Чтобы сохранить изменения в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода обратно в консоль.
По умолчанию объявление суперпользователя в GRUB блокирует загрузчик целиком — система будет требовать пароль при каждой обычной перезагрузке. Чтобы операционная система запускалась автоматически, а пароль запрашивался только при попытке несанкционированного редактирования меню (клавиша e) или вызова консоли (клавиша c), необходимо разрешить свободный запуск ядер.
9.4. Для этого откроем системный шаблон генератора:
sudo nano /etc/grub.d/10_linux
9.5. Находим строку, начинающуюся с CLASS= (обычно это CLASS="--class gnu-linux --class gnu --class os"), и добавляем в нее параметр --unrestricted, чтобы она выглядела следующим образом:
CLASS="--class gnu-linux --class gnu --class os --unrestricted"
Сохраяем файл «Ctrl + O» → «Enter», а затем «Ctrl + X»
9.6. Применяем настройки для GRUB на уровне ОС:
sudo update-grub
9.7. Не забываем выставить жесткие права доступа к созданному файлу custom.cfg, полностью скрывая хэш пароля от чтения обычными пользователями в системе:
sudo chmod 0600 /boot/grub/custom.cfg
Открываем терминал основной хост-системы и последовательно выполняем следующие шаги:
10.1. Создаем собственный независимый файл конфигурации безопасности ядра в директории расширения:
sudo nano /etc/default/grub.d/99_security_baseline.cfg
10.2. В открывшийся файл вставляем строго одну рабочую строку, содержащую флаги инициализации аппаратной изоляции памяти в зависимости от архитектуры нашего физического процессора.
Для процессоров Intel:
GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} intel_iommu=on iommu=pt"
Для процессоров AMD:
GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} amd_iommu=on iommu=pt"
Чтобы сохранить конфигурацию в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода.
intel_iommu=on/amd_iommu=on — принудительно инициализирует работу драйвера управления IOMMU на уровне архитектуры процессора при старте системы.
**iommu=pt — включает режим «сквозного прохода». Виртуализация включается только там, где нужно (например, для проброса видеокарты), что дает максимальную скорость и стабильность. Самый популярный выбор для домашних десктопных систем и гейминга с пробросом GPU.
**iommu=force — включает режим «тотального контроля». Это дает максимальную безопасность и защиту от сбоев, но немного бьет по скорости ввода-вывода из-за постоянных проверок. Ядро принудительно берет под надзор вообще всё, что воткнуто в PCIe, и запирает каждое устройство в своей изолированной песочнице.
10.3. Обновляем конфигурацию загрузчика в операционной системе, чтобы ядро скомпилировало и зафиксировало новые низкоуровневые инструкции:
sudo update-grub
10.4. Отправляем компьютер в принудительную перезагрузку для применения аппаратной изоляции памяти:
sudo systemctl reboot -i
10.5. После перезагрузки открываем терминал и выполняем верификацию. Инспектируем кольцевой буфер логов ядра dmesg с правами sudo, чтобы убедиться, что защита успешно развернута и встала на стражу RAM:
sudo dmesg | grep -E "iommu|IOMMU|dmar"
Если в выводе терминала появились строки вида *«DMAR: IOMMU enabled»*, *«DMAR: Intel-IOMMU»* или сообщения об успешной инициализации аппаратных карт трансляции адресов процессора — наш ПК теперь аппаратно защищен от прямого считывания содержимого оперативной памяти.
### 11. Вариант настройки UFW:
**11.1.** Переводим файрвол в активный режим:
```bash
sudo ufw enable
11.2. Отключаем поддержку протокола IPv6 на уровне конфигурационного файла подсистемы UFW:
sudo sed -i 's/IPV6=yes/IPV6=no/' /etc/default/ufw
11.3. Полностью запрещаем весь входящий трафик:
sudo ufw default deny incoming
11.4. Блокируем весь исходящий трафик:
sudo ufw default deny outgoing
11.5. Запрещаем любую переадресацию пакетов:
sudo ufw default deny forward
11.6. Разрешаем исходящий DNS-трафик (порт 53) ко всем серверам по протоколу UDP:
sudo ufw allow out to any port 53 proto udp
11.7. Открываем стандартный HTTP-порт (80) на выход ко всем серверам:
sudo ufw allow out to any port 80 proto tcp
11.8. Открываем защищенный HTTPS-порт (443) на выход ко всем серверам:
sudo ufw allow out to any port 443 proto tcp
11.9. Разрешаем любые входящие локальные подключения внутри петлевого интерфейса lo:
sudo ufw allow in on lo to any
11.10. Разрешаем любые исходящие локальные подключения внутри петлевого интерфейса lo:
sudo ufw allow out on lo to any
11.11. Открываем порт 853 на выход ко всем серверам для безопасного протокола DNS-over-TLS:
sudo ufw allow out to any port 853 proto tcp
11.12. Включаем средний уровень логирования сетевой активности:
sudo ufw logging medium
11.13. Проверяем финальный статус работы настроенного файрвола:
sudo ufw status verbose
11.14. Заходим в конфигурацию правил UFW через редактор nano:
sudo nano /etc/ufw/sysctl.conf
11.15. Находим ближе к концу файла строчки марсианских логов и меняем значения с нуля на единицу:
net/ipv4/conf/all/log_martians=1
net/ipv4/conf/default/log_martians=1
Чтобы сохранить конфигурацию в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода.
11.16. Перезапустим UFW для применение обновленных правил файрвола:
sudo ufw reload
Защитим сетевой стек и подсистему памяти ядра. Для этого создадим отдельный изолированный конфигурационный файл в директории sysctl.d. Все настройки выполняются строго с правами суперпользователя:
12.1. Переходим в интерактивный режим суперпользователя (root):
sudo -i
12.2. Создаем и открываем новый конфигурационный файл через текстовый редактор nano:
nano /etc/sysctl.d/99-security-hardening.conf
В открывшийся пустой файл вносим следующие низкоуровневые параметры безопасности ядра:
# Защита от уязвимостей переполнения буфера (включение ASLR)
kernel.randomize_va_space = 2
# Защита от подмены IP-адресов (IP Spoofing) через механизм обратного пути (Reverse Path Filtering)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Запрет маршрутизации от источника (Source Routing)
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Игнорирование вредоносных широковещательных ICMP-запросов и ложных сообщений об ошибках
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_messages = 1
# Логирование пакетов с недопустимыми (поддельными) адресами отправителя (Martian Packets)
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# Полное отключение протокола IPv6 на уровне ядра для минимизации вектора атак
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
# Защита от DoS-атак класса SYN-Flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 3
# Запрет отправки ICMP-перенаправлений (Система не является маршрутизатором)
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Запрет записи в небезопасные FIFO-файлы в общих папках.
fs.protected_fifos = 2
# Запрет записи в чужие обычные файлы в общих sticky-директориях
fs.protected_regular = 2
# Добавление PID процесса к дампам падения (крашам), чтобы малварь не могла перезаписать чужие логи
kernel.core_uses_pid = 1
# Сокрытие адреса указателей ядра в /proc/kallsyms даже от рута. Хакеры не смогут высчитать смещение для эксплойтов.
kernel.kptr_restrict = 2
# Ограничение чтения kernel log buffer непривилегированными пользователями
kernel.dmesg_restrict = 1
# Запрет непривилегированным юзерам использовать подсистему производительности ядра (perf) для атак по сторонним каналам.
kernel.perf_event_paranoid = 3
# Отключение магические комбинации клавиш SysRq, через которые физический злоумышленник может перезагрузить хост или слить корку памяти
kernel.sysrq = 0
# Усиливаем ограничение ptrace для защиты процессов от несанкционированного трассирования
kernel.yama.ptrace_scope = 2
# Запрет обычным юзерам слать сырые BPF-программы в ядро и врубает JIT-постоянное ослепление (Blinding). Защита от свежих BPF-уязвимостей.
kernel.unprivileged_bpf_disabled = 1
net.core.bpf_jit_harden = 2
Чтобы сохранить конфигурацию в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода.
12.3. Выходим из режима суперпользователя обратно к правам обычного юзера:
exit
12.4. Так как мы не используем удаленный рабочий стол поставим службе запрет:
sudo systemctl disable --now gnome-remote-desktop.service
12.5. Перекроем службу отвечающую за модемную связь и мобильные сети:
sudo systemctl disable --now ModemManager.service
Сразу же перекроем и TCP Timestamp Fingerprinting (RFC 1323).
13.1. Открываем созданный чуть выше конфиг файл защиты ядра:
sudo nano /etc/sysctl.d/99-security-hardening.conf
13.2. Переходим в конец файла и добавляем следующие параметры:
# Отключение временных меток TCP для защиты от Fingerprinting и аптайм-трекинга
net.ipv4.tcp_timestamps = 0
# Защита от атак повторного воспроизведения (RFC 1323) при отключенных таймстампах
net.ipv4.tcp_tw_reuse = 0
Опять же сохраняем его через комбинацию «Ctrl + O» → «Enter», и «Ctrl + X»
13.3. Перечитываем конфиги ядра в системе без перезагрузки компа:
sudo sysctl --system
14.1. Открываем конфигурационный файл созданного ранее черного списка модулей ядра:
sudo nano /etc/modprobe.d/blacklist-hardening.conf
14.2. Вставляем в него следующие строки конфигурации:
blacklist dccp
blacklist sctp
blacklist rds
blacklist tipc
blacklist hfs
blacklist hfsplus
blacklist jffs2
blacklist freevxfs
blacklist cramfs
Чтобы сохранить конфигурацию в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода.
14.3. Обновляем изменения и вшиваем новую конфигурацию в образ начальной загрузки ядра:
sudo update-initramfs -u -k all
15.1. Открываем глобальный конфигурационный файл параметров учетных записей:
sudo nano /etc/login.defs
Внутри открывшегося файла находим строки UMASK 022 и USERGROUPS_ENAB yes принудительно изменяем значение на UMASK 077 и USERGROUPS_ENAB no. Если строка UMASK 022 отсутствует дописываем в конец UMASK 077.
Чтобы сохранить изменения в редакторе nano, нажимаем «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода.
Любые новые файлы или каталоги, созданные программами или нами в будущем, по умолчанию будут доступны строго владельцу (права 600 для файлов и 700 для папок).
Теперь закроем доступ к текущей домашней директории:
15.2. Устанавливаем права доступа на личную домашнюю папку:
chmod 0700 /home/$USER
15.3. Исправляем права на каталоги sudoers:
sudo chmod 750 /etc/sudoers.d && sudo chmod 640 /etc/sudoers.d/* 2>/dev/null || true
Теперь настроим безопасное монтирование виртуальной общей памяти (shared memory), которая часто используется злоумышленниками для скрытного запуска вредоносного ПО:
16.1. Открываем таблицу монтирования файловых систем хоста:
sudo nano /etc/fstab
Сбалансированный режим (Рекомендуемый для повседневного Desktop):*
16.2A. Этот вариант сохраняет полную стабильность веб-браузеров при просмотре потокового видео и обработке сложных скриптов, ну и в целом если на пк работают свои LLM модели или рендерится видео, от параноидального режима придется отказаться в пользу сбалансированного.
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
Параноидальный режим (Максимальная изоляция):
16.2B. Подходит для серверов, а также для Desktop-систем, выполняющих строго узконаправленный спектр задач (работа исключительно в терминале, текстовые редакторы, локальное администрирование, среды Docker/VMware), где полностью отсутствует необходимость в просмотре тяжелого динамического веб-контента. Флаг noexec блокирует выполнение любого стороннего кода из оперативной памяти.
tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0
Чтобы сохранить конфигурацию в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода обратно в консоль.
Далее в обязательном порядке прижмем avahi-daemon. Этот фоновый демон отвечает за автоматическое обнаружение сетевых ресурсов в локалке по протоколу mDNS, транслируя наружу имя нашего хоста в формате имя_компьютера.local. При этом утилита держит открытыми сетевые порты 5353 (UDP) и 32768 (TCP).
17.1. Полностью удаляем службу Avahi из системы, вычищая ее остаточные конфигурационные файлы:
sudo apt purge avahi-daemon -y && sudo apt autoremove -y
Следующим шагом отключаем и деинсталлируем службу cups, которая отвечает за фоновое обнаружение сетевых принтеров и организацию печати.
17.2. Мгновенно останавливаем и запрещаем автозапуск службы сетевого сканирования принтеров:
sudo systemctl disable --now cups-browsed
17.3. Полностью вырезаем CUPS демоны и пакеты печати без каскадных обновлений::
sudo apt purge cups cups-daemon cups-browsed hplip hplip-data -y
17.4. Зачищаем оставшиеся хвосты:
sudo apt autoremove --purge -y
17.5. Принудительно активируем карантин печатного контура. Это запретит инициализировать любые фоновые потоки поиска устройств:
gsettings set org.gnome.desktop.lockdown disable-printing true
17.6. Отключаем поддержку мультикаста на физическом уровне самой сетевой карты хоста:
sudo ip link set dev enp0s1 multicast off
Вырежем из убунты службу геолокации Geoclue, и исключим скрытое фоновое отслеживание географических координат устройства:
18.1. Останавливаем и полностью маскируем службу геолокации, полностью блокируя ее запуск через системную шину:
sudo systemctl stop geoclue.service && sudo systemctl mask geoclue.service
Принудительно переводим системные часы на нейтральное время для стирания регионального цифрового отпечатка операционной системы:
18.2. Выставляем всемирное координированное время:
sudo timedatectl set-timezone UTC
Проверяем корректность применения новых настроек времени:
18.3. Выводим системный статус времени:
timedatectl
В выведенной системной информации в строке Time zone: должно быть четко указано: UTC (UTC, +0000).
Теперь перейдем к очистке ОС от подсистемы Snapd, которая позволяет скачивать и обновлять проприетарные пакеты в обход установленных настроек приватности хоста и “стучать куда ненадо”:
19.1. Полностью вырезаем демон snapd и сопутствующие ему структуры из операционной системы:
sudo apt purge snapd -y
Чтобы пакетный менеджер в будущем случайно не установил этот демон обратно при обновлении какого-нибудь прикладного софта, заблокируем его установку через механизм приоритета APT Pinning:
19.2. Создаем конфигурационный файл постоянной блокировки:
sudo nano /etc/apt/preferences.d/nosnap.pref
19.3. В открывшийся пустой файл впишем следующие строки:
Package: snapd
Pin: release a=*
Pin-Priority: -10
Чтобы сохранить конфигурацию в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода обратно в консоль.
Во-первых, в новых версиях Ubuntu штатный графический магазин приложений App Center полностью завязан на бэкенд Snap. После удаления демона он физически перестанет запускаться. Для нас это огромный плюс, так как мы полностью ликвидируем лишний вектор атаки, а весь необходимый софт будем ставить через чистый консольный пакетный менеджер apt. Если нам когда-либо понадобится графический менеджер для ручной установки .deb пакетов, развернем Synaptic командой: sudo apt install synaptic.
Во-вторых, родной браузер Firefox в современных Ubuntu теперь поставляется Canonical строго в виде Snap. Команда purge snapd полностью удалит Firefox из операционной системы! Чтобы не остаться без связи с внешним миром, обязательно установим чистую официальную .deb версию Firefox из репозитория (Mozilla PPA).
Настало время применить комплексный Bash-скрипт для удаления встроенной телеметрии и предотвращения отправки технических метрик на серверы Canonical.
20.1. Переходим в папку загрузок текущего активного пользователя:
cd ~/Downloads
20.2. Инициализируем создание пустого файла скрипта:
touch telemetryoff.sh
20.3. Запускаем скрипт через редактор nano:
nano telemetryoff.sh
20.4. Открываем созданный файл через текстовый редактор nano и вставляем туда следующий монолитный код скрипта очистки телеметрии:
#!/bin/bash
# Ubuntu 24.04/26.04 Telemetry & Pro Hardening Script (Ultimate Edition)
# Designed for Ubuntu Desktop and its flavors (Xubuntu, Lubuntu)
# Проверка прав суперпользователя
if [ "$EUID" -ne 0 ]; then
echo "[-] Error: Please run this script as root: sudo $0"
exit 1
fi
echo "[+] Aggressively stopping and masking telemetry services..."
systemctl stop apport.service whoopsie.service ubuntu-advantage.service pro-client.service 2>/dev/null
systemctl disable apport.service whoopsie.service ubuntu-advantage.service pro-client.service 2>/dev/null
systemctl mask apport.service whoopsie.service ubuntu-advantage.service pro-client.service 2>/dev/null
echo "[+] Disabling kernel crash reporting..."
if [ -f /etc/default/apport ]; then
sed -i 's/enabled=1/enabled=0/g' /etc/default/apport
fi
echo "[+] Removing telemetry and advertising packages safely (preserving desktop GUI)..."
# Фиксируем графическое окружение в статусе "установлено вручную", чтобы apt не снес рабочий стол
apt-mark manual ubuntu-desktop xubuntu-desktop lubuntu-desktop gdm3 lightdm 2>/dev/null
# Удаляем классический шпионский софт и навязчивый клиент Ubuntu Pro/ESM
apt purge ubuntu-report whoopsie popularity-contest ubuntu-pro-client ubuntu-advantage-tools -y
# Безопасное вырезание apport без каскадного удаления GUI
apt purge apport -y --allow-remove-essential 2>/dev/null || apt remove apport -y
# Очищаем системные триггеры кэша обновлений ESM, которые ломились в Canonical
rm -f /etc/apt/apt.conf.d/20ubuntu-pro-esm 2>/dev/null
# Автоматически зачищаем сиротские зависимости, контролируя целостность GUI
apt autoremove -y
echo "[+] Configuring APT Pinning (Permanent Lock)..."
cat << 'EOF' > /etc/apt/preferences.d/no-telemetry.pref
Package: ubuntu-report
Pin: release a=*
Pin-Priority: -10
Package: whoopsie
Pin: release a=*
Pin-Priority: -10
Package: apport
Pin: release a=*
Pin-Priority: -10
Package: popularity-contest
Pin: release a=*
Pin-Priority: -10
Package: ubuntu-pro-client
Pin: release a=*
Pin-Priority: -10
Package: ubuntu-advantage-tools
Pin: release a=*
Pin-Priority: -10
EOF
echo "[+] Telemetry and Ubuntu Pro hardening completed successfully!"
Чтобы сохранить файл в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода обратно в консоль.
20.5. Выставляем жесткие права доступа к файлу: читать, редактировать и запускать скрипт на исполнение сможет исключительно его непосредственный владелец:
chmod 0700 telemetryoff.sh
20.6. Запускаем скрипт от имени суперпользователя и дожидаемся успешного завершения автоматической оптимизации хоста. После отработки скрипт можно удалить:
sudo ./telemetryoff.sh
20.7. Перезапускаем систему:
sudo reboot
Даже после полной зачистки системной телеметрии Canonical, в операционной системе остается активным скрытый демон fwupd (Firmware Updater). При каждом выходе в сеть он в фоновом режиме отправляет запросы на глобальный CDN-сервер cdn.fwupd.org, передавая туда уникальные UUID-идентификаторы материнской платы, процессора и NVMe-накопителей под предлогом поиска обновлений BIOS/UEFI.
Мы отказываемся от неконтролируемого фонового слива аппаратных хэшей хоста. Все критические обновления низкоуровневых прошивок железа мы будем производить исключительно вручную и оффлайн, а сетевую активность демона деактивируем в ядре операционной системы.
21.1. Останавливаем активные службы и таймеры автоматического обновления:
sudo systemctl stop fwupd fwupd-refresh.service fwupd-refresh.timer
21.2. Принудительно маскируем конфиги юнитов в systemd. Это блокирует возможность их фонового или принудительного перезапуска операционной системой:
sudo systemctl mask fwupd fwupd-refresh.service fwupd-refresh.timer
Как мы уже знаем, при удалении Snapd стандартный браузер стерся, оставив после себя скрытые конфигурационные хвосты.
Перед установкой независимой версии браузера напрямую от разработчиков из Mozilla Team нам необходимо вычистить остаточный мусор из домашней директории, а затем заблочить механизмы автоматической подмены пакетов.
22.1. Полностью уничтожаем скрытые остаточные каталоги, кэш и старые профили Snap-версии браузера в домашней папке:
rm -rf ~/snap/firefox ~/.mozilla/firefox
22.2. Импортируем официальный PPA-репозиторий команды разработчиков Mozilla в операционную систему:
sudo add-apt-repository ppa:mozillateam/ppa -y
22.3. Пакет firefox в репозиториях Ubuntu по умолчанию является Snap-заглушкой. Чтобы обойти это ограничение и заставить пакетный менеджер выкачать чистый бинарник напрямую из Mozilla Team PPA, мы создаем жесткий конфигурационный файл приоритетов:
sudo tee /etc/apt/preferences.d/mozilla-firefox <<EOF
Package: firefox*
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 1001
Package: firefox*
Pin: release o=Ubuntu
Pin-Priority: -10
EOF
Чтобы сохранить конфигурацию в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода обратно в консоль.
22.4. Обновляем локальный индекс системных пакетов с учетом вновь созданных правил приоритета:
sudo apt update
22.5. Запускаем установку чистой, независимой от Snap десктопной версии Firefox:
sudo apt install firefox -y
Следующий шаг настройки разделен на два варианта в зависимости от версии операционной системы. Версия Ubuntu 24.04 LTS Noble Numbat, а более новая Ubuntu 26.04 LTS Resolute Raccoon.
22.6. Активируем скрытое системное правило, разрешающее фоновой службе автоматических обновлений Ubuntu скачивать критические патчи безопасности для Firefox напрямую из репозитория Mozilla Team:
Для пользователей Ubuntu 24.04 LTS Noble Numbat:
echo 'Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:noble";' | sudo tee /etc/apt/apt.conf.d/51unattended-upgrades-firefox
Для пользователей Ubuntu 26.04 LTS Resolute Racoon:
echo 'Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:resolute";' | sudo tee /etc/apt/apt.conf.d/51unattended-upgrades-firefox
22.7. Проводим финальную проверку. Если команда вывела версию браузера без упоминания Snap — установка завершена успешно:
firefox --version
Установка браузера через официальный PPA от Mozilla Team дает нам два преимущества:
Полная совместимость со сторонними песочницами: Теперь исполняемый файл браузера физически расположен по классическому системному пути /usr/bin/firefox. Это позволяет без малейших конфликтов упаковать его в жесткие рамки мандатного контроля AppArmor и изолировать внутри контейнера Firejail, что было бы технически невозможно сделать со Snap-версией, запертой внутри собственного изолированного бэкенда Canonical.
Отсутствие скрытой телеметрии установщика: Сборка компилируется напрямую из открытых исходных кодов Mozilla, не содержит транзитных скриптов Canonical и не пытается активировать фоновые сетевые службы отправки отчетов.
Первый запуск браузера и все этапы его настройки происходят строго в режиме полного радиомолчания — БЕЗ доступа в интернет!
Открываем браузер. В адресной строке вводим следующий прямой путь: about:preferences#privacy. Последовательно изменяем параметры:
Блок «Enhanced Tracking Protection»: Заходим в подраздел «Advanced settings». Переводим переключатель в жесткий режим «Strict». Нажимаем появившуюся кнопку «Reload All Tabs». Это действие автоматически активирует механизм динамической изоляции куки-файлов (dFPI). Метод запрещает рекламным трекерам шпионить за нашими перемещениями по сети.
Блок «Browsing Data»: Обязательно активируем галочку «Clear cookies and site data every time you close Firefox».
Блок «DNS over HTTPS»: Современные браузеры способны совершать скрытые фоновые DNS-запросы. Чтобы пресечь это, спускаемся ниже. Заходим в «Advanced settings». В графе выбора провайдера выставляем «Custom». Вручную прописываем URL-адрес безопасного, не ведущего логов DoH-сервера.
Блок «Connection and software security»: На этой же странице спускаемся в самый низ. Находим раздел «HTTPS-Only Mode». Заходим в его дополнительные параметры. Переводим тумблер в активное положение «Enable HTTPS-Only Mode in all windows». Это обеспечит принудительное шифрование любого незащищенного HTTP-трафика.
Раздел «Search»: Переходим в этот раздел в левом навигационном меню. Изменяем поисковую систему по умолчанию. Меняем шпионский движок Google на приватный, не собирающий логи DuckDuckGo.
Раздел «Permissions and data»: Прокручиваем страницу вниз до блока «Firefox Data Collection and Use». Принудительно снимаем все установленные галочки телеметрии. Браузер больше не будет отправлять технические отчеты и метрики стабильности в Mozilla.
Мы можем выбрать любой безопасный, не ведущий логов DoH-сервер из представленного ниже списка:
Mullvad DNS (От создателей приватного VPN) Шведский сервис, ориентированный на радикальную анонимность. Они не собирают логи. Не просят почту при регистрации. Их DNS-инфраструктура полностью принадлежит им. Она работает без сторонних посредников.
Чистый DNS (без блокировок):
https://dns.mullvad.net/dns-queryБлокировка рекламы и трекеров (Adblock + Trackers):
https://adblock.dns.mullvad.net/dns-queryМаксимальная защита (Реклама + Трекеры + Вредоносные сайты):
https://base.dns.mullvad.net/dns-queryQuad9 (Некоммерческий альянс кибербезопасности) Проект создан при поддержке IBM Security. Привлечены ведущие мировые эксперты по защите данных. Сервис базируется в Швейцарии. Находится под строгой защитой законов о приватности. Использует технологию Anycast для мгновенного отклика.
Защищенный (Основной, включает валидацию DNSSEC):
https://dns.quad9.net/dns-queryНефильтруемый (Чистый DNS):
https://dns10.quad9.net/dns-queryControl D (От создателей Windscribe VPN) Один из лучших современных сервисов. Они принципиально не ведут логи. Используют технологию Anycast. Запрос идет к ближайшему серверу.
Чистый DNS (без блокировок):
https://freedns.controld.com/p0Блокировка рекламы, трекеров и фишинга:
https://freedns.controld.com/p1Максимальный блок (Реклама + Вирусы + Новые домены):
https://freedns.controld.com/p2NextDNS (Облачный аналог Pi-hole) Максимально ориентированный на приватность сервис. По умолчанию работает как мощный защитный щит. При создании бесплатного аккаунта на их сайте позволяет гибко настраивать списки блокировок под себя.
Стандартная защита (Реклама + Трекеры + Вирусы):
https://dns.nextdns.ioЧистый DNS (только приватность, без фильтров):
https://unfiltered.nextdns.ioAdGuard DNS (С акцентом на блокировку рекламы) Популярный и надежный сервис от известных разработчиков блокировщиков. Отлично вырезает баннеры, трекеры и аналитические скрипты еще на этапе DNS-запроса.
Базовая защита (Реклама + Трекеры):
https://dns.adguard-dns.com/dns-queryНефильтруемый (Чистый DNS без логирования):
https://unfiltered.adguard-dns.com/dns-queryCloudflare (1.1.1.1 — Самый быстрый в мире) Обладает огромной сетью серверов. Это гарантирует минимальную задержку при открытии сайтов. С точки зрения приватности компания обещает полностью удалять все логи запросов в течение 24 часов.
Чистый DNS (ультра-быстрый):
https://cloudflare-dns.com/dns-queryЗащита от вредоносного ПО (Вместо Safe Browsing):
https://security.cloudflare-dns.com/dns-query
23.1. Переходим в директорию профиля (в чистой и последней .deb-версии Firefox дефолтный профиль практически всегда имеет окончание .default-release) и создаем пустой файл конфигурации:
cd ~/.config/mozilla/firefox/*-release/ && touch user.js
23.2. Открываем созданный user.js в редакторе nano:
nano user.js
23.3. Скопируем данный массив настроек безопасности и вставим его целиком:
// ============================================================================
// HARDENING CONFIG FOR MOZILLA FIREFOX (USER.JS)
// БЕСКОМПРОМИССНАЯ НАСТРОЙКА ПРИВАТНОСТИ И БЕЗОПАСНОСТИ
// ============================================================================
// 1. БАЗОВАЯ КОНФИДЕНЦИАЛЬНОСТЬ И ИЗОЛЯЦИЯ
// Включаем глобальную защиту от отслеживания рекламными корпорациями. Дополнительно заставим браузер скачивать временные файлы не в домашнюю папку, а строго во временный системный каталог `/tmp` в оперативной памяти (чтобы после закрытия сессии на диске не оставалось следов), и полностью вырезаем *Private Attribution* — скрытый коммерческий механизм Mozilla по отслеживанию рекламных кликов
user_pref("privacy.trackingprotection.enabled", true);
user_pref("privacy.trackingprotection.socialtracking.enabled", true);
user_pref("privacy.partition.network_state.ocsp_cache", true);
user_pref("privacy.providers.fingerprinting", true);
user_pref("privacy.providers.trackingprotection", true);
user_pref("dom.private-attribution.submission.enabled", false); // Вырезаем скрытый сбор кликов Mozilla
user_pref("browser.download.start_downloads_in_tmp_dir", true); // Качаем файлы только в оперативную память (/tmp)
user_pref("browser.helperApps.deleteTempFileOnExit", true); // Зачищаем кэш загрузок при выходе
user_pref("security.sandbox.content.level", 4); // Фиксация песочницы контента на Linux (максимальный уровень изоляции процессов)
user_pref("browser.startup.page", 0);
user_pref("browser.newtabpage.enabled", false);
user_pref("browser.startup.homepage", "about:blank");
// 2. УДАЛЕНИЕ И БЛОКИРОВКА СЕРВИСА POCKET
// Компания Mozilla жестко интегрировала коммерческий контент-сервис Pocket в исходный код Firefox. Отключаем его полностью на уровне ядра, чтобы вырезать лишние скрытые фоновые запросы к его серверам
user_pref("extensions.pocket.enabled", false);
user_pref("extensions.pocket.api", "");
user_pref("extensions.pocket.oAuthConsumerKey", "");
user_pref("extensions.pocket.site", "");
// 3. БЛОКИРОВКА УТЕЧКИ IP ЧЕРЕЗ WebRTC
// Протокол WebRTC включен по умолчанию для организации звонков внутри браузера (Telegram, Discord). Однако он имеет критическую архитектурную уязвимость: запрашивая так называемые ICE-кандидаты для прямой связи между клиентами, он способен выдать наш реальный физический IP-адрес наружу в обход активного VPN-туннеля. Выключаем этот вектор
user_pref("media.peerconnection.enabled", false);
user_pref("media.peerconnection.use_document_iceservers", false);
user_pref("media.peerconnection.video", false);
user_pref("media.peerconnection.identity.timeout", 1);
// 4. ОТКЛЮЧЕНИЕ WEBGL (ЗАЩИТА ОТ ГРАФИЧЕСКОГО ФИНГЕРПРИНТИНГА)
// Технология WebGL позволяет сайтам использовать вычислительную мощность нашей видеокарты для отрисовки сложной 3D-графики. Через этот модуль трекеры снимают уникальный цифровой отпечаток (*WebGL Fingerprint*) нашей видеокарты, идентифицируя конкретное железо компьютера со 100% точностью. Отключаем аппаратный рендеринг
user_pref("webgl.disabled", true);
user_pref("webgl.enable-debug-renderer-info", false);
// 5. ЗАПРЕТ НА СБОР И ПЕРЕДАЧУ ГЕОЛОКАЦИИ
// Блокируем любые попытки браузера и внешних веб-сайтов определить наше реальное физическое местоположение по географическим координатам, окружающим Wi-Fi сетям или системным службам хост-машины
user_pref("geo.enabled", false);
user_pref("geo.provider.use_geoclue", false);
user_pref("geo.provider.network.url", "");
user_pref("geo.provider.msgeolocate", false);
// 6. БЛОКИРОВКА АСИНХРОННЫХ ЗАПРОСОВ (BEACONS/PINGS)
// Многие коммерческие ресурсы используют скрытые фоновые маяки для отправки аналитических пакетов о наших кликах и движениях курсора мыши, причем эти данные продолжают транслироваться в фоновом режиме, даже когда мы уже закрыли вкладку сайта. Пресекаем этот шпионаж
user_pref("beacon.enabled", false);
user_pref("browser.send_pings", false);
user_pref("browser.send_pings.require_same_host", true);
// 7. ОТКЛЮЧЕНИЕ МЕТРИК И ТАЙМЕРОВ ПРОИЗВОДИТЕЛЬНОСТИ
// Скрипты антифрод-систем могут использовать высокоточные таймеры производительности нашего центрального процессора для проведения телеметрических атак по сторонним каналам (*Side-Channel Attacks*) с целью скрытой уникальной идентификации устройства. Зажимаем точность таймеров
user_pref("dom.enable_performance_navigation_timing", false);
// 8. ЗАПРЕТ ФОНОВОЙ АКТИВНОСТИ СЕТИ И ПРЕДЗАГРУЗОК (PREDICTION)
// Firefox пытается угадать, на какую ссылку на странице мы потенциально можем нажать, и в фоновом режиме заранее открывает скрытые параллельные спекулятивные соединения. Это приводит к несанкционированным утечкам DNS-запросов и лишней сетевой активности в эфире. Полностью блокируем предзагрузки
user_pref("network.predictor.enabled", false);
user_pref("network.predictor.enable-hover", false);
user_pref("network.prefetch-next", false);
user_pref("network.dns.disablePrefetch", true);
user_pref("network.dns.disablePrefetchFromHTTPS", true);
user_pref("network.http.speculative-parallel-limit", 0);
// 9. ОЧИСТКА ОТ РЕКОМЕНДАЦИЙ И КЭША ДОПОЛНЕНИЙ
// Блокируем любые скрытые фоновые запросы к серверам Mozilla, которые удаленно сканируют наши установленные плагины, проверяют историю покупок и пытаются навязать «рекомендованный» спонсорский софт в панели управления дополнениями
user_pref("extensions.getAddons.cache.enabled", false);
user_pref("extensions.htmlaboutaddons.recommendations.enabled", false);
user_pref("browser.discovery.enabled", false);
user_pref("browser.shopping.experience2023.enabled", false);
// 10. ОТКЛЮЧЕНИЕ ДОСТУПА К ФИЗИЧЕСКИМ ДАТЧИКАМ УСТРОЙСТВА
// Веб-сайты не имеют легитимного права запрашивать параметры физического состояния нашего ПК или ноутбука, такие как датчики освещенности, гироскопы, акселерометры или сенсоры приближения
user_pref("device.sensors.enabled", false);
user_pref("device.sensors.ambientLight.enabled", false);
user_pref("device.sensors.motion.enabled", false);
user_pref("device.sensors.orientation.enabled", false);
user_pref("device.sensors.proximity.enabled", false);
// 11. УЛЬТИМАТИВНЫЙ ФИНГЕРПРИНТИНГ И СКРЫТИЕ СЕТЕВОГО СТАТУСА (TOR MECHANISM)
// Делаем параметры нашего браузера полностью безликими, используя жесткие защитные наработки проекта Tor. Браузер принудительно скроет реальный статус локального сетевого подключения и заблокирует расширениям доступ к системным менеджерам
user_pref("privacy.resistFingerprinting", true);
user_pref("privacy.resistFingerprinting.block_mozAddonManager", true);
user_pref("dom.netinfo.enabled", false);
// 12. ОТКЛЮЧЕНИЕ ПЕРИФЕРИИ, ВИРТУАЛЬНОЙ РЕАЛЬНОСТИ И РЕЧЕВЫХ API
// Запрещаем сайтам опрашивать подключенные внешние устройства (например, игровые геймпады), делать скрытые снимки экрана через медиа-интерфейсы, перехватывать трансляцию рабочего стола и активировать модули распознавания речи
user_pref("dom.gamepad.enabled", false);
user_pref("dom.imagecapture.enabled", false);
user_pref("dom.presentation.enabled", false);
user_pref("media.getusermedia.screensharing.enabled", false);
user_pref("media.navigator.enabled", false);
user_pref("media.navigator.permission.disabled", true);
user_pref("media.video_stats.enabled", false);
user_pref("dom.vr.enabled", false);
user_pref("dom.xr.enabled", false);
user_pref("media.webspeech.recognition.enable", false);
user_pref("media.webspeech.synth.enabled", false);
// 13. ТОТАЛЬНОЕ ВЫРЕЗАНИЕ СИСТЕМНОЙ ТЕЛЕМЕТРИИ И ОТЧЕТОВ СБОЕВ (BREAKPAD)
// полностью отрезаем браузеру любую архитектурную возможность отправлять скрытые фоновые отчеты, технические метрики, журналы ошибок и логи стабильности на серверы Mozilla и сторонние сервисы сбора отладочной информации (Breakpad)
user_pref("toolkit.telemetry.unified", false);
user_pref("toolkit.telemetry.enabled", false);
user_pref("toolkit.telemetry.archive.enabled", false);
user_pref("toolkit.telemetry.server", "");
user_pref("datareporting.healthreport.uploadEnabled", false);
user_pref("datareporting.policy.dataSubmissionEnabled", false);
user_pref("browser.tabs.crashReporting.sendReport", false);
user_pref("toolkit.crashreporter.enabled", false);
user_pref("breakpad.reportURL", "");
user_pref("security.ssl.errorReporting.automatic", false);
user_pref("network.allow-experiments", false);
user_pref("toolkit.telemetry.cachedClientID", "");
user_pref("toolkit.telemetry.cachedProfileGroupID", "");
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
user_pref("browser.newtabpage.activity-stream.telemetry", false);
user_pref("browser.newtabpage.activity-stream.telemetry.privatePing.enabled", false);
user_pref("browser.search.serpEventTelemetryCategorization.enabled", false);
user_pref("identity.fxaccounts.telemetry.clientAssociationPing.enabled", false);
user_pref("nimbus.telemetry.targetingContextEnabled", false);
user_pref("toolkit.coverage.endpoint.base", "");
user_pref("toolkit.telemetry.shutdownPingSender.enabled", false);
user_pref("toolkit.telemetry.newProfilePing.enabled", false);
user_pref("network.captive-portal-service.enabled", false);
user_pref("captivedetect.canonicalURL", "");
// 14. СТИРАНИЕ РЕГИОНАЛЬНОГО СЛЕДА И ИЗОЛЯЦИЯ ПОИСКА
// Запрещаем поисковым алгоритмам подстраивать результаты выдачи под наш текущий IP-адрес или геопозицию хост-машины, принудительно выставляя нейтральный регион и отключая фоновые сетевые запросы гео-определения
user_pref("browser.search.geoSpecificDefaults", false);
user_pref("browser.search.geoSpecificDefaults.url", "");
user_pref("browser.search.geoip.url", "");
user_pref("browser.search.region", "US");
user_pref("browser.search.suggest.enabled", false);
user_pref("browser.search.update", false);
// 15. ОТКЛЮЧЕНИЕ ПУШ-УВЕДОМЛЕНИЙ И КЕПТИВ-ПОРТАЛОВ
// Блокируем пуш-сообщения от веб-ресурсов (актуальный вектор для проведения целевых фишинговых атак) и полностью отключаем скрытые фоновые пинги проверки доступности интернета, генерируемые службой авторизации в публичных сетях
user_pref("dom.push.enabled", false);
user_pref("dom.push.connection.enabled", false);
user_pref("dom.push.serverURL", "");
user_pref("network.captive-portal-service.enabled", false);
// 16. ЗАЩИТА DNS, ШИФРОВАНИЕ ИМЕН И КРИТИЧЕСКИЙ РЕЖИМ DoH (MODE 3)
// Полностью шифруем весь сетевой трафик и имена запрашиваемых сайтов. Местный провайдер или системы контроля связи не смогут увидеть, на какие веб-ресурсы мы заходим, благодаря принудительной активации механизмов шифрования заголовков SNI (*Encrypted Client Hello — ECH*) и строгому изолированному режиму DNS-over-HTTPS
user_pref("network.dns.disableIPv6", true);
user_pref("network.dns.echconfig.enabled", true);
user_pref("network.trr.mode", 3);
user_pref("network.trr.custom_uri", "https://dns10.quad9.net/dns-query"); // Или любой другой DoH из списка!
user_pref("network.proxy.socks_remote_dns", true);
// 17. ВЫРЕЗАНИЕ СЛИВА ХЭШЕЙ В GOOGLE SAFE BROWSING И DRM-МОДУЛЕЙ
// Антифишинговая встроенная служба *Safe Browsing* непрерывно отправляет информацию о посещаемых сайтах и скачиваемых файлах через базы данных корпорации Google. Отключаем этот скрытый шпионаж, параллельно блокируя системную заглушку Firefox, которая запрещает стандартные загрузки при выключенном Google-модуле. Дополнительно деактивируем закрытые бинарные модули DRM-защиты цифрового контента
user_pref("browser.safebrowsing.malware.enabled", false);
user_pref("browser.safebrowsing.phishing.enabled", false);
user_pref("browser.safebrowsing.downloads.enabled", false);
user_pref("browser.safebrowsing.downloads.remote.enabled", false);
user_pref("browser.safebrowsing.downloads.remote.block_as_unencrypted", false);
user_pref("browser.safebrowsing.downloads.remote.url", "");
user_pref("media.eme.enabled", false);
user_pref("browser.eme.ui.enabled", false);
user_pref("browser.safebrowsing.provider.google4.dataSharing.enabled", false);
user_pref("browser.safebrowsing.provider.google4.updateURL", "");
user_pref("browser.safebrowsing.provider.google4.gethashURL", "");
user_pref("browser.safebrowsing.provider.mozilla.updateURL", "");
user_pref("browser.safebrowsing.provider.mozilla.gethashURL", "");
// 18. ПОЛНЫЙ ПЕРЕНОС КЭША В ОПЕРАТИВНУЮ ПАМЯТЬ (ЗАЩИТА СРОКА СЛУЖБЫ SSD)
// По умолчанию Firefox непрерывно пишет гигабайты временного кэша (картинки, скрипты сайтов) на физический диск. Даже при зашифрованном LUKS-разделе это изнашивает ячейки памяти нашего NVMe/SSD и оставляет физические следы текущей сессии до выключения ПК. Заставим браузер держать весь объем кэша строго в оперативной памяти (RAM) объемом до 512 МБ, откуда он бесследно испарится при закрытии программы
user_pref("browser.cache.disk.enabled", false);
user_pref("browser.cache.memory.enabled", true);
user_pref("browser.cache.memory.capacity", 524288);
// 19. ПАРАНОИДАЛЬНАЯ ИЗОЛЯЦИЯ ПРОЦЕССОВ НА УРОВНЕ ЯДРА (FISSION)
// Принудительно включаем современную технологию *Site Isolation*. Она изолирует каждую открытую вкладку и каждый сторонний фрейм (например, рекламный баннер) в изолированный независимый процесс операционной системы. Это аппаратно защищает от опасных хакерских атак класса *Spectre/Meltdown*, не позволяя скомпрометированному сайту украсть пароли или куки-файлы из соседней вкладки
user_pref("fission.autostart", true);
user_pref("dom.ipc.processCount", 8);
// 20. ПЕРЕКРЫТИЕ МИКРО-УТЕЧЕК ДАННЫХ (КЛИПБОРД, СТРИППИНГ URL, ШРИФТЫ)
// Блокируем скрытую передачу метаданных сторонним сайтам. Полностью запрещаем веб-ресурсам перехватывать или модифицировать содержимое нашего буфера обмена (клипборда), активируем жесткую очистку трекинг-хвостов в веб-ссылках и запрещаем сайтам опрашивать список установленных в нашей операционной системе шрифтов (*Font Fingerprinting*)
user_pref("privacy.query_stripping.enabled", true);
user_pref("privacy.query_stripping.enabled.pbmode", true);
user_pref("layout.css.font-visibility", 1);
user_pref("network.http.referer.XOriginPolicy", 2);
// 21. ЗАКРЫТИЕ СЕТЕВЫХ СТРУКТУРНЫХ ДЫР (ОТКЛЮЧЕНИЕ ШПИОНАЖА OCSP)
// Отключаем скрытые фоновые сетевые запросы верификации и проверки сертификатов безопасности, которые браузер в фоновом режиме транслирует к сторонним серверам без прямого ведома и согласия пользователя
user_pref("security.tls.enable_post_handshake_auth", false);
user_pref("security.OCSP.enabled", 0);
user_pref("security.OCSP.require", false);
// 22. ОТКЛЮЧЕНИЕ СКРЫТЫХ ИССЛЕДОВАНИЙ (MOZILLA STUDIES/EXPERIMENTS)
// Запрещаем браузеру участвовать в секретных экспериментах и фоновых исследованиях, которые позволяют удаленно изменять конфигурацию без ведома пользователя. Полностью ликвидируем каналы телеметрии, передающие данные о поведении системы на серверы сбора статистики
user_pref("app.shield.optoutstudies.enabled", false);
user_pref("app.normandy.enabled", false);
user_pref("app.normandy.api_url", "");
// 23. БОЛЕЕ ПЛАВНЫЙ СКРОЛЛИНГ СТРАНИЦ
// Корректируем базовые параметры отрисовки для устранения рывков при чтении объемных веб-документов. Активируем аппаратную плавность прокрутки страниц и жестко фиксируем минимальный шаг скроллинга колесом мыши для повышения читаемости текста в динамике
user_pref("general.smoothScroll", true);
user_pref("mousewheel.min_line_scroll_amount", 20);
// 24. ВКЛЮЧЕНИЕ АППАРАТНОГО УСКОРЕНИЯ WEBRENDER (НАГРУЗКА НА GPU)
// Переводим процесс отрисовки веб-страниц со стандартного центрального процессора на ресурсы графического ускорителя (видеокарты). Это радикально разгружает систему при обработке сложных скриптов и тяжелой графики, снижая риск зависаний
user_pref("gfx.webrender.all", false);
user_pref("gfx.webrender.software", true);
// 25. ОТКЛЮЧЕНИЕ РЕКЛАМЫ И СПОНСОРСКОГО КОНТЕНТА НА ДОМАШНЕЙ СТРАНИЦЕ
// Полностью вырезаем любые рекламные блоки, спонсируемые сайты и новостные ленты со стартовой страницы браузера. Одновременно аннулируем адрес конечной точки сбора телеметрии для предотвращения утечки поисковой активности
user_pref("browser.newtabpage.activity-stream.telemetry.structuredIngestion.endpoint", "");
user_pref("browser.newtabpage.activity-stream.showSponsored", false);
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
user_pref("browser.newtabpage.activity-stream.feeds.discoverystreamfeed", false);
user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
// 26. ЗАЩИТА ОТ ЦИФРОВЫХ ОТПЕЧАТКОВ (БЛОКИРОВКА CANVAS И FINGERPRINTING PROTECTION)
// Активируем встроенный современный механизм маскирования цифрового следа. Браузер принудительно подмешивает случайный шум при попытках сайтов скрыто считать графический холст (Canvas) и подменяет системные метки, предотвращая долгосрочную идентификацию железа без использования ломающего верстку режима To.
user_pref("privacy.fingerprintingProtection", true);
user_pref("privacy.fingerprintingProtection.pbmode", true);
user_pref("privacy.trackingprotection.fingerprinting.enabled", true);
// 27. ПОЛНАЯ ИЗОЛЯЦИЯ КУКИ-ФАЙЛОВ (TOTAL COOKIE PROTECTION/dFPI)
// Ликвидируем межсайтовую слежку (Cross-Site Tracking) за счет изоляции куки-файлов каждого веб-ресурса в отдельный изолированный контейнер. Сторонние рекламные скрипты и трекеры теряют техническую возможность считывать чужие идентификаторы кук, при этом сохраняется корректная работа сквозной авторизации на доверенных сервисах
user_pref("privacy.firstparty.isolate", false); // Старый жесткий режим Tor отключаем, чтобы не ломать верстку сайтов
user_pref("network.cookie.cookieBehavior", 5); // Включаем динамическую изоляцию сторонних кук (Total Cookie Protection)
user_pref("network.cookie.cookieBehavior.pbmode", 5); // Дублируем жесткую изоляцию кук для режима инкогнито
// 28. В дополнение к отключению DRM, режем скачивание самого плагина Widevine
user_pref("media.gmp-widevinecdm.enabled", false);
user_pref("media.gmp-widevinecdm.visible", false);
user_pref("media.gmp-provider.enabled", false); // Отключает GMP провайдер в целом
user_pref("media.gmp.storage.version.observed", 0);
// 29. Чтобы лиса даже не думала опрашивать сервера Mozilla на предмет обновления кодеков
user_pref("media.gmp-manager.url", "");
user_pref("media.gmp-manager.buildID", "");
user_pref("media.gmp-manager.updateEnabled", false);
Чтобы сохранить конфигурацию в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода обратно в консоль.
23.4. Выставляем права «только чтение для владельца» внутри текущей папки профиля:
chmod 0400 user.js
Развертывание ультимативных защитных расширений
Поскольку активированный нами ранее параметр privacy.resistFingerprinting (RFP) уже имитирует и подменяет все ключевые отпечатки на уровне исходников Gecko-движка, нам остается интегрировать всего два расширения из официального магазина дополнений Mozilla:
uBlock Origin (разработчик Raymond Hill) — https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/. Лучший в индустрии блокировщик рекламы, скрытых скриптов майнеров, трекеров слежки и вредоносных фишинговых доменов. Обладает отличным быстродействием и практически не потребляет ОЗУ.
NoScript Security Suite (разработчик Giorgio Maone) — https://addons.mozilla.org/en-US/firefox/addon/noscript/. Ультимативная система исполнения JavaScript-кода. Позволяет пользователю в реальном времени разрешать или блокировать выполнение любых скриптов на веб-страницах, обеспечивая защиту от скрытых браузерных эксплойтов. Запускать строго в режиме STRICT!
Portmaster — это мощный интерактивный файрвол нового поколения. Он предоставляет инструменты глубокого мониторинга сетевых подключений в реальном времени. Утилита обладает огромным количеством низкоуровневых фильтров и гибких настроек.
В отличие от аналогичной утилиты OpenSnitch, Portmaster из коробки использует политику «Все разрешено» (Allow). Он пропускает в сеть любые приложения хоста. Пакеты блокируются только после того, как пользователь изменит глобальные правила. Что мы собственно и проделаем.
24.1. Открываем наш настроенный Firefox. Переходим на официальный сайт разработчиков https://safing.io. Скачиваем полный offline-установщик Portmaster v2 в формате .deb (для систем Debian/Ubuntu). После успешного завершения загрузки полностью закрываем Firefox.
https://updates.safing.io/latest/linux_amd64/packages/Portmaster_2.2.1_amd64.deb \ Прямой линк актуальный на 8 сентября 2026 (релиз от 17 июля 2026).
24.2. Открываем терминал хоста. Скачиваем официальный стабильный .deb инсталлятор старой версии с серверов обновлений Safing для развертывания первичных структур:
wget https://updates.safing.io/latest/linux_amd64/packages/portmaster-installer.deb
24.3. Накатываем скачанный пакет через утилиту apt. Пакетный менеджер автоматом доставит в ядро Linux зависимость libnetfilter-queue1:
sudo apt install ./portmaster-installer.deb -y
Как только установка завершится, отключим сеть и запустим Portmaster через системное меню «Show Apps». При первом запуске оболочка выдаст критическое оповещение: The Portmaster Core is not running. Смело жмякаем кнопку «START CORE SERVICE» и вводим пароль суперпользователя root во всплывающем окне аутентификации.
На приветственном экране Portmaster Protects Your Privacy нажимаем голубую кнопку «Quick Setup». В следующем окне блокировки трекеров Trackers Are Blocked System-Wide нажимаем «Next».
В поле Secure DNS For All Connections находим выпадающее меню Customize. Выбираем надежного швейцарского DNS-провайдера из встроенного списка. Выбиоаем к примеру Set Quad9. Сворачиваем выпадающее меню и нажимаем «Next». На финальном экране Learn More As You Explore нажимаем кнопку «Finish».
В левом вертикальном навигационном баре нажимаем на иконку шестеренки Settings. Переходим в раздел Privacy Filter и находим подраздел Default Network Action. Меняем значение в выпадающем меню со стандартного Allow (Разрешить) на Prompt (Спрашивать). Теперь файрвол будет блокировать любую сетевую активность и запрашивать одобрение на каждый исходящий пакет.
Ненадолго поднимаем сеть обратно, чтобы файрвол докачал остатки библиотек и фильтров. Как только установка завершится и файрвол загорится зеленым, снова отрубаем сеть.
Вся магия этой схемы кроются в обмане конвейера инициализации Go-рантайма Safing. Если попытаться развернуть Portmaster v2 на систему с настроенным UFW, его движок из-за абсолютно пустого локального кэша баз данных впадает в ступор. Он начинает бесконечно генерировать eBPF-хуки, натыкается на блокирующие таблицы UFW, зацикливается и улетает в мертвую петлю, раскаляя ядра процессора на полную катушку из-за перманентных ошибок синхронизации.
Старая базовая версия (1.6.10) в оффлайне спокойненько разворачивает структуру каталогов, конфигурационных файлов и БД в каталоге /opt/safing/portmaster/, вообще не конфликтуя с UFW.
Когда мы поверх накатываем пакет v2, новое ядро файрвола видит уже готовую инициализированную структуру БД. Оно подхватывает готовый фундамент и спокойно засыпает в общем сетевом стеке с UFW. Оба защитных барьера работают параллельно, не мешая друг другу и сохраняя монолитность!
24.4. Оставаясь в режиме полного радиомолчания с отключенной сетью, открываем терминал и переходим в каталог со скачанным ранее полным оффлайн-пакетом:
cd ~/Downloads/
24.5. Устанавливаем оффлайн-сборку Portmaster v2 поверх старой версии. Пакетный менеджер APT автоматически остановит фоновые процессы, обновит исполняемые файлы и перепишет systemd-юниты, не пытаясь ломиться в интернет:
sudo apt install ./Portmaster_*.deb -y
24.6. Для корректной инициализации новой версии eBPF-драйвера в ядре Linux выполняем перезагрузку:
sudo reboot now
Важное примечание: При первом появлении рабочего стола GUI нашего Portmaster запросит разрешение на внутреннее подключение к интерфейсу локального хоста (localhost 127.0.0.1). Разумеется, одобряем это действие, нажав кнопку Allow.
24.7. Для полноценной работы Firefox нам необходимо временно снять «железный замок» с его конфигурационного файла, чтобы скорректировать режим работы DNS-резолвера:
chmod 600 ~/.config/mozilla/firefox/*-release/user.js
24.8. Открываем user.js через консольный текстовый редактор nano:
nano ~/.config/mozilla/firefox/*-release/user.js
24.9. Находим блок под номером 16. ЗАЩИТА DNS, ШИФРОВАНИЕ ИМЕН И КРИТИЧЕСКИЙ РЕЖИМ DoH. Меняем значение низкоуровневого параметра network.trr.mode с изолированной «тройки» на дефолтный 0:
user_pref("network.trr.mode", 0);
Чтобы сохранить внесенные изменения в редакторе nano, нажимаем комбинацию клавиш «Ctrl + O» → «Enter», а затем «Ctrl + X» для выхода обратно в консоль.
24.10. Обратно заблокаем файл user.js от любых изменений со стороны браузера и обновлений:
chmod 0400 ~/.config/mozilla/firefox/*-release/user.js
24.11. Чтобы в системе не оставалось лишнего цифрового мусора, полностью удаляем установочный .deb пакет из локальной папки:
rm ~/Downloads/Portmaster_*.deb && rm ~/portmaster-installer.deb
Возвращаем сеть в строй, и в целом наш харднинг закончен.
Далее в книге я описываю варианты удаления метаданных через mat2, настройку yubikey, ну и прочее.
Времени много, да написал и отредактировал я уже тоже не мало, и не факт что админы пропустят мой первый пост, а если и пропустят то продолжение я напишу не прямо завтра, поэтому если кто хочет всё и сразу, то велком в мой репозиторий:
Автор: EugeXo
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/457781
Ссылки в тексте:
[1] Главная пэйджа проекта тут: https://github.com/EugeXo/security-baseline-ubuntu
[2] Книга на русском языке тут: https://github.com/EugeXo/security-baseline-ubuntu/blob/main/ru/security-baseline-ru.md
[3] Источник: https://habr.com/ru/articles/1081210/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1081210
Нажмите здесь для печати.