NetworkAdmin.ru – Telegram
NetworkAdmin.ru
4.75K subscribers
226 photos
25 videos
2 files
499 links
Авторский блог про сетевое и системное администрирование.

Сайт: networkadmin.ru
Реклама: @dad_admin
Биржа: https://telega.in/c/networkadminru
Download Telegram
♥️ Что такое blackhole в сети

Часто говорят, что при DDoS провайдер отправляет трафик в blackhole. Это не метафора - blackhole (или nullroute) - реальная запись в таблице маршрутизации, которая заставляет ядро молчаливо отбрасывать пакеты к указанному адресу/сети.

▪️ Создание черной дыры для одного IP:


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 от unreachable и от prohibit

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

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
🔒 Конфигурации nftables для защиты сервера

nftables - это замена iptables, встроенная в ядро linux. Она объединяет фильтрацию, NAT и маршрутизацию в единую подсистему и считается более быстрой и удобной. Разберемся, как можно построить базовую защиту сервера.

▪️ Минимальная конфигурация. Создадаем новый ruleset с таблицей для фильтрации трафика:


sudo nft add table inet filter
sudo nft 'add chain inet filter input { type filter hook input priority 0; policy drop; }'


Мы сразу задали policy drop, то есть по умолчанию все запрещено. Теперь разрешим только нужное.

▪️ Разрешаем базовое


sudo nft add rule inet filter input ct state established,related accept
sudo nft add rule inet filter input iif lo accept
sudo nft add rule inet filter input ip protocol icmp accept
sudo nft add rule inet filter input tcp dport {22,80,443} accept


Что тут происходит:

принимаем все соединения в состоянии ESTABLISHED и RELATED
разрешаем локальный интерфейс (lo)
разрешаем ping (ICMP)
открываем SSH, HTTP и HTTPS


▪️ Защита SSH. Ограничим количество соединений по SSH, чтобы усложнить перебор паролей:


sudo nft add rule inet filter input tcp dport 22 ct state new limit rate 10/minute accept
sudo nft add rule inet filter input tcp dport 22 drop


Теперь на SSH можно будет открыть не более 10 новых подключений в минуту.

▪️ Блокируем сканеров и мусор. Пример простого анти-сканера:


# блокируем пакеты без флагов (NULL scan)
sudo nft add rule inet filter input tcp flags == 0 drop

# блокируем XMAS-скан
sudo nft add rule inet filter input tcp flags & (fin|psh|urg) == (fin|psh|urg) drop


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


sudo nft list ruleset


Сохранить конфиг:


sudo sh -c "nft list ruleset > /etc/nftables.conf"
sudo systemctl enable nftables
sudo systemctl restart nftables


#nftables #security

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍141
✏️ Шпаргалка по journalctl

journalctl - это инструмент работы с логами systemd.

▪️ Фильтрация по сервисам и юнитам. Посмотреть логи конкретной службы:


journalctl -u ssh
journalctl -u nginx -u php-fpm


Последние записи сервиса в реальном времени (аналог tail -f):


journalctl -u nginx -f


▪️ Ограничение по времени. Фильтрация по временным промежуткам:


journalctl --since "2025-10-01" --until "2025-10-15"
journalctl --since "1 hour ago"
journalctl --since yesterday


▪️ Поиск по ключевым словам. Просто используем grep:


journalctl -u ssh | grep "Failed password"


Или встроенный фильтр по приоритету (severity):


journalctl -p err -u ssh


(-p принимает диапазон: -p warning..crit)

▪️ Логи текущей загрузки


journalctl -b # текущая загрузка
journalctl -b -1 # предыдущая загрузка
journalctl -b -2 # еще раньше


▪️ Работа с логами как с файлами

Сохранить в файл:


journalctl -u nginx --since today > nginx.log


Экспорт в бинарный лог и перенос на другой сервер:


journalctl --vacuum-time=7d # удалить старше 7 дней
journalctl --vacuum-size=1G # ограничить объем


#systemd #journalctl

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
This media is not supported in your browser
VIEW IN TELEGRAM
Глубоко погрузился в проблему, детально изучил и решил ее

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁214👌3
🎤 Один ввод, а команды на всех хостах

