NetworkAdmin.ru
4.73K subscribers
240 photos
32 videos
2 files
605 links
Авторский блог про сетевое и системное администрирование.

Сайт: networkadmin.ru
Реклама: @dad_admin
Биржа: https://telega.in/c/networkadminru
Download Telegram
⌛️ Как посмотреть прогресс cp, dd, gzip и других утилит

В репозиториях большинства linux-дистрибутивов есть небольшая, но очень полезная утилита - progress. Она показывает процент выполнения для операций coreutils: cp, mv, dd, tar, gzip/gunzip, cat и других.

По смыслу ее часто сравнивают с pv, но принцип работы разный. pv получает данные из pipe - значит, поток нужно заранее направить через него.
progress работает иначе: он сканирует /proc, находит поддерживаемые процессы, затем через fd и fdinfo отслеживает изменения открытых файлов и вычисляет прогресс.

Главный плюс - подключиться можно в любой момент, даже если процесс уже запущен. Например, вы распаковываете огромный SQL-дамп и хотите понять, сколько еще ждать.

▪️ Пример. Создадим тестовый файл:


dd if=/dev/urandom of=testfile bs=1M count=2048


(Для dd процент может не отображаться, если конечный размер неизвестен, будет показываться только скорость.)

Сжимаем файл:


gzip testfile


В другой консоли смотрим прогресс:


watch -n 1 progress -q


Вывод будет примерно такой:


[34209] gzip /tmp/testfile
6.5% (132.2 MiB / 2 GiB)


Без watch утилита покажет текущее состояние и завершится, а для живого мониторинга лучше обновлять раз в секунду.

Аналогично при распаковке:


gunzip testfile.gz


Во второй консоли:


watch -n 1 progress -q

[35685] gzip /tmp/testfile.gz
76.1% (1.5 GiB / 2.0 GiB)


progress - крошечная утилита (~31 КБ), написанная на C, с единственной зависимостью - ncurses. Устанавливается просто:


apt install progress
dnf install progress


Минимум веса и максимум пользы.

#linux #progress

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍141🔥1
📱 Ansible Pull: когда сервер сам себя настраивает

Обычно с Ansible работают в режиме push: управляющая машина подключается по SSH и применяет playbook к целевым хостам. Но есть и обратная модель - ansible-pull, когда сервер сам забирает конфигурацию и применяет ее локально.

Это удобно там, где:

хосты находятся за NAT или в изолированной сети;
нет постоянного доступа с управляющего узла;
инфраструктура динамическая (VPS, авто-масштабирование).

Как это работает

Сервер:

Клонирует репозиторий (обычно Git)
Запускает playbook локально
Повторяет процесс по cron/systemd timer


▪️ Пример запуска:


ansible-pull -U https://git.networkadminru/infra.git site.yml


Где:

-U - URL репозитория
site.yml - основной playbook

По сути, это self-configuring node.

▪️ Автоматизация по расписанию. Чаще всего делают так:


*/15 * * * * ansible-pull -U https://git.networkadminru/infra.git site.yml


И сервер каждые 15 минут сам проверяет обновления конфигурации.

▪️ Когда это особенно полезно

Edge-серверы и филиалы;
Облака с автоскейлингом;
Zero-trust сети;
Immutable-подход с периодическим re-apply.

🤩 Плюсы

Нет необходимости держать открытый SSH;
Хорошо масштабируется;
Минимальная точка отказа;
Можно использовать Git как single source of truth.

🤩 Минусы

Сложнее централизованный контроль;
Нужно аккуратно работать с секретами;
Логи выполнения нужно куда-то отправлять.

▪️ Push vs Pull - что выбрать?

Классический Ansible: удобен для администрирования и ad-hoc задач
Ansible Pull: хорош для распределенных и автономных систем

Иногда разумно комбинировать оба подхода.

#ansible #devops

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Высокие технологии, они среди нас

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁14🫡51👍1
💚 Практика настройки SSHD: что имеет смысл проверить

Служба SSH есть почти на каждом сервере: виртуальном или железном. Доступ по SSH - это основа администрирования. В идеале его стоит закрывать от публичной сети, но на практике это не всегда возможно.

Основные параметры настраиваются в /etc/ssh/sshd_config. Ниже указаны моменты, на которые стоит обратить внимание.

