Ищем сомнительные сетевые активности в Linux через Bash.
В системе иногда остаются непонятные подключения - от зависших программ до потенциально вредных процессов.
Bash и стандартные инструменты позволяют быстро выявить и разобрать такие случаи.
Просмотр всех текущих сетевых подключений:
Выводит PID, порты, адреса и статусы. Подходит для обнаружения неожиданно слушающих сервисов.
Поиск соединений с конкретными адресами:
Отбирает строки по нужной сети или IP.
Показ только установленных соединений:
Отсекает слушающие порты, показывая активные сессии.
Проверка PID по имени процесса:
Помогает определить, какая программа держит связь.
Мониторинг в реальном времени:
#learn
В системе иногда остаются непонятные подключения - от зависших программ до потенциально вредных процессов.
Bash и стандартные инструменты позволяют быстро выявить и разобрать такие случаи.
Просмотр всех текущих сетевых подключений:
ss -tulpn
Выводит PID, порты, адреса и статусы. Подходит для обнаружения неожиданно слушающих сервисов.
Поиск соединений с конкретными адресами:
ss -ntp | grep "192.168."
Отбирает строки по нужной сети или IP.
Показ только установленных соединений:
ss -ntp state established
Отсекает слушающие порты, показывая активные сессии.
Проверка PID по имени процесса:
ps -fp <PID>
Помогает определить, какая программа держит связь.
Мониторинг в реальном времени:
watch -n 2 ss -tulpn
#learn
Полезный приём: как быстро извлечь все уникальные доменные имена из любых текстов или логов в Linux без использования сложных парсеров.
Из файла:
Просматриваем лог и получаем список уникальных доменов.
Из потока (например, HTTP-трафик):
Выводим домены прямо на лету, формируя уникальный список.
#learn
Из файла:
grep -oE '\b([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}\b' /var/log/syslog | sort -uПросматриваем лог и получаем список уникальных доменов.
Из потока (например, HTTP-трафик):
tcpdump -A -s 0 port 80 | grep -oE '\b([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}\b' | sort -uВыводим домены прямо на лету, формируя уникальный список.
#learn
🔥1
Трюки с SSH: это куда больше, чем обычный удалённый вход
SSH-соединения обладают куда более широкими возможностями, чем простой доступ к машине. Вот набор действительно полезных приемов:
Туннелирование к внутренним системам:
Локальный адрес localhost:8080 перенаправляет трафик на порт 80 узла internal-server через gateway.
Быстрое подключение с помощью псевдонимов:
В ~/.ssh/config
Теперь можно выполнять ssh myserver вместо ввода параметров вручную.
Авторизация без пароля за считанные секунды:
После переноса ключа вход происходит автоматически.
Мгновенные повторные подключения:
В ~/.ssh/config
Первый сеанс устанавливается обычно, следующие открываются моментально.
Передача директорий без использования scp:
Архивация выполняется потоком и сразу извлекается на удалённой стороне.
Удалённый просмотр логов с локальной обработкой:
Можно комбинировать с любыми командами на своей машине через пайпы.
Эти практики значительно упрощают сопровождение большого числа серверов.
#learn
SSH-соединения обладают куда более широкими возможностями, чем простой доступ к машине. Вот набор действительно полезных приемов:
Туннелирование к внутренним системам:
ssh -L 8080:internal-server:80 user@gateway
Локальный адрес localhost:8080 перенаправляет трафик на порт 80 узла internal-server через gateway.
Быстрое подключение с помощью псевдонимов:
В ~/.ssh/config
Host myserver
HostName 192.168.1.100
User admin
Port 2222
IdentityFile ~/.ssh/my_key
Теперь можно выполнять ssh myserver вместо ввода параметров вручную.
Авторизация без пароля за считанные секунды:
ssh-copy-id user@server
После переноса ключа вход происходит автоматически.
Мгновенные повторные подключения:
В ~/.ssh/config
Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h:%p
ControlPersist 600
Первый сеанс устанавливается обычно, следующие открываются моментально.
Передача директорий без использования scp:
tar cz folder/ | ssh server "tar xz -C /destination"
Архивация выполняется потоком и сразу извлекается на удалённой стороне.
Удалённый просмотр логов с локальной обработкой:
ssh server "tail -f /var/log/app.log" | grep -i error
Можно комбинировать с любыми командами на своей машине через пайпы.
Эти практики значительно упрощают сопровождение большого числа серверов.
#learn
👍3
Glances - это утилита мониторинга системы в реальном времени. Написана на Python, работает в терминале, по сети и через веб-интерфейс. Показывает загрузку CPU, памяти, дисков, сетевых интерфейсов, процессы, температуру, состояние файловых систем, контейнеров и других подсистем. Подходит как для локального контроля, так и для удалённого мониторинга через клиент-сервер или браузер. Может экспортировать метрики в InfluxDB, ElasticSearch, CSV и другие источники. Код открытый, расширяется плагинами.
Старт в обычном терминальном режиме.
Запуск встроенного веб-сервера (порт 61208 по умолчанию).
Запуск в режиме сервера для удалённого мониторинга.
Подключение к Glances-серверу по указанному IP.
Поиск всех Glances-серверов в сети и просмотр через TUI.
#utility
glances
Старт в обычном терминальном режиме.
glances -w
Запуск встроенного веб-сервера (порт 61208 по умолчанию).
glances -s
Запуск в режиме сервера для удалённого мониторинга.
glances -c IP
Подключение к Glances-серверу по указанному IP.
glances --browser
Поиск всех Glances-серверов в сети и просмотр через TUI.
#utility
Мониторинг активных портов: Nmap + Опорный снимок + Сравнение
Бывает необходимо не просто "проверять порты", а определить момент изменения: служба внезапно открыла порт, а firewall перекрыл прежний.
В таких ситуациях отлично работает простой метод:
Опорный снимок → Проверка → Сравнение
1. Опорный снимок
Создаём первоначальный перечень портов и сохраняем его:
Это наш "образец", с которым далее будем соотносить результаты.
2. Актуальная проверка
Через установленный промежуток времени фиксируем новое состояние:
3. Сравнение через ndiff
Пример вывода:
#learn
Бывает необходимо не просто "проверять порты", а определить момент изменения: служба внезапно открыла порт, а firewall перекрыл прежний.
В таких ситуациях отлично работает простой метод:
Опорный снимок → Проверка → Сравнение
1. Опорный снимок
Создаём первоначальный перечень портов и сохраняем его:
nmap -p- -oX baseline.xml 192.168.100.100
Это наш "образец", с которым далее будем соотносить результаты.
2. Актуальная проверка
Через установленный промежуток времени фиксируем новое состояние:
nmap -p- -oX current.xml 192.168.100.100
3. Сравнение через ndiff
ndiff baseline.xml current.xml
Пример вывода:
-Nmap 7.80 scan initiated Sat Nov 22 13:32:40 2025 as: nmap -p- -oX baseline.xml 192.168.100.100
+Nmap 7.80 scan initiated Sat Nov 22 13:34:55 2025 as: nmap -p- -oX current.xml 192.168.100.100
192.168.100.100:
-Not shown: 59995 filtered ports, 5538 closed ports
+Not shown: 59994 filtered ports, 5538 closed ports
PORT STATE SERVICE VERSION
+80/tcp open http
#learn
Редкий, но практичный совет для Linux
Когда приходится выполнять продолжительные операции в терминале (ffmpeg, tar, scp, rsync и т.п.), а случайно закрытое окно рушит весь прогресс, есть простое решение: применяй стандартные утилиты
—
—
—
После запуска можно спокойно закрывать терминал - задача продолжит выполняться.
Все сообщения будут записаны в файл
Особенно полезно при работе по SSH или с нестабильным подключением: процессы доходят до финиша независимо от состояния соединения.
#learn
Когда приходится выполнять продолжительные операции в терминале (ffmpeg, tar, scp, rsync и т.п.), а случайно закрытое окно рушит весь прогресс, есть простое решение: применяй стандартные утилиты
nohup и disown.nohup your_command & disown
—
nohup - не дает процессу завершиться при закрытии терминала.—
& - отправляет задачу в фоновый режим.—
disown - удаляет связь процесса с текущей оболочкой.После запуска можно спокойно закрывать терминал - задача продолжит выполняться.
Все сообщения будут записаны в файл
nohup.out в текущем каталоге.Особенно полезно при работе по SSH или с нестабильным подключением: процессы доходят до финиша независимо от состояния соединения.
#learn
Переименовываем множество файлов в каталоге по заранее заданному формату.
Если нужно быстро изменить имена большого числа файлов под общий вид, это можно сделать через Bash.
Сначала задаём директорию и шаблон для новых названий:
Далее запускаем обход всех элементов каталога и меняем имена:
•
•
•
•
Проверка работы:
Были файлы:
Станут:
Этот подход упрощает массовое приведение имён к структурированному виду и ускоряет организацию данных.
#learn
Если нужно быстро изменить имена большого числа файлов под общий вид, это можно сделать через Bash.
Сначала задаём директорию и шаблон для новых названий:
folder="~/Documents/photos"
prefix="img_"
Далее запускаем обход всех элементов каталога и меняем имена:
cd "$folder"
i=1
for file in *; do
ext="${file##*.}"
mv "$file" "${prefix}${i}.${ext}"
((i++))
done
•
cd "$folder" - переключаемся в требуемый каталог•
ext="${file##*.}" - извлекаем расширение исходного файла•
mv - присваиваем новое имя с префиксом и порядковым номером•
((i++)) - увеличиваем счётчик на единицуПроверка работы:
Были файлы:
IMG1234.jpg, vacation.png, photo_01.jpeg
Станут:
img_1.jpg, img_2.png, img_3.jpeg
Этот подход упрощает массовое приведение имён к структурированному виду и ускоряет организацию данных.
#learn
MTR: полезные флаги для продвинутой диагностики
mtr 0 больше, чем traceroute. Вот флаги, которые помогут точнее проверять маршруты и обходить блокировки:
-T --port
TCP вместо ICMP, тест сервисов и обход firewall.
--interval, --timeout
Настройка частоты и таймаута запросов при высоких задержках.
--report, --report-cycles
Создание итогового отчёта, удобно для логов и скриптов.
--json, --csv
Вывод в машинно-читаемом формате для парсинга.
--aslookup
Показывает номера автономных систем (AS) на пути, полезно для BGP.
--mpls
Показывает MPLS-метки, если используются.
-n, --no-dns
Вывод только IP без DNS-задержек.
Пример: трассировка через TCP 443, в JSON, без DNS:
#learn
mtr 0 больше, чем traceroute. Вот флаги, которые помогут точнее проверять маршруты и обходить блокировки:
-T --port
TCP вместо ICMP, тест сервисов и обход firewall.
mtr -T --port 443 vpn.example.com
--interval, --timeout
Настройка частоты и таймаута запросов при высоких задержках.
mtr --interval 2 --timeout 10 --report 1.1.1.1
--report, --report-cycles
Создание итогового отчёта, удобно для логов и скриптов.
mtr --report --report-cycles 20 example.com
--json, --csv
Вывод в машинно-читаемом формате для парсинга.
mtr --json 8.8.8.8 > result.json
--aslookup
Показывает номера автономных систем (AS) на пути, полезно для BGP.
mtr --aslookup --report example.com
--mpls
Показывает MPLS-метки, если используются.
mtr --mpls --report example.com
-n, --no-dns
Вывод только IP без DNS-задержек.
mtr -n --report 1.1.1.1
Пример: трассировка через TCP 443, в JSON, без DNS:
mtr -T --port 443 -n --json --report-cycles 15 1.1.1.1
#learn
KDE Plasma 6.8 полностью переходит на Wayland
KDE Plasma 6.8 полностью переходит на Wayland. Поддержка X11 будет убрана, но приложения под X11 продолжат работать через Xwayland. По данным телеметрии, около 73 % пользователей уже используют Wayland. Переход позволит ускорить разработку, оптимизировать код и добавить новые функции. Поддержка X11 сохранится до конца жизненного цикла версии 6.7.
Источник
#news
KDE Plasma 6.8 полностью переходит на Wayland. Поддержка X11 будет убрана, но приложения под X11 продолжат работать через Xwayland. По данным телеметрии, около 73 % пользователей уже используют Wayland. Переход позволит ускорить разработку, оптимизировать код и добавить новые функции. Поддержка X11 сохранится до конца жизненного цикла версии 6.7.
Источник
#news
🎉2
Linux: как поднять удалённый файл, если его всё ещё держит процесс
Редкий, но очень полезный приём: достать удалённый файл напрямую из работающего процесса, даже когда его уже нет на диске и нет резервных копий.
Если конфиг или лог случайно удалили, но служба не перезапускалась, содержимое можно извлечь из открытого дескриптора.
Определяем PID нужной службы (пример: nginx):
Проверяем, какие открытые файлы процесса помечены как удалённые:
Копируем нужный дескриптор в новый файл:
Получится точная копия того, что процесс держит в памяти.
#learn
Редкий, но очень полезный приём: достать удалённый файл напрямую из работающего процесса, даже когда его уже нет на диске и нет резервных копий.
Если конфиг или лог случайно удалили, но служба не перезапускалась, содержимое можно извлечь из открытого дескриптора.
Определяем PID нужной службы (пример: nginx):
pidof nginx
Проверяем, какие открытые файлы процесса помечены как удалённые:
ls -l /proc/<PID>/fd | grep '(deleted)'
Копируем нужный дескриптор в новый файл:
cp /proc/<PID>/fd/<fd_number> ./recovered.log
Получится точная копия того, что процесс держит в памяти.
#learn
Linux: xxd - быстрый разбор любого файла в hex
xxd превращает любой файл в шестнадцатеричный дамп и обратно. Удобно, когда нужно проверить структуру бинарника, увидеть заголовок, сравнить данные или отладить сетевые пакеты.
Утилита входит в пакет Vim, есть почти везде. Отличный инструмент для быстрой диагностики, когда нужно понять, что внутри файла без лишних инструментов.
#learn
xxd превращает любой файл в шестнадцатеричный дамп и обратно. Удобно, когда нужно проверить структуру бинарника, увидеть заголовок, сравнить данные или отладить сетевые пакеты.
xxd file.txt - показывает hex и ASCII справа.xxd -l 256 file.bin - выводит только первые 256 байт.xxd -r dump.hex > original.bin - восстанавливает файл из дампа.Утилита входит в пакет Vim, есть почти везде. Отличный инструмент для быстрой диагностики, когда нужно понять, что внутри файла без лишних инструментов.
#learn
Удобный прием для диагностики bash-скриптов
Когда сценарий начинает работать некорректно, обычно нужно выяснить, какая инструкция выполнилась последней и какие значения получили переменные. Вместо бесконечного добавления echo можно воспользоваться встроенной возможностью bash -
Если разместить
Пример: создание резервной копии
Напишем минимальный скрипт, который проверяет существование файла и переносит его в каталог для бэкапов:
Вывод терминала:
Видно каждое выполненное действие: какие значения получили переменные, как сработал вызов date, в какой путь был сохранен файл.
#learn
Когда сценарий начинает работать некорректно, обычно нужно выяснить, какая инструкция выполнилась последней и какие значения получили переменные. Вместо бесконечного добавления echo можно воспользоваться встроенной возможностью bash -
set -x.Если разместить
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, в какой путь был сохранен файл.
#learn
Nginx и SSH на одном порту
Разбираем схему, где SSH и HTTPS работают через порт 443 одновременно. HTTPS продолжает функционировать как обычно, а SSH становится доступен на том же порту. Решение основано на переменной
Исходные данные
Есть сервер с двумя IP:
1) 1.1.1.1 - используется для stream
2) 2.2.2.2 - на нем работают сайты по HTTPS
SSH-сервис слушает порт 22022. В итоге конфигурация выглядит так:
Как это работает
Мы объявили два backend-а: ssh и web. Далее через map и
При начале соединения Nginx анализирует протокол:
1) если определяется TLSv1.2, запрос уходит в web upstream
2) если TLS или SSL отсутствует, соединение направляется в ssh
3) в остальных случаях используется 2.2.2.2:443 по умолчанию
Блок stream слушает 1.1.1.1:443. После проверки конфига (nginx -t) и перезапуска можно тестировать.
Проверка
Открытие в браузере:
Подключение по SSH:
Итог
В результате SSH становится доступен через порт 443 без нарушения работы HTTPS. Простое и практичное решение для обхода сетевых ограничений.
#learn
Разбираем схему, где SSH и HTTPS работают через порт 443 одновременно. HTTPS продолжает функционировать как обычно, а SSH становится доступен на том же порту. Решение основано на переменной
$ssl_preread_protocol, появившейся в Nginx версии 1.15.2.Исходные данные
Есть сервер с двумя IP:
1) 1.1.1.1 - используется для stream
2) 2.2.2.2 - на нем работают сайты по HTTPS
SSH-сервис слушает порт 22022. В итоге конфигурация выглядит так:
stream {
upstream ssh {
server 2.2.2.2:22022;
}
upstream web {
server 2.2.2.2:443;
}
map $ssl_preread_protocol $upstream {
"" ssh;
"TLSv1.2" web;
default 2.2.2.2:443;
}
server {
listen 1.1.1.1:443;
proxy_pass $upstream;
ssl_preread on;
}
}
http {Как это работает
Мы объявили два backend-а: ssh и web. Далее через map и
$ssl_preread_protocol описываем логику маршрутизации трафика.При начале соединения Nginx анализирует протокол:
1) если определяется TLSv1.2, запрос уходит в web upstream
2) если TLS или SSL отсутствует, соединение направляется в ssh
3) в остальных случаях используется 2.2.2.2:443 по умолчанию
Блок stream слушает 1.1.1.1:443. После проверки конфига (nginx -t) и перезапуска можно тестировать.
Проверка
Открытие в браузере:
https://1.1.1.1 - ведет на HTTPS-сайтПодключение по SSH:
$ ssh root@1.1.1.1 -p443
Enter passphrase for key "/home/user/.ssh/id_rsa":
Итог
В результате SSH становится доступен через порт 443 без нарушения работы HTTPS. Простое и практичное решение для обхода сетевых ограничений.
#learn
LinkChecker
Нужно проверить сайт или документацию на битые ссылки? LinkChecker делает это автоматически и без ручной возни.
Что умеет:
1)проверяет внутренние и внешние ссылки
2)рекурсивно обходит каталоги
3)работает с HTML, XHTML, CSS и другими форматами
4)показывает отчет с ошибками и редиректами
Проверка всех ссылок в каталоге:
Проверка только внешних ссылок:
Если есть проблемы, утилита выведет список ссылок и HTTP-коды ошибок, например 404.
#utility
Нужно проверить сайт или документацию на битые ссылки? LinkChecker делает это автоматически и без ручной возни.
Что умеет:
1)проверяет внутренние и внешние ссылки
2)рекурсивно обходит каталоги
3)работает с HTML, XHTML, CSS и другими форматами
4)показывает отчет с ошибками и редиректами
apt install linkchecker -y
Проверка всех ссылок в каталоге:
linkchecker dir/
Проверка только внешних ссылок:
linkchecker --check-extern dir/
Если есть проблемы, утилита выведет список ссылок и HTTP-коды ошибок, например 404.
#utility
Forwarded from Типичный Сисадмин
Notepad++ мог скачать малварь через апдейтер 😱
Разработчики Notepad++ экстренно выкатили версию 8.8.9, выяснилось, что механизм автообновления редактора (тот самый
Апдейтер стучится за обновлением, но из-за отсутствия нормальной криптографической проверки перенаправляется на вредоносный сервер. В итоге в папку
В новой версии 8.8.9 наконец-то прикрутили жесткую проверку цифровой подписи установщика, так что теперь, если подпись не сойдется, обновление прервется.
Типичный🥸 Сисадмин
Разработчики Notepad++ экстренно выкатили версию 8.8.9, выяснилось, что механизм автообновления редактора (тот самый
GUP.exe) годами толком не проверял подлинность скачиваемых файлов. Этим воспользовались хацкеры, которые начали перехватывать трафик апдейтера и подсовывать пользователям вместо новой версии редактора троян.Апдейтер стучится за обновлением, но из-за отсутствия нормальной криптографической проверки перенаправляется на вредоносный сервер. В итоге в папку
%TEMP% прилетает файл AutoUpdater.exe, который вместо патча начинает активно собирать инфу о системе... запускает netstat, systeminfo, tasklist и whoami. Собранные данные потом сливаются на публичный файлообменник temp.sh через системный curl.В новой версии 8.8.9 наконец-то прикрутили жесткую проверку цифровой подписи установщика, так что теперь, если подпись не сойдется, обновление прервется.
Типичный
Please open Telegram to view this post
VIEW IN TELEGRAM