Когда разворачиваешь кластер или нужно повторить одинаковые действия на нескольких серверах, очень помогает режим синхронизации панелей в tmux. С ним одна команда сразу выполняется во всех открытых панелях.

▪️ Установка


apt install tmux


▪️ Работа с панелями

1️⃣Запускаем tmux.
2️⃣Создаем несколько панелей:

Ctrl+B % - вертикальное разделение
Ctrl+B " - горизонтальное разделение

3️⃣Между панелями перемещаемся Ctrl+B + стрелки.
4️⃣В каждой панели подключаемся по SSH к своему хосту.

▪️ Включение синхронизации. В командной строке tmux (после Ctrl+B :) вводим:


:setw synchronize-panes


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

▪️ Автоматизация

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

#linux #terminal

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12
Ограничение процессов по CPU

Иногда необходимо жестко контролировать, какие ядра процесс может занимать, например, чтобы тяжелые задачи не забивали сервер или чтобы критичные сервисы не конкурировали за ресурсы. В linux это решается утилитой taskset, которая позволяет как изменять affinity уже работающих процессов, так и запускать новые с заданными ограничениями.

1️⃣ Привязка уже запущенного процесса к выбранным ядрам. Для начала найдем PID процесса. Выберите любой удобный способ:


ps aux | grep myapp
pidof myapp
pgrep -f myapp


Посмотрим CPU в системе:


lscpu | grep -E 'CPU\(s\)|NUMA'


Пример вывода:


CPU(s): 8
NUMA node0 CPU(s): 0-7


Допустим, нам нужно посадить процесс на ядра 0–2. Для этого:


taskset -pc 0-2 1574


Пример результата:


pid 1574's current affinity list: 0-7
pid 1574's new affinity list: 0,1,2


Теперь процесс гарантированно не займет остальные ядра.

2️⃣ Запуск программы с ограничением по CPU. Это более практичный вариант: мы сразу запускаем процесс с нужными ограничениями. Но тут есть нюанс: taskset требует mask (битовой маски), а не списка ядер.

Как работает маска?

Каждое ядро - это один бит:

Ядро Маска
0 1
1 2
2 4
3 8
… …

Например:
ядра 1 и 2 = 2 + 4 = 6 → маска 0x06


Пример запуска с ограничением на одно ядро. Запустить программу только на ядре 0:


taskset 1 gzip hugefile


(маска 1 = ядро 0)

Пример: запуск на ядрах 2 и 3

Маска: 4 + 8 = 12 = c


taskset c gzip hugefile


3️⃣ Как быстро узнать маску для нужных ядер. Если не хочется считать вручную, то есть хитрый трюк. Назначаем список ядер любому процессу:


taskset -pc 4-5 $(pidof systemd-journald)


А теперь смотрим его маску:


taskset -p $(pidof systemd-journald)


Пример:


pid 412's current affinity mask: 30


Вот и маска.

4️⃣ Наглядный тест с помощью xz. Архиватор xz умеет использовать несколько потоков, и его хорошо видно в htop. Создаем тестовый файл:


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


Запускаем xz только на ядрах 0 и 1 (маска 3):


taskset 3 xz -T2 /tmp/testfile


Смотрим в htop и процесс будет занимать строго эти два ядра.

#linux #taskset

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
🖥 Nmap - полезные сценарии

Nmap - это не только сканер портов, но и инструмент для быстрой диагностики сети. Небольшая подборка команд, которые часто выручали меня в работе.

▪️ Быстрый обзор хоста


nmap -Pn -sS -T4 10.20.1.5


SYN-скан, не пингуем сначала, быстрый тайминг.

▪️ Топ-портов и сервисы


nmap -sV --top-ports 100 10.20.1.0/24


Узнаем версии сервисов по 100 самым распространенным портам в подсети.

▪️ Полный TCP-портскан


nmap -p- -T4 10.20.1.5


Сканируем все 65535 TCP-портов.

▪️ UDP-быстрый скан


sudo nmap -sU --top-ports 50 10.20.1.5