1️⃣ Парольная аутентификация. Каждый решает сам:


PasswordAuthentication yes


Можно оставить ее включенной как резервный вариант. Если пароль сложный и несловарный - реального риска перебора нет.
Но если отключить парольную аутентификацию, почти весь бот-скан исчезает из логов.

2️⃣ Аутентификация по ключам. По умолчанию включена:


PubkeyAuthentication yes


Лучше использовать ключи ed25519 - они короче, быстрее и безопаснее RSA в большинстве практических сценариев.

3️⃣ Доступ root. Разрешать или нет - зависит от модели работы:


PermitRootLogin no


Если вы администрируете сервер один - работа напрямую под root упрощает жизнь.
Если команда, то лучше отдельные пользователи + sudo + аудит действий.

Если сомневаетесь, лучше временно отключите вход root и работайте через sudo.

4️⃣ Ограничение пользователей и групп. Можно явно задать, кто имеет право подключаться:


AllowGroups sshgroup
AllowUsers user01 user02


Я чаще применяю это для SFTP-доступа, создавая отдельную группу под файловый обмен.

5️⃣ Порт. Стандарт - 22:


Port 22


Смена порта - это не защита, а лишь снижение шума. Боты все равно найдут сервис, особенно если порт открыт публично и индексируется сканерами. Но хуже от смены обычно не становится.

6️⃣ Количество попыток входа. Ограничиваем перебор в рамках одной сессии:


MaxAuthTries 3


Три неверных ввода - соединение рвется.

7️⃣ Количество сессий внутри подключения. Не путать с числом параллельных подключений:


MaxSessions 1


Для обычного администрирования одной сессии достаточно.

8️⃣ Принудительная команда и SFTP-изоляция. Можно запускать не shell, а конкретную команду, например, логирующую обертку или SFTP.

Пример для группы sftpusers с chroot:


Subsystem sftp internal-sftp -u 002
Match User sftpusers
ChrootDirectory /var/www
ForceCommand internal-sftp -u 002


Пользователи группы будут ограничены SFTP-доступом к /var/www с umask 002.

Главное - это осознанная настройка, а не конфиг по умолчанию.

#linux #ssh

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143
💾 Бэкапы с шифрованием без боли

Если вам нужен простой, быстрый и безопасный инструмент для резервного копирования без громоздких серверов и агентов, то обратите внимание на restic. Это современный backup-инструмент с встроенным шифрованием, дедупликацией и поддержкой десятков хранилищ.

Почему restic удобен

Шифрование из коробки (AES-256);
Дедупликация на уровне блоков;
Инкрементальные бэкапы;
Работа с локальными дисками, SFTP, S3, Backblaze, MinIO и др.;
Один бинарник - без сервера и БД;
И главное - максимально простой workflow.


▪️ Базовая настройка. Создаем репозиторий (например, в S3 или просто в каталоге):


restic init --repo /backup


Или через переменные окружения:


export RESTIC_REPOSITORY=/backup
export RESTIC_PASSWORD=StrongPassword


▪️ Создание бэкапа


restic backup /etc /var/www


restic автоматически:

разобьет данные на чанки,
зашифрует их,
выполнит дедупликацию,
сохранит снапшот.

Каждый запуск - это новый снапшот, но без полного копирования данных.

▪️ Просмотр снапшотов


restic snapshots


Восстановление:


restic restore <snapshot_id> --target /restore


Можно восстанавливать отдельные файлы или каталоги.

▪️ Очистка старых бэкапов. Политики хранения настраиваются одной командой:


restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune


Это безопасно удалит устаревшие данные с учетом дедупликации.

▪️ Практические советы

Храните пароль вне сервера (например, в Vault или менеджер секретов);
Используйте restic check для проверки целостности;
Настройте cron + мониторинг exit-кодов;
Тестируйте восстановление (бэкап без restore - это иллюзия безопасности).

#backup #restic

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍122🤔1
🏠 Бэкапы Windows

Есть одно малоизвестное и бесплатное решение для резервного копирования Windows (включая серверные версии) - Hasleo Backup Suite Free, но при этом функциональность на уровне многих коммерческих продуктов.

▪️Что имеется в базе:

