tcpdump - один из самых используемых инструментов для анализа сетевого трафика прямо в консоли. С его помощью можно не только снять дамп, но и отфильтровать нужные пакеты, чтобы не утонуть в гигабайтах логов.
tcpdump -i eth0
Смотрим весь трафик интерфейса eth0. Часто этого уже достаточно для первичной диагностики.
tcpdump host 192.168.1.10
Только пакеты от/к указанному IP.
tcpdump port 22
Видим весь SSH-трафик.
tcpdump src host 10.0.0.5
tcpdump dst port 80
tcpdump src host 192.168.1.100 and port 443
tcpdump not port 22
tcpdump icmp
tcpdump tcp
tcpdump udp
tcpdump -i eth0 tcp port 80 -A
Ключ -A выводит полезную нагрузку пакетов в ASCII. Удобно, если нужно подсмотреть запросы.
tcpdump -i eth0 tcp port 443 -vvv
С подробной детализацией можно увидеть домены, к которым идёт подключение.
tcpdump -i eth0 udp port 53
tcpdump -i eth0 -w dump.pcap
А потом открыть dump.pcap в Wireshark.
tcpdump -c 100 -i eth0
Собираем только первые 100 пакетов.
Используйте -nn - чтобы ip-адреса и порты не переводились в имена (ускоряет работу).
-vvv - максимально подробный вывод.
Для длительного мониторинга всегда сохраняйте в файл (-w) и анализируйте в wireshark или tshark.
#linux #tcpdump
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁18❤5🔥2
Часто возникает ситуация: программа подвисает, работает странно или вообще не запускается. В таких случаях на помощь приходят два инструмента -
strace и ltrace. Оба они позволяют заглянуть внутрь процесса, но делают это на разных уровнях.
strace ls /nonexistent
Вывод покажет, что ls пытается открыть директорию и получает ENOENT (нет такого файла).
strace -p 1234
Теперь видно, чем занимается процесс с PID 1234.
strace -e open,read,write -p 1234
Будут показаны только вызовы open, read, write.
ltrace ls
Вы увидите вызовы функций вроде malloc(), strlen(), fopen().
ltrace -e malloc,free ./myprog
Будут показаны только вызовы функций управления памятью.
strace → понять, что происходит на уровне системных вызовов (например, программа не может открыть файл из-за прав).
ltrace → отследить логику внутри библиотек (например, неверно передаются параметры в функцию).
strace -p <PID>
Сразу видно, ждёт ли программа I/O или зациклилась.
strace ./prog 2>&1 | grep ENOENT
Можно увидеть, какой именно файл не удаётся открыть.
ltrace -e malloc,free ./prog
Если много malloc(), но мало free() - повод задуматься.
#linux #debug
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
На первый взгляд, копирование файлов в linux выглядит элементарной задачей. Но если копать глубже, у команды cp есть несколько нюансов, которые легко могут привести к неожиданному результату.
cp /dir_a/* /dir_b
Кажется логичным, но так скопируются только файлы верхнего уровня, без вложенных директорий. Чтобы взять все целиком (с поддиректориями и атрибутами), используем:
cp -a /dir_a/* /dir_b
Ключ -a = рекурсия + права доступа + даты + симлинки. В общем, максимально правильное копирование.
Звездочка раскрывается в bash. Символ * обрабатывает сама оболочка, а не cp. То есть bash разворачивает список файлов и передаёт их в виде длинной команды:
cp -a /dir_a/file1 /dir_a/file2 ... /dir_b
Если файлов слишком много - можно упереться в ограничение длины команды.
Скрытые файлы теряются. Файлы, начинающиеся с точки (.htaccess, .env и т.п.), по умолчанию не попадут в *. В результате копирование окажется не точным.
Пустая директория = ошибка. Если в исходной папке нет файлов, то * не развернётся, и cp просто вернет ошибку.
cp -aT /dir_a /dir_b
Здесь:
-a - копирование со всеми атрибутами
-T - воспринимать /dir_b как саму директорию назначения, а не поддиректорию внутри неё
Таким образом, копирование отрабатывает корректно: и вложенные каталоги, и скрытые файлы будут на месте.
#linux #cp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤2🔥1😱1👌1
Swap в linux играет роль страховочного пространства на диске для выгрузки неиспользуемых страниц памяти. Но работать с ним можно по-разному: от полного отключения до использования современных технологий сжатия. Разберем основные практики.
swapon --show
free -h
swapoff -a
Чтобы выключить swap навсегда - закомментируйте его строки в
/etc/fstab.
# swapon /swapfile --priority 100
Текущие приоритеты видно в выводе
swapon --show.0 - максимально избегать использования swap.
60 (по умолчанию) - сбалансированный вариант.
100 - активно выгружать память в swap.
Пример настройки:
sysctl -w vm.swappiness=10
Для постоянного применения добавьте в
/etc/sysctl.conf:
vm.swappiness=10
Активация через параметры ядра:
zswap.enabled=1
Установка и включение в Debian/Ubuntu:
apt install zram-tools
systemctl enable --now zramswap.service
#linux #swap
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Когда речь заходит о работе с внешними или сетевыми хранилищами, важно проверять, что файловая система действительно подключена и смонтирована. В Linux для этого есть две удобные утилиты -
findmnt и findfs.
findmnt -x
Success, no errors or warnings detected
Если в конфигурации есть ошибка - получите подробное сообщение:
findmnt -x
/mnt/backup
[E] unreachable on boot required source: UUID=151ea24d-977a-412c-818f-0d374baa5012
Также можно проверять наличие конкретной точки монтирования:
if findmnt -rno TARGET "$1" >/dev/null; then
echo "$1 mounted."
else
echo "$1 not mounted."
fi
findfs "UUID=151ea24d-977a-412c-818f-0d374baa5013"
/dev/sda2
Выходной код тоже полезен в скриптах:
0 → устройство найдено
1 → файловая система не найдена
if findfs "UUID=$1" >/dev/null; then
echo "$1 connected."
else
echo "$1 not connected."
fi
Если не проверить подключение, легко попасть в неприятную ситуацию:
бэкап или копирование пойдет не на внешний диск, а в локальную систему;
место на корневом разделе быстро закончится;
при монтировании обратно старые файлы могут спрятаться за точкой монтирования.
#findmnt #findfs
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Когда в скрипте что-то идет не так, часто хочется понять, какая команда выполнилась последней и какие значения получили переменные. Вместо того чтобы расставлять десятки echo, в bash есть встроенный инструмент -
set -x.Если указать его в начале скрипта, оболочка начнет печатать в консоль каждую выполняемую команду с подставленными значениями переменных. Перед строкой появляется символ +, что делает разбор вывода наглядным.
Создадим простой скрипт, который проверяет наличие файла и копирует его в директорию резервных копий:
#!/bin/bash
set -x
src="/etc/hosts"
dst="/tmp/backup"
mkdir -p "$dst"
timestamp=$(date +%Y%m%d_%H%M%S)
cp "$src" "$dst/hosts_$timestamp"
echo "Backup created: $dst/hosts_$timestamp"
Вывод консоли:
▶ Запуск
# ./backup.sh
+ src=/etc/hosts
+ dst=/tmp/backup
+ mkdir -p /tmp/backup
+ date +%Y%m%d_%H%M%S
+ timestamp=20251007_121330
+ cp /etc/hosts /tmp/backup/hosts_20251007_121330
+ echo 'Backup created: /tmp/backup/hosts_20251007_121330'
Backup created: /tmp/backup/hosts_20251007_121330
Мы видим каждое действие: какие переменные подставились, как отработала команда date, куда скопировался файл.
#linux #debug
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤4
Cockpit - это встроенный в современные дистрибутивы инструмент, который превращает сервер в управляемый через браузер интерфейс. Вам больше не нужно все делать вручную в консоли - многие задачи можно выполнять из веб-панели.
debian/ubuntu:
apt install cockpit -y
systemctl enable --now cockpit.socket
RHEL/centOS/fedora:
dnf install cockpit -y
systemctl enable --now cockpit.socket
После этого панель доступна по HTTPS на порту 9090:
https://IP-сервера:9090Авторизация выполняется через обычный системный логин и пароль.
Мониторинг ресурсов (CPU, RAM, диски, сеть) в реальном времени
Управление сервисами systemd (запуск, остановка, перезапуск)
Просмотр логов journald
Управление пользователями и правами
Настройка сетевых интерфейсов и firewall
Работа с дисками, RAID и LVM
Подключение Docker/Kubernetes для управления контейнерами
Возможность администрировать несколько серверов через одну панель
Минимальная настройка: поставил и сразу работает.
Не требует сторонних агентов - все идет через systemd и встроенные механизмы.
Легко интегрируется с SELinux, firewalld и другими системными компонентами.
#linux #cockpit
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤3
Обычно мы проверяем состояние конкретной службы:
systemctl status mariadb
Но если запустить без указания сервиса:
systemctl status
то получим сводку по всей системе. Очень полезная штука
Что покажет systemctl status без аргументов:
State - общее состояние (например: running, degraded)
Failed - количество упавших юнитов
Uptime - время работы systemd
Версия systemd
Количество активных units
Дерево зависимостей сервисов в удобном виде
systemctl list-units --failed
Посмотреть детали по конкретному юниту:
systemctl status <unit>
journalctl -u <unit>
Пример:
systemctl status
Вывод:
State: degraded
Failed: 1 units
Проверяем, что упало:
systemctl list-units --failed
например, systemd-modules-load.service.
Дальше копаемся в логах:
journalctl -u systemd-modules-load.service
systemctl status → быстрый обзор состояния системы.
systemctl list-units --failed → список проблемных юнитов.
journalctl -u <unit> → подробные логи конкретной службы.
#linux #systemctl
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2
Админы, привыкшие к bash и linux, часто недооценивают powershell. А зря - это также неплохая оболочка, которая умеет не только выполнять команды, но и работать с объектами, сервисами и API windows. Ниже несколько полезных сценариев, которые пригодятся, если админите и linux, и windows.
# Процессы по имени
Get-Process | Where-Object { $_.ProcessName -like "*chrome*" }
# Открытые TCP-порты
Get-NetTCPConnection | Where-Object { $_.State -eq "Listen" }
# Найти все *.log файлы и удалить старше 7 дней
Get-ChildItem -Path "C:\Logs" -Filter *.log -Recurse |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } |
Remove-Item -Force
$hosts = "8.8.8.8","1.1.1.1","networkadmin.ru"
foreach ($h in $hosts) {
Test-Connection -ComputerName $h -Count 2 -Quiet |
ForEach-Object { "$h -> $($_ -replace 'True','OK' -replace 'False','Fail')" }
}
# Проверить статус службы
Get-Service -Name "Spooler"
# Перезапустить службу
Restart-Service -Name "Spooler"
Invoke-RestMethod -Uri "https://api.ipify.org?format=json"
# Системная информация
Get-ComputerInfo | Select-Object CsName, WindowsVersion, OsArchitecture
# Диски
Get-PSDrive -PSProvider FileSystem
#powershell #windows
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍2🔥2
Ubuntu давно перешла от классического
/etc/network/interfaces к новому инструменту - netplan. Он появился начиная с ubuntu 17.10 и стал основным способом настройки сетевых интерфейсов.❗️ Netplan - это уровень абстракции для сетевых конфигураций.
Использует YAML-файлы в /etc/netplan/.
Работает через рендереры:
systemd-networkd - для серверов и headless-систем.
NetworkManager - для десктопов.
Позволяет централизованно и декларативно описывать сеть.
Все настройки находятся в
/etc/netplan/*.yaml.По умолчанию обычно есть файл
01-netcfg.yaml или 50-cloud-init.yaml.
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: true
network:
version: 2
renderer: networkd
ethernets:
ens33:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
network:
version: 2
ethernets:
ens33:
addresses:
- 192.168.1.101/24
- 192.168.1.102/24
network:
version: 2
bonds:
bond0:
interfaces: [ens33, ens34]
parameters:
mode: balance-rr
addresses:
- 192.168.1.200/24
gateway4: 192.168.1.1
network:
version: 2
vlans:
vlan100:
id: 100
link: ens33
addresses: [192.168.100.10/24]
После изменения файлов:
sudo netplan apply
Для теста перед применением можно использовать:
sudo netplan try
(дает 120 секунд на подтверждение, если сеть отвалилась - конфиг откатывается).
#linux #netplan
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1
Многие для отправки писем из консоли ставят дополнительные утилиты вроде
mailx или mutt. Но часто этого не нужно - все умеет curl.
curl -v \
--url "smtp://smtp.networkadmin.ru:587" \
--mail-from "admin@networkadmin.ru" \
--mail-rcpt "user@domain.ru" \
--user "admin@networkadmin.ru:MySecurePass" \
--upload-file ~/letter.txt
Пример letter.txt:
From: "Admin" <admin@networkadmin.ru>
To: "User" <user@domain.ru>
Subject: Test mail from curl
Hello from curl!
Заголовки (From, Subject и др.) задаются прямо в файле, и можно указывать любые значения.
Хранить пароль в команде небезопасно. Вместо этого используем ~/.netrc:
machine smtp.networkadmin.ru login admin@networkadmin.ru password MySecurePass
machine smtp.another.ru login user@another.ru password StrongPass123
Теперь команда проще и безопаснее:
curl -v \
--url "smtp://smtp.networkadmin.ru:587" \
--mail-from "admin@networkadmin.ru" \
--mail-rcpt "user@domain.ru" \
--netrc \
--upload-file ~/letter.txt
curl --ssl-reqd ...
curl --ssl ...
curl --url "smtps://smtp.networkadmin.ru" ...
curl --url "smtp://smtp.networkadmin.ru/myhost.domain.ru" ...
#SMTP #curl
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤1
Когда попадаешь на чужой сервер - никогда не знаешь, какие изменения там вносили. Один из быстрых способов разобраться - использовать утилиту
debsums, которая есть в базовых репозиториях:
apt install debsums
❓ Что делает debsums
Утилита сравнивает MD5-суммы файлов из пакетов с эталонными значениями. Это помогает:📍 проверить целостность пакетов;📍 выявить модифицированные файлы;📍 понять, какие стандартные конфиги редактировались.
debsums --config --changed
Результат может быть таким:
/etc/ssh/ssh_config
/etc/default/ssh
То есть видно, что системные конфиги OpenSSH редактировались.
файлы из базовой системы (/etc/default, /etc/pam.d, /etc/grub.d);
юниты systemd;
конфиги сервисов вроде nginx, mariadb, apache2.
#linux #audit
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Проверить все пакеты:
debsums
Показать только измененные файлы:
debsums --changed
Проверять только конфиги (/etc):
debsums --config
Только измененные конфиги:
debsums --config --changed
Показать отсутствующие файлы пакета:
debsums --missing
Игнорировать отсутствующие файлы (проверять только существующие):
debsums --ignore-missing
Проверка конкретного пакета
debsums nginx
Найти какие конфиги менялись руками:
debsums --config --changed
Проверить целостность пакета OpenSSH:
debsums openssh-server
#linux #audit
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Одна из полезных практик на пути к оптимизации - переодически смотреть, а что вообще запускается и что из этого действительно нужно, а что можно отключить. Это будет полезно не только для оптимизации, но и для безопасности тоже.
systemctl list-unit-files --state=enabled
Команда покажет список всех юнитов, которые стартуют при загрузке. Также полезно посмотреть реально работающие процессы:
systemctl list-units --type=service
systemctl disable avahi-daemon.service
Чтобы остановить прямо сейчас:
systemctl stop avahi-daemon.service
Если сервис не нужен вообще - можно замаскировать, чтобы исключить случайный запуск:
systemctl mask avahi-daemon.service
(при этом запуск будет невозможен даже вручную, пока не сделаете unmask).
Примеры сервисов, которые часто не используются:
avahi-daemon.service - autodiscovery (не нужен на сервере)
bluetooth.service - если нет блютуза
ModemManager.service - если не используется мобильный модем
rpcbind.service - устаревший RPC, не нужен большинству
Далее уже зависит конкретно от Ваших потребностей и ситуации.
systemctl list-unit-files --state=enabled
#linux #systemd
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2❤1
ethtool - это не только утилита для просмотра информации о сетевой карте. С ее помощью можно управлять сетевыми интерфейсами в linux: от настройки скорости линка до оптимизации производительности под конкретные задачи.
ethtool eth0
Покажет: скорость, дуплекс, поддержку offload-функций, драйвер, версию прошивки и т.д.
ethtool -s eth0 speed 100 duplex full autoneg off
Можно использовать для тестов или если автосогласование работает некорректно.
Проверить поддержку:
ethtool -k eth0
Отключить контрольную сумму (будет полезно для отладки):
ethtool -K eth0 tx off rx off
Также можно управлять GRO, LRO, TSO и другими функциями.
Проверка кабеля и физики:
ethtool --test eth0
ethtool -t eth0 offline
А команда:
ethtool eth0 | grep detected
покажет, есть ли линк и его скорость.
ethtool -S eth0
Выводит счётчики ошибок, дропов, коллизий. Это помогает отлавливать проблемы на низком уровне.
ethtool -g eth0
Изменить глубину очереди при интенсивной нагрузке:
ethtool -G eth0 rx 4096 tx 4096
ethtool -s eth0 wol d
#network #ethtool
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2
Часто говорят, что при DDoS провайдер отправляет трафик в blackhole. Это не метафора - blackhole (или nullroute) - реальная запись в таблице маршрутизации, которая заставляет ядро молчаливо отбрасывать пакеты к указанному адресу/сети.
ip route add blackhole 10.20.30.40
ip route show | grep blackhole
Теперь все пакеты к 10.20.30.40 будут просто выброшены, без попытки доставить и без ICMP-ответа.
Для сети:
ip route add blackhole 203.0.113.0/24
Для IPv6:
ip -6 route add blackhole 2001:db8::/32
ip route del blackhole 203.0.113.0/24
blackhole - молча дропает пакеты (никаких ICMP).
prohibit - отсылает ICMP administratively prohibited (полезно, если нужно, чтобы источник получил уведомление).
unreachable - возвращает host unreachable.
Команды выглядят похоже:
ip route add prohibit 10.0.0.0/8
ip route add unreachable 10.0.0.0/8
Выбор зависит от сценария: для имитации «исчезновения» хоста - blackhole, чтобы сигнализировать отправителю - prohibit/unreachable.
Провайдеры - при крупном DDoS обычно ставят null-route на адрес жертвы на своей инфраструктуре. Это позволяет дропать трафик до границ сети провайдера, защищая инфраструктуру дальше по пути.
#network #blackhole
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16