UDP требует прав root и больше времени - выбирайте топ-порты.

▪️ OS и глубокая детекция


sudo nmap -A 10.20.1.5


Включает обнаружение ОС, версий, скрипты и traceroute.

▪️ NSE-скрипты для быстрого аудита


nmap --noscript ssl-enum-ciphers,http-noscript -p 443,80 10.20.1.5


Проверяем SSL-шифры и заголовок сайта.

▪️ Массовый вывод в файлы


nmap -sV -oA scans/site_scan 10.20.1.0/24


Создаст site_scan.nmap, .gnmap и .xml - будет удобно для отчетов.

▪️ Сканирование живых хостов


nmap -sn 10.20.1.0/24


Быстрый ping-scan, покажет кто в сети сейчас.

#nmap #network

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍163
Please open Telegram to view this post
VIEW IN TELEGRAM
👍193😁1
☁️ Как проверить обращения на TCP-порт 22 от клиента с нужного IP

Иногда нужно выяснить, было ли соединение на SSH-порт сервера (обычно 22) с конкретного адреса. Казалось бы, задача простая, но есть несколько подходов - как для активных соединений, так и для анализа постфактум.

▪️ Активные подключения. Если соединение активно прямо сейчас, смотрим его в списке сетевых сокетов.
Современный инструмент - ss:


ss -ntu | grep ':22'


Аналог - netstat:


netstat -ntu | grep ':22'


Еще один полезный вариант - lsof:


lsof -ni TCP:22


▪️ Логирование попыток подключения. Если интересуют прошлые соединения, а не только активные, то тут уже нужны логи.
SSH по умолчанию пишет в системный журнал (/var/log/auth.log или /var/log/secure), но для других сервисов можно включить логирование через firewall.

Пример для iptables:


iptables -N ssh_in
iptables -A INPUT -p tcp --dport 22 -j ssh_in
iptables -A ssh_in -j LOG --log-level info --log-prefix "--IN--SSH-- "
iptables -A ssh_in -j ACCEPT


Теперь все подключения на порт 22 будут попадать в syslog.
Хотите отдельный лог - добавьте правило в rsyslog.

На практике часто используют отдельные цепочки (INPUT, OUTPUT, FORWARD), куда добавляют правила для логирования нужных адресов и портов.

▪️ Альтернативный способ. Можно посмотреть информацию о соединениях напрямую в conntrack:


cat /proc/net/nf_conntrack | grep 'dport=22'


По сути, ss и netstat читают данные именно отсюда.

#network

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
🗓 Где искать все запланированные задания

Три основных механизма, которые могут использоваться в linux:

1️⃣ Cron - классика планировщика. Cron существует с начала времен UNIX, и до сих пор активно используется.

Где искать системные задания:


/etc/crontab
/etc/cron.d/
/etc/cron.hourly/
/etc/cron.daily/
/etc/cron.weekly/
/etc/cron.monthly/


Где искать пользовательские задания:


/var/spool/cron/crontabs


или просто:


crontab -u user01 -l


Каждый пользователь имеет свой отдельный список задач.

2️⃣ systemd timers - современная замена cron. Почти все современные дистрибутивы перешли на systemd timers.
Они более гибкие: умеют запускать сервисы с зависимостями, работать после событий, логировать в journal и даже поддерживают случайные задержки.

Посмотреть список таймеров:


systemctl list-timers


Все таймеры, включая неактивные:


systemctl list-timers --all


Подробнее о конкретном таймере:


systemctl status logrotate.timer


Примеры стандартных таймеров, установленных по умолчанию:


apt-daily.timer
fstrim.timer
logrotate.timer
anacron.timer


3️⃣ at - разовые задачи. Старый, но всё ещё полезный инструмент для единичных отложенных команд.
Идеален для задач вроде: выполни через 5 минут и забудь.

В Debian 11+ утилита не устанавливается по умолчанию, но в CentOS/RHEL она ещё есть:


apt install at


Проверить очередь задач:


atq


Добавить разовую задачу:


echo "shutdown -h now" | at -m 10:20


Задачи хранятся в:


/var/spool/cron/atjobs/
или /var/spool/at/