Резервное копирование всей системы, диска, раздела или отдельных файлов и папок
Клонирование системы и дисков
Типы бэкапов: полный, инкрементальный, дифференциальный
Расписание, политики хранения, автоочистка старых копий
Universal Restore (восстановление на другое железо)
Шифрование и проверка целостности бэкапов
Создание загрузочного носителя на базе WinPE
Подробное логирование


Функционально - все, что ожидаешь от нормального backup-решения. Без перегруза и маркетинговых фич ради фич. Русский перевод в целом аккуратный, без явных ляпов. Но есть нюанс: программа создает каталоги бэкапов на русском, например: Бэкап системы 20260330181411

И вот это уже спорный момент: кириллица + пробелы в именах директорий - не всегда хорошо Но в таком случае лучше использовать английскую версию интерфейса.

▪️ Тестирование

1️⃣Установил программу и сделал полный бэкап системы в сетевую папку;
2️⃣Создал загрузочный диск через интерфейс;
3️⃣Развернул чистую виртуальную машину;
4️⃣Загрузился с rescue-носителя, назначил IP, подключил сетевой ресурс;
5️⃣Восстановил систему из сетевого бэкапа.

Все прошло удивительно гладко: быстро, без танцев с драйверами и неожиданными ошибками. Загрузочный носитель показался даже более удобным и шустрым.

Если нужен бесплатный инструмент для резервного копирования рабочих станций или небольших серверов - это вполне рабочий вариант.

#backup #windows

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍171
🔐 Хранение секретов внутри инфраструктуры

Пароли в txt, доступы в вики - классика, которая рано или поздно заканчивается утечкой. Если инфраструктура растет, без централизованного менеджера секретов уже не обойтись.

Один из самых практичных вариантов - Bitwarden или его легкая self-hosted реализация Vaultwarden.

▪️ Bitwarden vs Vaultwarden

▪️ Bitwarden

Официальный продукт;
Есть облачная версия;
Есть self-hosted;
Поддержка, enterprise-функции.

▪️ Vaultwarden

Open-source реализация сервера Bitwarden;
Легкий (часто запускается в одном Docker-контейнере);
Минимальные требования;
Полная совместимость с официальными клиентами.

Для небольших и средних инфраструктур Vaultwarden часто идеальный вариант.

▪️ Что это дает инфраструктуре

Централизованное хранение паролей
Шифрование на стороне клиента (zero-knowledge)
Разграничение доступа по организациям и коллекциям
Поддержка 2FA
Аудит доступа

Можно хранить:

SSH-пароли
Учетки админов
Доступы к сетевому оборудованию
API-токены
Пароли сервисных аккаунтов

▪️ Развертывание (минимальный пример)


docker run -d \
--name vaultwarden \
-v /vw-data:/data \
-p 8080:80 \
vaultwarden/server:latest


И все, дальше подключаемся через браузер или официальные клиенты Bitwarden.

В продакшене, конечно:

HTTPS через reverse proxy;
регулярные бэкапы /data;
ограничение доступа по сети;
включенная админ-панель с отдельным токеном.

#security #vaultwarden

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74😁2
Вам на какой? Мне на 192.168.1.3

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁16🤡32
🔖 tcpdump advanced: фильтры, которые реально нужны

Большинство используют tcpdump как "посмотреть весь трафик на 80 порт". Но настоящая сила в BPF-фильтрах. Правильный фильтр = меньше шума, быстрее диагностика и меньше нагрузки на сервер. Небольшая шпаргалка фильтров, которые реально пригождаются.

1️⃣ Конкретный хост + порт


tcpdump -i eth0 host 10.10.10.5 and port 443


Когда нужно понять, что происходит между двумя узлами.

2️⃣ Только входящий или исходящий трафик

Исходящий:


tcpdump -i eth0 src host 192.168.1.10


Входящий:


tcpdump -i eth0 dst host 192.168.1.10


3️⃣ Только SYN (поиск новых соединений)


tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'


Подойдет для: выявления сканирования, анализа всплеска подключений, диагностики DoS

Только SYN без ACK:


tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'


4️⃣ Исключить шум. Например, убрать SSH:


tcpdump -i eth0 not port 22


Или исключить конкретную подсеть:


tcpdump -i eth0 not net 10.0.0.0/8


5️⃣ Поиск ресетов (Rst-шторм)


tcpdump -i eth0 'tcp[tcpflags] & tcp-rst != 0'


Помогает понять, кто рвет соединения: сервер, клиент или firewall.

6️⃣ Поиск retransmissions (косвенно). Прямого фильтра нет, но можно смотреть повторяющиеся sequence numbers:


tcpdump -nn -i eth0 tcp


Дальше анализ через Wireshark или tcptrace.

7️⃣ HTTP без мусора


tcpdump -i eth0 -A -s 0 'tcp port 80'


-A - показать ASCII
-s 0 - не обрезать пакеты

Можно сразу фильтровать по методу:


tcpdump -i eth0 -A 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]>>4)<<2)) != 0)'


(когда нужно видеть payload, а не только заголовки)

8️⃣ Захват в файл для анализа


tcpdump -i eth0 -w dump.pcap


С ограничением по размеру:


tcpdump -i eth0 -C 100 -W 5 -w dump.pcap


Это создаст ротацию файлов по 100MB (до 5 файлов).

9️⃣ Поиск DNS-аномалий


tcpdump -i eth0 port 53


Только большие ответы:


tcpdump -i eth0 'udp port 53 and greater 512'


Часто помогает при подозрении на туннелирование через DNS.

#linux #tcpdump

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥32
📱 Настройка history

На всех linux-серверах, которые необходимо настроить или с которыми предстоит плотно поработать, первым делом стоит задуматься про историю команд. Т.к я часто пользуюсь history, поэтому важно, чтобы команды: сохранялись сразу, хранились долго, были с таймстампами и не засорялись мусором. Обычно добавляю все в ~/.bashrc.

1️⃣ Немедленное сохранение истории. По умолчанию bash записывает команды в файл истории только при завершении сессии. Это неудобно: открыл вторую SSH-сессию и свежих команд там нет. Решение - PROMPT_COMMAND:


PROMPT_COMMAND='history -a'


history -a сохраняет команды текущей сессии в файл перед каждым выводом приглашения.

2️⃣ Таймстамп у каждой команды. Без времени история малоинформативна.


export HISTTIMEFORMAT='%F %T '


Формат будет таким:


2026-03-31 12:20:30 apt install nginx


3️⃣ Увеличение размера истории. По умолчанию хранится около 500 команд и это мало.


export HISTSIZE=10000


Теперь в лимит не упретесь 🙂

4️⃣ Игнорирование мусорных команд. Некоторые команды не несут ценности и только засоряют историю:


export HISTIGNORE="ls:history:w:htop:pwd:top:iftop"


Список можно адаптировать под себя.

5️⃣ Команда с пробела - не сохраняется. Иногда нужно выполнить что-то, что не должно попасть в историю. Для этого:


export HISTCONTROL=ignorespace


Теперь команда, введенная с пробела, не будет сохранена.

▪️ Применение настроек


source ~/.bashrc


▪️ Проверить активные параметры:


export | grep -i hist


Если хотите применить настройки ко всем пользователям, для этого создайте файл, например:


/etc/profile.d/history.sh


Скрипты оттуда выполняются при запуске shell.

▪️ Поиск по истории

Стандартный способ - Ctrl + R.
Нажимаете и начинаете вводить команду. Повторное Ctrl + R - следующий результат.

Я чаще делаю так:


history | grep 'apt install'


Сразу видно все и можно быстро скопировать нужную строку.

#linux #terminal

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
🤩 Как быстро проверить ширину канала через netcat

Если нужно оперативно прикинуть пропускную способность канала между двумя Linux-машинами, можно обойтись без установки iperf. Достаточно netcat, который в большинстве дистрибутивов уже есть.

▪️ Простой тест

Допустим, есть сервер 10.25.1.157.

На нем запускаем слушатель:


nc -lvp 5201 > /dev/null


На второй машине отправляем 100 МБ нулевых данных (10 блоков по 10 МБ):


dd if=/dev/zero bs=10M count=10 | nc 10.25.1.157 5201


dd покажет скорость передачи - это и будет приблизительная оценка ширины канала.

▪️ Насколько это точно?

Если сравнить результаты netcat и iperf3, получается интересная картина:

До 1 Gbit/sec показатели практически совпадают (разница в пределах погрешности).

Для обычных VPS и типичных серверных подключений - способ вполне рабочий.
Для быстрой диагностики, более чем достаточно.

Можно смело использовать netcat, если нужно быстро понять: канал живой и дает ли он заявленную скорость.

▪️ Что на высоких скоростях? Внутри гипервизора картина меняется.

При тестах в виртуальной среде:

iperf3 показывал около 15 Gbit/sec
netcat - примерно 4 Gbit/sec

при этом гипервизор заявлял бридж на 10 Gbit/sec

Разброс серьезный. Почему так происходит:

netcat не оптимизирован под high-performance тестирование
нет тонкой настройки TCP-параметров
влияет размер буферов
влияет CPU и обработка в user-space
виртуальная сеть дает свою специфику

В таких сценариях уже сложно сказать, кто ближе к истине. Корректный замер реальной скорости требует учета множества факторов: MTU, offload, congestion control, NUMA, CPU pinning и т.д.

#networking #netcat

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🤔2
❗️ Ansible facts: нестандартные приемы и кастомные факты

В Ansible многие используют facts только для базовых вещей: ansible_os_family, ansible_hostname, ansible_default_ipv4. Но механизм фактов куда мощнее, если копнуть глубже, можно строить динамичную и умную автоматизацию.

1️⃣ Отключаем сбор всего лишнего (и ускоряем playbook). По умолчанию Ansible собирает огромный набор фактов. Если они не нужны - это просто трата времени.


- hosts: all
gather_facts: false


А если нужны только сетевые:


- hosts: all
gather_facts: true
gather_subset:
- network


Это особенно заметно в больших инфраструктурах.

2️⃣ Используем facts как динамические условия. Например, разные действия для разных типов виртуализации:


- name: Install qemu tools
package:
name: qemu-guest-agent
state: present
when: ansible_virtualization_type == "kvm"```yaml

Или автоматический выбор пакетов по версии ОС:

```yaml
when: ansible_distribution_major_version | int >= 9


3️⃣ Кастомные факты (local facts). Самый недооцененный механизм.

Создаем на хосте файл:


/etc/ansible/facts.d/app.fact


Пример содержимого (JSON):


{
"role": "backend",
"env": "prod"
}


После этого факты будут доступны как:


ansible_local.app.role
ansible_local.app.env


Теперь сервер сам знает, кто он, а плейбук просто реагирует.

4️⃣ Динамические факты через set_fact. Можно вычислять значения на лету:


- set_fact:
is_prod: "{{ 'prod' in inventory_hostname }}"


И дальше использовать:


when: is_prod


Важно помнить: set_fact живет в рамках хоста и текущего play.

5️⃣ Делегированные факты. Иногда нужно собрать факт с одного хоста и использовать на другом:


- name: Get DB IP
command: hostname -I
register: db_ip
delegate_to: db01
run_once: true


Теперь можно передать IP в шаблон для backend-серверов.

6️⃣ Кэширование фактов. В больших инвентарях сбор фактов - это дорогая операция. Можно включить fact caching (например, в Redis или JSON):


fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_facts_cache
fact_caching_timeout = 86400


7️⃣ Факты как источник архитектуры. Можно строить инфраструктурную логику без жестких групп:

если есть второй диск, то настраиваем RAID
если RAM > 16GB, то увеличиваем worker-пулы
если это VM, то отключаем tuned-профили для bare metal

Пример:


when: ansible_memtotal_mb > 16000


#ansible #devops

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
😭 Как один rsync положил прод

Иногда прод падает не из-за zero-day, не из-за DDoS и не из-за кривого кода. Иногда его кладет… обычный rsync.

🔖 Сценарий. Есть:

прод-сервер
staging
cron-задача синхронизации
и уверенность «я же сто раз так делал»

Команда выглядела примерно так:


rsync -av --delete /data/ backup@storage:/prod-data/


Или еще лучше:


rsync -av --delete /data/ /mnt/nfs/prod/


Все работало годами. Пока однажды:

/data не примонтировался
NFS отвалился
переменная с путем оказалась пустой
кто-то перепутал source и destination

И rsync честно сделал то, что должен был сделать.