#cron

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92
Тикет: ЭЦП не работает

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁32🙈102
🖥 Замер реальной пропускной способности сети в linux и windows

iperf3 - показывает реальную пропускную способность между двумя хостами, минуя влияние дисков, приложений и прочего. Ранее уже был пост - ссылка. Здесь продолжение, с реальным примером замера и полезными флагами.

▪️ Принцип работы

iperf3 работает по схеме клиент–сервер.
Один узел запускается в режиме сервера, второй - в режиме клиента.
Сервер принимает входящий трафик, а клиент его генерирует.

▪️ Пример замера

1️⃣ На сервере:


iperf3 -s


не забываем, что по умолчанию слушает порт 5201, он должен быть открыт.

2️⃣ На клиенте:


iperf3 -c 192.168.1.10


Результат:


[ 5] 0.00-10.00 sec 1.09 GBytes 935 Mbits/sec sender
[ 5] 0.00-10.00 sec 1.09 GBytes 935 Mbits/sec receiver


То есть реальная пропускная способность между хостами - ~935 Мбит/с.

▪️ Полезные опции

📍-R - измерение скорости в обратном направлении (reverse).


iperf3 -c 192.168.1.10 -R


📍-u - UDP-тест (по умолчанию TCP). Можно задать целевую скорость:


iperf3 -c 192.168.1.10 -u -b 500M


📍-f - единицы измерения (m для Mbits, M для MBytes):


iperf3 -c 192.168.1.10 -f m


📍 Быстрый тест "все в одном". Если у вас SSH-доступ к обеим сторонам:


iperf3 -s & ssh user@192.168.1.10 'iperf3 -c $(hostname -I | awk "{print \$1}") -P 4'


Скрипт запускает сервер локально и клиент удаленно, автоматически подключая IP.

#network #iperf3

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍161
🕘 Оптимизация загрузки системы

Один из частых вопросов: почему система грузится так долго? Для раскрытия этой тайны можно использовать встроенный инструмент systemd-analyze, который покажет подробную статистику загрузки и поможет найти узкие места.

▪️ Базовый анализ времени загрузки. Простейшая команда:


systemd-analyze


Пример вывода:


Startup finished in 2.351s (kernel) + 8.512s (userspace) = 10.863s


kernel - время работы ядра до запуска systemd
userspace - запуск сервисов и инициализация systemd
итоговое время загрузки

▪️ Кто тормоз? Чтобы узнать, какие юниты грузились дольше всего:


systemd-analyze blame


Вывод отсортирован по времени запуска. На первых строках будут виновники торжества.

▪️ Граф зависимостей. Для наглядности можно построить диаграмму загрузки:


systemd-analyze critical-chain


Она покажет цепочку сервисов, которые напрямую влияют на общее время старта.

Для детального графа в SVG:


systemd-analyze plot > boot.noscript


Файл можно открыть в браузере - это визуализация всех юнитов и их зависимостей.

▪️ Оптимизация

1️⃣ Отключить ненужные сервисы


systemctl disable bluetooth.service
systemctl disable cups.service


2️⃣ Использовать systemd-analyze blame для точечной оптимизации
Например, если дольше всего грузится NetworkManager-wait-online.service, можно сократить или отключить ожидание сети.

3️⃣ Параллелизация загрузки. systemd умеет запускать независимые сервисы параллельно, поэтому полезно проверять зависимости в systemd-analyze critical-chain.

4️⃣ Использовать mask для блокировки ненужных юнитов


systemctl mask service_name


#systemd #boot

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍103
⁉️ IPv6 в локальной сети: нужен ли он вообще

IPv6 давно перестал быть экзотикой в мире, но в локальной инфраструктуре (особенно в корпоративных и домашних сетях) его почти никто не использует. Причина простая - в локалках адреса не заканчиваются, да и пользы от IPv6 нет, если нет связи с интернетом, где он действительно нужен.

А вот проблем добавить он может:

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

Если протокол вам не нужен, то его стоит отключить.

▪️ Как отключить IPv6 в linux

Сделать это можно тремя способами, в зависимости от ситуации.