С --delete.


▪️ Почему это происходит. rsync - не "умная синхронизация". Он синхронизирует состояние директорий. Если source пустой - значит, и на destination должно быть пусто. Логика железная.

Особенно опасные кейсы:

▪️ Не примонтированный диск
/data - пустая локальная папка

rsync --delete удаляет все на целевом хранилище.

▪️ Пустая переменная


SRC=""
rsync -av --delete $SRC /backup/


Подставится / или текущая директория. И дальше - лотерея.

▪️ Перепутаны местами аргументы


rsync -av --delete backup:/data/ /data/


Удаляем прод, потому что backup оказался пустым.

▪️ Что происходит в этот момент

inode удаляются
файловая система занята
приложения падают
БД начинают ругаться
контейнеры теряют volume

А вы смотрите на логи и видите, как rsync методично чистит прод.

▪️ Как не повторить

1️⃣ Всегда делайте dry-run


rsync -av --delete --dry-run ...


Если видите тысячи deleting - остановитесь.

2️⃣ Проверяйте, что диск примонтирован (добавляйте это в скрипты)


mountpoint -q /data || exit 1


3️⃣ Используйте защитные опции


--max-delete=100


Если удалений больше - rsync аварийно завершится.

4️⃣ Делайте snapshot перед синхронизацией.
LVM, ZFS, btrfs - спасают карьеры.

5️⃣ Разделяйте роли.
Бэкап не должен иметь права удалять прод-данные.

#linux #rsync
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11😱1
📎 TCP keepalive: почему соединения умирают и как это чинить

Знакомая ситуация: приложение держит постоянное TCP-соединение (к БД, API, брокеру), все работает… а потом внезапно «connection reset» или таймаут. Особенно часто это происходит через 5–30 минут простоя. Причина обычно не в приложении, а в сети.

🤩 Что происходит

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

NAT
firewall
балансировщик
облачный LB

Эти устройства хранят таблицы состояний соединений. Если трафика нет - запись удаляется. Со стороны приложения соединение живое, но по факту его уже нет.

▪️ Где здесь TCP keepalive

TCP keepalive - это механизм, при котором стек TCP периодически отправляет служебные пакеты, чтобы подтвердить, что соединение ещё активно.

По умолчанию в Linux:


tcp_keepalive_time = 7200 (2 часа!)
tcp_keepalive_intvl = 75
tcp_keepalive_probes = 9


Для современных инфраструктур это слишком долго - NAT обычно живет 300–900 секунд.

▪️ Как чинить

1️⃣ Включить keepalive в приложении (многие драйверы БД и HTTP-клиенты это поддерживают).

2️⃣ Настроить параметры в системе:


sysctl -w net.ipv4.tcp_keepalive_time=300
sysctl -w net.ipv4.tcp_keepalive_intvl=30
sysctl -w net.ipv4.tcp_keepalive_probes=5


Теперь проверка пойдет через 5 минут простоя, а не через 2 часа.

3️⃣ Учитывать таймауты балансировщиков (например, в облаке они могут быть 350 секунд).

#linux #networking

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Просьба не завидовать 😎

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁18🔥3
💫 Быстрые откаты системы без LVM

Файловая система Btrfs умеет делать снапшоты - мгновенные снимки состояния файловой системы. Это позволяет быстро откатывать систему или данные назад без использования LVM, внешних бэкапов или сложных схем.

Снапшоты в Btrfs работают по принципу Copy-on-Write (CoW): данные не копируются сразу. Создается только метаданные-ссылка на текущие блоки. Реальное место начинает занимать только то, что изменяется после создания снимка.

▪️ Создание subvolume. Сначала создаем подтом (subvolume), если его еще нет:


btrfs subvolume create /data


▪️ Создание snapshot. Сделаем снимок текущего состояния:


btrfs subvolume snapshot /data /data_snapshot


Это занимает доли секунды независимо от размера данных.

Можно сделать snapshot только для чтения:


btrfs subvolume snapshot -r /data /snapshots/data_2026-04-20


▪️ Просмотр снапшотов


btrfs subvolume list /


▪️ Откат к предыдущему состоянию. Удаляем текущий subvolume:


btrfs subvolume delete /data


И возвращаем snapshot:


btrfs subvolume snapshot /snapshots/data_2026-04-20 /data


Система или сервис сразу получают прежнее состояние файлов.

⚠️ Важно помнить

снапшот не является полноценным Бэконом
повреждение диска уничтожит и данные, и снапшоты

для защиты данных используйте отдельные бэкапы (например restic или borg)

#linux #btrfs

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🤡1
👨‍💻 tcpdump: набор команд для быстрой диагностики сети

Инструмент незаменимый, возможностей у него огромное количество, но на практике чаще всего хватает небольшого набора команд. Ниже краткая шпаргалка из того, что реально используется в работе.

⚠️ Практически всегда добавляю ключ -nn, чтобы tcpdump не резолвил IP-адреса в домены и не подменял номера портов именами сервисов. В отладке это только мешает.

▪️ Список интерфейсов для захвата. Посмотреть, с каких интерфейсов можно слушать трафик:


tcpdump -D


Если запускать tcpdump без параметров, он будет слушать первый активный интерфейс из списка.

▪️ Захват трафика. Слушаем все интерфейсы:


tcpdump -nn -i any


Или конкретный:


tcpdump -nn -i eth0


▪️ Фильтрация по портам. Иногда один протокол полностью забивает вывод. Например, SSH. Его можно исключить:


tcpdump -nn -i any not port 22


Или наоборот смотреть только нужный порт:


tcpdump -nn -i any port 443


▪️ Фильтрация по IP. Трафик к определенному серверу:


tcpdump -nn dst 1.1.1.1


Несколько адресов:


tcpdump -nn dst 1.1.1.1 or dst 9.9.9.9


Комбинация адреса и порта:


tcpdump -nn dst 1.1.1.1 and port 443


Фильтры можно комбинировать через and / or / not.

▪️ Фильтрация по протоколу. Например, посмотреть ARP:


tcpdump -nn -i any arp


Или исключить его:


tcpdump -nn -i any not arp


▪️ Сохранение вывода. Если трафика много, удобнее писать его в файл:


tcpdump -nn -i any > ~/traffic.log


▪️ Пример из практики. Посмотреть HTTPS-трафик от конкретного клиента к серверу через VPN:


tcpdump -nn -i tun0 src 10.10.0.25 and dst 10.10.0.5 and port 443


Несмотря на пугающий вывод, tcpdump довольно простой инструмент.
Чаще всего достаточно увидеть строки вроде:


IP 10.0.0.12.53422 > 10.0.0.5.443


Где указаны источник, порт, получатель и порт назначения. Этого уже хватает, чтобы понять, что происходит в сети.

#network #tcpdump

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
❗️ cgroups v2: ограничение CPU/RAM для сервисов без Docker

Многие привыкли к тому, что лимиты CPU и памяти - это что-то из мира docker и k8s. Но на самом деле механизм один и тот же: cgroups. И если у вас обычный linux-сервер без контейнеров, вы все равно можете жестко ограничивать ресурсы для systemd-сервисов.

Это удобно, когда один процесс начинает съедать всю память, душить CPU или мешать остальным сервисам на хосте.

В современных дистрибутивах используется cgroups v2, а systemd умеет работать с ним из коробки.

▪️ Что можно ограничить:

Память. Чтобы сервис не выедал весь RAM и не отправлял сервер в OOM.
CPU. Чтобы процесс не занимал все ядра и не мешал соседям.
Число процессов. Чтобы защититься от fork-бомб и неконтролируемого роста дочерних процессов.

▪️ Пример: ограничим сервис по памяти и CPU.. Откроем override-конфиг:


systemctl edit myapp.service


Добавим:


[Service]
MemoryMax=500M
CPUQuota=50%
TasksMax=200


MemoryMax=500M - сервис не сможет использовать больше 500 МБ памяти
CPUQuota=50% - максимум половина одного CPU
TasksMax=200 - не более 200 процессов/потоков

После этого применяем изменения:


systemctl daemon-reload
systemctl restart myapp.service


Проверить лимиты можно так:


systemctl show myapp.service | grep -E "MemoryMax|CPUQuota|TasksMax"


Или посмотреть, в какой cgroup живет процесс:


systemctl status myapp.service