1️⃣ Через sysctl. Добавьте строки в /etc/sysctl.conf:


net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1


Примените изменения:


sysctl -p


2️⃣ Через параметры GRUB (глобально). Если система только настраивается - проще всего отключить IPv6 через загрузчик.
Откройте /etc/default/grub и добавьте в строку:


GRUB_CMDLINE_LINUX="... ipv6.disable=1"


(оставшиеся параметры не удаляйте, просто добавьте через пробел)

Обновите конфигурацию загрузчика:


update-grub # Debian/Ubuntu
dpkg-reconfigure grub-pc
grub-mkconfig -o /boot/grub/grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL/CentOS


После этого - перезагрузка и проверка:


ip a
ss -tulnp


Если IPv6 отключен - адресов вида ::1 или fe80:: вы больше не увидите.

3️⃣ Отключение для конкретного интерфейса. Иногда нужно отключить IPv6 не глобально, а только на одном интерфейсе.
Добавьте в /etc/sysctl.conf:


net.ipv6.conf.eth0.disable_ipv6 = 1


или примените временно:


sysctl -w net.ipv6.conf.eth0.disable_ipv6=1



▪️ Примечание для Windows

На windows лучше IPv6 не отключать. По словам microsoft, это может вызвать проблемы с внутренними сервисами и сетевыми компонентами системы.

#IPv6 #network

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍133
Никто не обещал, что в жизни все будет легко

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁27🔥31🗿1
😢 Скрыть содержимое bash-скрипта с помощью shc

Если нужно показать работу скрипта, но не отдавать исходники - можно скомпилировать его в бинарник через shc. Инструмент преобразует .sh в C-код и собирает исполняемый файл, на выходе пользователь получит работающий бинарник, но не читаемый скрипт.

▪️ Установка (Debian/Ubuntu):

apt install shc gcc


▪️ Пример. Есть noscript.sh:

#!/bin/bash
v=$1
echo "Simple BASH noscript. Entered VARIABLE: $v"


Компилируем:

shc -f -r noscript.sh


Появятся noscript.sh.x (бинарник) и noscript.sh.x.c (сгенерированный C). Запуск:

./noscript.sh.x 123
# Simple BASH noscript. Entered VARIABLE: 123


▪️ Полезные опции:

-e DD/MM/YYYY - срок годности; после даты бинарник не запустится.
-m "msg" - сообщение при истечении срока.

Пример с истечением:

shc -e 31/12/2025 -m "Срок истек" -f -r noscript.sh
./noscript.sh.x # Выдаст сообщение о просрочке


📌 Важное замечание по безопасности

shc - это обфускация, а не криптография. В конечном бинарнике содержимое может быть восстановлено (есть утилиты вроде UnSHc). Также секреты, записанные в скрипт, при выполнении будут лежать в памяти и их можно попытаться снять дампом. Это защита от случайного копирования, но не от целенаправленного анализа.


#noscript #security

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍84🤡1
🏠 Создание минималистичного образа Windows 11

Если вы хотите получить максимально легкий и чистый образ windows 11 - без мусора, предустановленных приложений и ненужных сервисов, то обратите внимание на nano11.

Это PowerShell-скрипт, который автоматизирует процесс сборки сильно урезанной версии Windows 11. Он использует встроенные средства DISM и oscdimg.exe, не требуя никаких внешних утилит. В результате получается компактный ISO-образ, идеально подходящий для тестирования, отладки или развертывания на виртуальных машинах.


▪️ Возможности nano11:

Создает минимальный ISO-образ Windows 11
Удаляет все предустановленные приложения и лишние компоненты
Не поддерживает обновления и добавление языков (только базовая сборка)
Подходит для VM и изолированных окружений
Полностью открытый исходный код, можно модифицировать под свои задачи

Репозиторий проекта 😺

#windows #powershell

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍87🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Чтобы наверняка не потерять

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14🫡3💩1
🤠 Быстрый аудит безопасности

Бывает такое, что сервер уже настроен и работает, но не покидает ощущение - вдруг что-то упустил, оставил какую-то уязвимость - незащищенные параметры SSH, лишние службы, слабые настройки sysctl. Чтобы быстро проверить систему, удобно использовать Lynis, инструмент для аудита безопасности и оценки соответствия стандартам.

Lynis - это утилита с открытым исходным кодом, которая выполняет анализ конфигурации linux и unix подобных систем и выдает рекомендации по усилению безопасности. Она проверяет десятки аспектов системы:

настройки ядра и PAM,
файрвол и службы,
права на файлы,
SSH, cron, логирование,
пакеты и обновления.


▪️ Установка


apt install lynis #debian или ubuntu

yum install lynis #CentOS


▪️Проверка системы. Запустить аудит можно буквально одной командой:


lynis audit system


После выполнения вы получите подробный отчет с результатами и рекомендациями.
Файл отчета по умолчанию сохраняется в: /var/log/lynis.log
а краткий отчет в: /var/log/lynis-report.dat

▪️ Расшифровка результатов

В конце проверки Lynis показывает оценку безопасности - чем она выше, тем лучше.
Также будут даны рекомендации, например:


[WARNING] SSH root login is enabled
[SUGGESTION] Install a firewall management tool (ufw/firewalld)


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

Официальный сайт 📌

#linux #security

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍161
⚡️ Быстрый HTTPS-сервер без сложных настроек

Иногда нужно быстро поделиться файлами между машинами - без nginx, apache и прочих решений. Для этого можно использовать встроенный веб-сервер python:


python3 -m http.server 8000


Он идеально подходит, когда нужно просто раздать файлы по HTTP: перешел в нужную директорию, запустил сервер, скачал - готово.

Но недавно понадобился HTTPS-сервер, так как приложение отказывалось работать по обычному HTTP. Настраивать nginx для этого не хотелось, и, как оказалось, все можно сделать тем же питоном, буквально в несколько строк.

▪️ Генерация самоподписанного сертификата. Создаем файл с ключом и сертификатом:


openssl req -new -x509 -keyout localhost.pem -out localhost.pem -days 365 -nodes


▪️ Минимальный HTTPS-сервер на python. Создаём файл webserver.py:


import http.server, ssl

server_address = ('172.20.0.210', 8000)
httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(
httpd.socket,
server_side=True,
certfile='localhost.pem',
ssl_version=ssl.PROTOCOL_TLSv1_2
)
httpd.serve_forever()


Запуск:


python3 webserver.py


После этого открываем в браузере:


https://172.20.0.210:8000


и видим содержимое директории (или сайт, если там есть index.html).

#python #https

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥31
🏃‍♂️ Сброс пароля root в linux через GRUB

Решил посмотреть, как на практике сбрасывается пароль root, и заодно поделиться с вами. Это классическая задача, которую часто дают на собеседованиях.

Цель - получить доступ к системе с правами root, даже если пароль неизвестен. Сделать это можно, изменив параметры загрузки ядра в GRUB.


▪️ Как это делается

1. Включаем сервер и ждем появления меню загрузки GRUB.
2. Выбираем нужный пункт и нажимаем e (латинскую).
3. В открывшемся редакторе ищем строку, начинающуюся с linux или linux16.
4. В самый конец этой строки добавляем:


rw init=/bin/bash


Это позволит запустить оболочку bash вместо стандартного systemd.

5. Нажимаем Ctrl+X или F10 для загрузки. После старта вы сразу окажетесь в консоли под пользователем root без пароля. Теперь можно просто задать новый пароль:


passwd


и перезагрузить систему:


exec /sbin/init


или


reboot -f


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

Параметр init= сообщает ядру, какой процесс нужно запустить первым.
Обычно это /sbin/init (или systemd), который отвечает за загрузку системы.
Когда мы подменяем его на /bin/bash, система вместо полноценной инициализации попадает прямо в консоль.
Фактически, вы оказываетесь в самой ранней стадии загрузки с полными правами root.

▪️ Для RHEL и производных

В системах вроде RHEL, CentOS, AlmaLinux, RockyLinux используется немного другой вариант:


rw rd.break enforcing=0


После загрузки окажетесь в emergency shell, где также сможете сбросить пароль через passwd.

#linux #security

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