Если хотите ограничить уже запущенный сервис без ручного редактирования unit-файла, можно использовать runtime-свойства:


systemctl set-property myapp.service MemoryMax=300M CPUQuota=25%


Это удобно для быстрого придушивания прожорливого процесса на боевом сервере.

▪️ Еще полезные параметры:


[Service]
MemoryHigh=400M
MemoryMax=500M
CPUWeight=200
IOWeight=200


Тут разница такая:

MemoryHigh - мягкий порог, после которого ядро начинает сильнее давить процесс по памяти
MemoryMax - жесткий предел
CPUWeight - относительный приоритет по CPU среди других cgroup
IOWeight - относительный приоритет по дисковому I/O

⚠️ Важно помнить

CPUQuota=50% - это не половина всех ядер, а квота CPU-времени. На многоядерных системах поведение нужно понимать внимательно.

И еще: если сервис уже упирается в лимит памяти, он может начать падать, а не магически оптимизироваться. Лимиты защищают систему, но не исправляют плохое приложение.

#systemd #cgroups

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3
👉 NTFS vs ReFS: что использовать на серверах Windows

Когда речь заходит о файловой системе на Windows Server, многие смотрят на ReFS как на новый NTFS. Но в реальной эксплуатации все не так просто.

NTFS - это универсальный и самый совместимый вариант.
ReFS - это специализированный инструмент под определенные сценарии, а не замена везде и для всего. Microsoft прямо позиционирует NTFS как файловую систему по умолчанию, а ReFS - как вариант для задач, где важны целостность данных, масштабирование и отдельные storage-оптимизации.

▪️ Что дает NTFS:

▪️максимальную совместимость с приложениями и ролями windows;
▪️привычные функции вроде ACL, квот, сжатия и EFS;
▪️нормальную жизнь для системных и загрузочных томов;
▪️меньше сюрпризов в проде, когда у вендора в требованиях написано просто: Windows Server;

▪️ Что дает ReFS:

▪️лучшую защиту от повреждения данных;
▪️integrity streams и проверку целостности;
▪️block cloning и другие оптимизации для крупных storage-нагрузок;
▪️хорошие сценарии в связке с Storage Spaces / S2D и Hyper-V-нагрузками ;

Но вот где начинается практика.

▪️ ReFS - не ставим везде вместо NTFS.

У него до сих пор не такая универсальная совместимость, как у NTFS. Для части сценариев microsoft сама рекомендует NTFS: например, SAN-тома в Failover Cluster обычно форматируют в NTFS, а для Azure File Sync серверный endpoint вообще поддерживается только на NTFS. Для S2D/Storage Spaces Direct, наоборот, ReFS - рекомендуемый вариант.

То есть выбор обычно выглядит так:

▪️Системный диск, обычный файловый сервер, универсальный сервер под все - NTFS
▪️Hyper-V, Storage Spaces Direct, большие data-volume, backup/storage-нагрузки - смотреть в сторону ReFS

▪️ Где NTFS лучше:

▪️системные и boot-разделы;
▪️серверы с максимальной совместимостью ПО;
▪️роли, где нужны квоты, сжатие, EFS и предсказуемое поведение;
▪️инфраструктура, где важнее “работает у всех”, чем storage-фишки;

▪️ Где ReFS уместен:

▪️Hyper-V-хосты;
▪️volumes под VHDX;
▪️Storage Spaces Direct;
▪️большие хранилища, где важна целостность и быстрые операции на уровне метаданных;

#windowsserver #refs

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍84
This media is not supported in your browser
VIEW IN TELEGRAM
Вот такое упражнение раз в полгода делай и системный блок всегда чистый будет

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁163💩2
📱 K8s на практике

Теория без практики - не даст большого результата. Наткнулся на hands-on челлендж:

В кластере есть Pod, который не может нормально стартануть.
Он пытается подняться, но постоянно падает.
Причина: в спецификацию недавно добавили новый контейнер, и после этого init-последовательность стала некорректной.

Задачей является найти, что именно сломали, и починить, чтобы Pod снова запускался.

Внутри будет:

▪️init containers и порядок старта;
▪️логи Pod / events;
▪️kubectl describe / logs;
▪️диагностика CrashLoopBackOff и зависаний.

Ссылка 👈

#kubernetes #devops

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51