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

Сайт: networkadmin.ru
Реклама: @dad_admin
Биржа: https://telega.in/c/networkadminru
Download Telegram
⚡️ Быстрый 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
🔐 GnuPG: шифрование и управление ключами

GnuPG (GNU Privacy Guard) - это открытая реализация стандарта OpenPGP (RFC 4880). Она позволяет:

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

Работает на всех системах - linux, macOS, windows, и не требует никаких внешних сервисов.


▪️ Основные команды для работы

1️⃣ Создание пары ключей:


gpg --full-generate-key


Тут нужно указать тип ключа (обычно RSA), длину (2048–4096), срок действия и e-mail для идентификации. После этого ключ сохраняется в ~/.gnupg/.

2️⃣ Просмотр ключей:


gpg --list-keys


3️⃣ Экспорт публичного ключа:


gpg --export -a user@networkadmin.ru > public.key


4️⃣ Экспорт приватного ключа:


gpg --export-secret-keys -a user@networkadmin.ru > private.key


5️⃣ Импорт ключа:


gpg --import public.key


▪️ Шифрование и подпись

Шифрование файла:


gpg -e -r user@networkadmin.ru secret.txt


Создается файл secret.txt.gpg, который можно расшифровать только соответствующим приватным ключом.

Расшифровка:


gpg -d secret.txt.gpg > secret.txt


Подпись файла:


gpg -s file.txt


Проверка подписи:


gpg --verify file.txt.sig file.txt


▪️ Несколько полезных команд

Проверить, какой ключ используется по умолчанию:


gpg --list-secret-keys --keyid-format LONG


Удалить ключ:


gpg --delete-key user@networkadmin.ru


Создать зашифрованный архив с tar:


tar cz folder | gpg -c > archive.tar.gz.gpg


#gpg #security

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
🖥 Динамическая маршрутизация (OSPF/BGP)

Современные серверы и маршрутизаторы давно умеют не только работать с iptables и NAT, они вполне способны участвовать в динамической маршрутизации на уровне провайдерского оборудования. Два наиболее популярных решения для этого: BIRD и FRRouting (FRR).

Если вы используете статические маршруты (ip route add ...), то при изменении топологии сети приходится вручную обновлять таблицы маршрутов.
Динамические протоколы решают это автоматически: маршрутизаторы обмениваются маршрутами между собой, выбирают оптимальные пути и обновляют таблицы без участия администратора.

Основные протоколы:

OSPF (Open Shortest Path First) - для внутренних сетей (IGP)
BGP (Border Gateway Protocol) - для внешних соединений (межсетевые маршруты между организациями)


▪️ BIRD - легкий и быстрый демон маршрутизации

BIRD - это компактное и производительное решение, часто используемое в инфраструктуре провайдеров. Поддерживает IPv4, IPv6, OSPF, BGP, RIP и static.

Установка:


apt install bird # debian или ubuntu


Пример конфигурации OSPF:


protocol ospf {
area 0 {
interface "eth0" {
cost 10;
};
};
}


Пример простого BGP сессии:


protocol bgp mypeer {
local as 65001;
neighbor 192.168.1.2 as 65002;
import all;
export all;
}


Файлы конфигурации находятся в /etc/bird/.
После изменения конфигурации не обязательно перезапускать демон, можно использовать:


birdc configure


▪️ FRRouting (FRR) - наследник Quagga. FRR - это более тяжелое решение, ориентированное на продакшн-маршрутизаторы и крупные сети. Поддерживает OSPF, BGP, IS-IS, RIP, PIM и даже LDP.

Установка:


apt install frr frr-pythontools # debian или ubuntu


Конфигурация BGP (пример):


router bgp 65001
bgp router-id 192.168.1.1
neighbor 192.168.1.2 remote-as 65002
network 10.0.0.0/24


Запуск FRR:


systemctl enable frr
systemctl start frr


Конфигурация хранится в /etc/frr/frr.conf. Для управления используется утилита vtysh, она похожа на CLI сетевых устройств cisco или mikrotik.

#linux #networking

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Подготовка к выходу стажера

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁18🔥2🤔1
🧑‍💻 Отладка контейнеров без инструментов

Иногда нужно что-то быстро продебажить внутри контейнера: посмотреть процессы, сделать ping, проверить DNS или снять tcpdump. Но чаще всего внутри контейнера нет вообще ничего, кроме самого приложения.

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

▪️ Пример использования. Создадим контейнер с Nginx, где нет даже ps:


docker run --name nginx -d -p 8080:80 nginx
docker exec -it nginx bash
ps axf

bash: ps: command not found


Теперь подключаем Network-Multitool к тому же namespace, где работает контейнер Nginx:


docker run --rm -it \
--network=container:nginx \
--pid container:nginx \
wbitt/network-multitool:alpine-extra bash


Проверим процессы:


ps axf
PID TTY STAT TIME COMMAND
47 pts/0 Ss 0:00 bash
60 pts/0 R+ 0:00 \_ ps axf
1 ? Ss 0:00 nginx: master process nginx -g daemon off;
29 ? S 0:00 nginx: worker process
30 ? S 0:00 nginx: worker process



Теперь у вас есть все необходимое: ping, dig, curl, tcpdump, netcat, iftop, mysql, git, tshark и многое другое.

▪️ Варианты сборок

alpine-extra - расширенная версия (максимум инструментов, включая tshark, ab, postgresql-client, git и др.).
alpine-minimal - легкая сборка, только базовые сетевые утилиты.

#docker #debug

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍5
📱 Генератор конфигураций Nginx

Хочу напомнить о полезном сервисе для генерации конфигов nginx - https://nginxconfig.io/

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

Вы просто заполняете форму: указываете домен, корневую директорию, нужные параметры HTTPS, настройки для WordPress, PHP-FPM, Node.js или Python. На выходе получаете полный набор конфигов, аккуратно разделённых на смысловые части:

основной конфиг Nginx;
настройки SSL и безопасности;
параметры для CMS (WordPress, Drupal и др.);
шаблон для Let’s Encrypt;
инструкции по установке и активации.

Сервис даже показывает пошаговую инструкцию, включая:

генерацию dhparam.pem для ssl_dhparam;
создание каталога /.well-known/acme-challenge для валидации сертификатов;
команду для настройки certbot.

▪️ Что полезного я подсмотрел

1️⃣ error_page 404 /custom_404.html;
Раньше я не всегда добавлял собственную страницу ошибок, а сервис по умолчанию предлагает аккуратную структуру с отдельным location для обработки 404 и 50x ошибок. Решил внедрить у себя - теперь логи чище, а пользователю отображается внятная страница.

2️⃣ add_header X-Frame-Options "SAMEORIGIN";
Мелочь, но важная - защита от clickjacking. Я добавил этот заголовок в общий конфиг, чтобы не прописывать вручную в каждом сайте.

3️⃣ ssl_protocols TLSv1.2 TLSv1.3;
Сервис сразу предлагает только современные протоколы.

4️⃣ location ~ /.(?!well-known)
Глобальная блокировка скрытых директорий, кроме .well-known для Let’s Encrypt - отличная идея.
Раньше я прописывал исключения вручную для каждого виртуального хоста, теперь вынес в общий файл security.conf.

Даже если вы уверенно настраиваете nginx вручную, такие инструменты полезны для проверки себя и актуализации шаблонов.
Сервис генерирует чистые, валидные и безопасные конфиги, которые можно использовать как основу для продакшн-настроек.

#nginx #webserver

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥1
Фигня все эти ваши криптовалюты 😎

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁16🔥2
🏠 Управление windows серверами как по SSH

PowerShell - это не просто консоль, а полноценная среда для удаленного администрирования. Один из ее инструментов - PowerShell Remoting, позволяющий выполнять команды и скрипты на других windows серверах (и даже на linux) почти так же, как по SSH.

PowerShell Remoting - это механизм, основанный на WinRM (Windows Remote Management), который реализует стандарт WS-Management.
Он позволяет запускать команды, выполнять скрипты и даже открывать интерактивную сессию на удаленной машине.

По сути, это SSH для windows, встроенный в систему начиная с windows 7 / server 2008 R2.


⚙️ Настройка PowerShell Remoting. На целевом сервере достаточно выполнить одну команду:


Enable-PSRemoting -Force


Эта команда:

Включает службу WinRM,
Настраивает слушатель HTTP (порт 5985) и HTTPS (порт 5986),
Добавляет правила в брандмауэр.

Проверяем статус:


Get-Service WinRM


🌐 Подключение к удаленной системе

Подключиться можно тремя способами:

1. Выполнить одиночную команду:


Invoke-Command -ComputerName server01 -ScriptBlock { Get-Service }


2. Открыть интерактивную сессию:


Enter-PSSession -ComputerName server01


(аналог ssh user@server)

3. Создать постоянную сессию и использовать её повторно:


$session = New-PSSession -ComputerName server01
Invoke-Command -Session $session -ScriptBlock { Get-Process }
Remove-PSSession $session


🔓 PowerShell Remoting через HTTPS и SSH

Если хотите шифровать трафик, то настройте HTTPS-сессию (WinRM через TLS).
А начиная с PowerShell 7, можно использовать нативный SSH-транспорт:


Enter-PSSession -HostName server01 -UserName admin


Теперь PowerShell работает поверх SSH - удобно, безопасно и кроссплатформенно.

⚠️ Практические сценарии

Массовый перезапуск служб:


Invoke-Command -ComputerName (Get-Content servers.txt) -ScriptBlock { Restart-Service spooler }


Сбор информации о дисках или обновлениях на всех серверах:


Invoke-Command -ComputerName * -ScriptBlock { Get-HotFix }


Запуск скриптов администрирования без входа по RDP.

🆘 Советы

Для доменной инфраструктуры remoting работает из коробки.
Для рабочих групп используйте Enable-PSRemoting + Set-Item WSMan:\localhost\Client\TrustedHosts *.
На проде лучше ограничить доступ с помощью HTTPS, Kerberos или SSH.

#powershell #windows

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Forwarded from IT-KB 🤖
Как и обещали проводим следующий розыгрыш для наших подписчиков 🎉

В этот раз тоже всё очень просто:
1. @ITKB_channel
2. Нажать "Участвовать"

7 декабря 2025 года 10 случайно выбранных системой подписчиков получат 1000 р.


P.S. в следующий раз обязательно отметим 🪙 самых преданных подписчиков, которые на продолжительной основе находятся вместе с нами❤️

Всем удачи и огромное спасибо за то, что Вы с нами!🤗
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👌3🍾2
🔒 Защита DNS-запросов на практике

DNS - это всегда один из самых уязвимых элементов сети. Каждый раз, когда вы вводите сайт в браузере, ваш компьютер отправляет незашифрованный запрос к DNS-серверу, спрашивая: какой IP-адрес у этого домена? Эти запросы можно перехватить, подменить или использовать для слежки. Чтобы защитить пользователей и инфраструктуру, появились две технологии: DNSSEC и DNS over HTTPS (DoH).

▪️ DNSSEC - подписи и верификация ответов. DNSSEC - это расширение классического DNS, добавляющее цифровую подпись к каждому ответу.
Задача DNSSEC гарантировать целостность и подлинность данных, а не шифровать трафик.

Принцип работы:

Каждый домен имеет криптографическую пару ключей (DNSKEY).
Ответ DNS подписывается приватным ключом.
Клиент или DNS-сервер-посредник проверяет подпись с помощью публичного ключа, опубликованного в зоне.
Если подпись не сходится - ответ считается поддельным.

Пример проверки DNSSEC с помощью dig:


dig linux.org +dnssec


Если в ответе есть флаг ad (Authenticated Data), значит, подпись проверена и валидна.

▪️ DNS over HTTPS (DoH) - шифрование DNS-запросов. DoH решает другую задачу, он шифрует сам трафик DNS. Запросы к DNS-серверу отправляются по HTTPS, то есть через порт 443 с TLS-шифрованием.

Преимущества:

Скрывает DNS-запросы от провайдера и промежуточных узлов.
Устойчив к подмене (например, от провайдерских фильтров).
Легко использовать в корпоративных и домашних сетях.

Пример настройки DoH в Linux с systemd-resolved. Для этого редактируем /etc/systemd/resolved.conf:


[Resolve]
DNS=1.1.1.1#cloudflare-dns.com
DNSOverTLS=yes


или используем dnscrypt-proxy, который поддерживает и DoH, и DoT (DNS over TLS).

▪️ Связка DNSSEC + DoH. DNSSEC проверяет, что данные настоящие, а DoH гарантирует, что запросы никто не подслушает.

Совместное использование этих технологий обеспечивает:

Проверку подлинности ответов DNS;
Защиту от MITM-атак и подмены записей;
Конфиденциальность и шифрование всех запросов.

Где это работает:

Cloudflare (1.1.1.1) - поддерживает DNSSEC и DoH;
Google Public DNS (8.8.8.8) - поддерживает DNSSEC;
Quad9 (9.9.9.9) - DoH + фильтрация вредоносных доменов.

Проверить поддержку DoH можно через:


curl -s https://cloudflare-dns.com/dns-query?name=example.com -H 'accept: application/dns-json'


#DNS #security

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍121👎1
🖥 Курсы по PostgreSQL

Если вы работаете с PostgreSQL или только планируете - обратите внимание бесплатные курсы от компании Postgres Professional. Это один из немногих примеров, когда коммерческая компания делится полноценной учебной программой без ограничений.

Ссылка: https://postgrespro.ru/education/courses

▪️ Доступные курсы для администраторов PostgreSQL

DBA1 - базовое администрирование PostgreSQL
DBA2 - настройка и мониторинг
DBA3 - резервное копирование и репликация
QPT - оптимизация запросов
PGPRO - возможности Postgres Pro Enterprise

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

▪️ Пример

Хотите разобраться с резервным копированием и репликацией?

Перейдите в DBA3, тема 2. Базовая резервная копия. Вы узнаете про холодные и горячие бэкапы, различия подходов, используемые инструменты и проверку восстановления.

(не реклама)

#postgresql #database

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍133🔥1
👓 Изоляция процессов без Docker

В linux есть встроенный механизм изоляции системных ресурсов - namespaces. Именно на нем основаны контейнеры вроде docker и LXC. Но namespaces можно использовать и напрямую без всяких надстроек.

Namespace - это способ ядра linux изолировать разные части системы: процессы, сеть, точки монтирования, пользователей и т.д.
Каждое приложение может жить в своем отдельном пространстве, не видя другие процессы и ресурсы.


▪️ Пример 1: изоляция процессов и монтирования. Запустим новую оболочку bash в отдельном пространстве процессов (PID) и монтирования (mount).


unshare --pid --mount --fork --mount-proc /bin/bash
ps aux

USER PID %CPU %MEM COMMAND
root 1 0.0 0.0 /bin/bash
root 18 0.0 0.0 ps aux


Здесь процесс bash получил PID 1 - он главный в своем изолированном пространстве. Теперь создадим изолированное монтирование:


mkdir /tmp/testdir /mnt/testdir
mount --bind /tmp/testdir /mnt/testdir
mount | grep testdir

/dev/sda3 on /mnt/testdir type ext4 (rw,relatime)


На хосте это монтирование вы не увидите, оно существует только внутри namespace.

▪️ Просмотр активных namespaces. Список всех пространств можно увидеть с помощью lsns:


lsns

NS TYPE NPROCS PID USER COMMAND
4026532480 pid 3 123 root unshare --pid --mount --fork --mount-proc /bin/bash
4026532481 mnt 3 123 root └─/bin/bash


Тут видны PID и MOUNT пространства, созданные нашей командой unshare. Если у вас работают контейнеры, их namespaces тоже будут отображены здесь.

▪️ Пример 2: запуск процессов в чужом namespace. Можно подключиться к уже существующему пространству с помощью nsenter.

Предположим, у нас есть процесс bash с PID 123. Подключимся к нему и запустим команду top:


nsenter -t 123 -p -m top


Теперь top выполняется внутри того же PID и mount namespace, что и процесс bash.

▪️ Полезные инструменты

unshare - создает новые namespaces.
nsenter - позволяет войти в уже существующие.
systemd-nspawn - мини-контейнерная система от systemd.

Пример запуска простого контейнера через systemd-nspawn:


systemd-nspawn -D /var/chroot/debian bash


#linux #namespaces

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11😁2
This media is not supported in your browser
VIEW IN TELEGRAM
И не говори, что не захотел

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁162
Как современные дистрибутивы управляют сетями

В последние годы сетевой стек linux стал удобнее и гибче. Вместо громоздких init-скриптов и ручной правки /etc/network/interfaces сейчас используются более современные инструменты - netplan и networkmanager. Часто они сосуществуют в одной системе, и админам важно понимать, когда и что использовать. Поделюсь, как работает каждый из этих инструментов и чем они отличаются.

▪️ Netplan: YAML-конфигурации и единая точка входа. Netplan появился в Ubuntu начиная с 17.10 и задумывался как универсальный слой конфигурации.
Его роль проста:

▪️читать YAML-файлы из /etc/netplan/
▪️транслировать их в настройки сетевого бэкенда (NetworkManager или systemd-networkd)
▪️выполнять примененную конфигурацию при загрузке

Сам Netplan не поднимает сети, он лишь управляет настройками. Пример конфигурации для systemd-networkd:


network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses: [192.168.1.50/24]
gateway4: 192.168.1.1
nameservers:
addresses: [1.1.1.1, 8.8.8.8]


Применение:


sudo netplan apply


▪️Используется на серверах Ubuntu;
▪️Простой, декларативный, без лишних зависимостей;
▪️Отлично подходит для headless-сред, VPS, Kubernetes-нод и любых серверных задач.

▪️ NetworkManager: Wi-Fi, VPN и десктопные сценарии. NetworkManager - это полноценный сетевой менеджер с интерактивными инструментами:

nmcli (CLI);
nmtui (TUI-интерфейс);
GUI в GNOME/KDE;

Он умеет управлять:

Wi-Fi
VPN
Bonding/LACP
VLAN
Bridge
PPPoE
мобильными модемами
и многим другим.


Пример настройки интерфейса статикой через nmcli:


nmcli connection add type ethernet ifname ens33 con-name static-ens33 \
ip4 192.168.1.50/24 gw4 192.168.1.1
nmcli connection modify static-ens33 ipv4.dns "1.1.1.1 8.8.8.8"
nmcli connection up static-ens33


▪️Стандарт для десктопов
▪️Основной сетевой менеджер в Fedora, CentOS и др.
▪️Удобен при сложных сетевых сценариях и динамических подключениях

▪️ Как Netplan и NetworkManager работают вместе

В Ubuntu Desktop схема следующая:

Netplan читает конфигурацию
В YAML указано renderer: NetworkManager
NetworkManager реально поднимает сеть

Пример:


network:
version: 2
renderer: NetworkManager


После этого весь контроль переходит NetworkManager, а Netplan становится лишь точкой начальной конфигурации.

#netplan #networkmanager

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11👎1
📱 Windows в контейнере

На GitHub есть готовый способ запустить windows прямо в контейнере docker, без ручной настройки виртуалок. Все автоматизировано и работает поверх KVM. Ссылка: https://github.com/dockur/windows

▪️ Первые шаги

Разворачивать все на виртуальной машине с включенной вложенной виртуализацией. Выставляется тип процессора в host и на этом все. Дальше - стандартный старт:


git clone https://github.com/dockur/windows
cd windows
docker compose up


Контейнер создался и попытался загрузить образ windows 11. Но тут ошибка: microsoft заблокировала скачивание ISO с моего IP. Выход есть - можно скачать ISO вручную и передать контейнеру, но можно и проще: переключить версию на windows 10.

▪️ Настройка версии Windows. В файле docker-compose.yml достаточно задать переменную окружения:


version: "3"
services:
windows:
environment:
VERSION: "win10"


После этого запускаем снова:


docker compose up


Контейнер скачивает ISO Windows 10, разворачивает его и устанавливает систему в автоматическом режиме. Через 30 минут будет готовая, неактивированная, но полностью легальная Windows.

▪️ Доступ и управление. За установкой можно наблюдать через веб-интерфейс (порт 8006):


http://<ip_сервера>:8006


После установки доступ к системе:

через браузер (встроенный VNC),
или по RDP (пользователь docker, пароль — пустой).

▪️ Ресурсы по умолчанию. Контейнеру выделяется:

2 CPU
4 GB RAM
64 GB диска

Все параметры можно менять в environment. Важно следить за свободным местом!

▪️ Итог

Не нужно вручную поднимать виртуалки, скачивать ISO или прописывать драйверы. Просто запускаете контейнер и получаете готовую Windows, работающую поверх KVM. Docker тут используется не ради контейнеризации, а ради автоматизации всего процесса.

#docker #windows

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍17🔥3🗿1
🤩 Admin Books —электронные книги о компьютерных технологиях.

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

Стань экспертом в следующих направлениях:

Системное администрирование
Информационная безопасность
Сетевое администрирование
Этичный хакинг

Ссылка для своих: https://news.1rj.ru/str/admbooks
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
🧑‍💻 Создание и отладка собственных сервисов

Systemd давно стал стандартом для запуска, управления и наблюдения за сервисами. Но многие используют его только для управления уже существующими демонами и не создают собственные unit-файлы, а ведь это удобный способ автоматизировать любые скрипты, фоновые процессы или приложения.

▪️ Шаг 1: создаём unit-файл. Все пользовательские сервисы кладутся в:


/etc/systemd/system/


Пример простого сервиса, который запускает bash-скрипт:


/etc/systemd/system/myapp.service

[Unit]
Denoscription=My custom app
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/myapp.sh
Restart=on-failure
User=myuser
Group=myuser

[Install]
WantedBy=multi-user.target


Несколько рекомендаций по параметрам:

Type=simple - подходит для скриптов и обычных демонов
Restart=on-failure - перезапуск при сбоях
User=… - всегда запускайте сервисы НЕ от root, если это возможно
After=network.target - ожидаем сеть перед запуском


▪️ Шаг 2: корректно пишем исполняемый скрипт. Для стабильной работы сервисов:

указываем shebang (#!/bin/bash);
используем абсолютные пути к бинарникам;
перенаправляем вывод в syslog или файл (если нужно);
завершаемся с кодами ошибок.

Пример:


#!/bin/bash
set -e

echo "Service started"
ping -c 1 8.8.8.8


Не забываем:


chmod +x /usr/local/bin/myapp.sh


▪️ Шаг 3: включаем и запускаем сервис


systemctl daemon-reload
systemctl enable --now myapp.service


Проверяем статус:


systemctl status myapp.service


▪️ Отладка. Systemd имеет отличные инструменты диагностики.

Посмотреть логи сервиса:


journalctl -u myapp.service -f


Проверить последнюю ошибку:


systemctl status myapp.service


Проверить, что systemd видит изменения:


systemctl daemon-reload


Принудительно перезапустить сам процесс:


systemctl restart myapp.service


▪️ Полезные параметры, которые часто забывают

LimitNOFILE - увеличить максимальное количество файлов
LimitNOFILE=65535

WorkingDirectory - задать рабочую директорию
WorkingDirectory=/opt/myapp

Environment - задать переменные окружения
Environment="APP_ENV=prod"

▪️ Безопасность. Systemd умеет частично изолировать сервисы, похожим образом на контейнеры, например:


ProtectSystem=full
ProtectHome=true
PrivateTmp=true
NoNewPrivileges=true


#linux #systemd

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111
🔠 Монтирование файловых систем через systemd

Хотя многие админы по привычке используют /etc/fstab, у systemd есть собственный механизм монтирования, который во многом удобнее и современнее.

📍 Почему systemd лучше, чем fstab?

1️⃣Автомонтирование при обращении - устройство подключается только тогда, когда к нему обращаются, и может автоматически отключаться по заданному таймауту.
2️⃣Автосоздание точек монтирования - systemd сам создает нужные директории, администратору не нужно следить за их наличием.
3️⃣Гибкая работа с таймаутами - если устройство недоступно, загрузка системы не повиснет, как это иногда бывает с fstab.
4️⃣Зависимости от сервисов - можно задать, что монтирование произойдёт только после старта VPN или другого сервиса, который необходим для доступа к диску.


▪️ Пример: локальный диск в /mnt/backup

1️⃣ Создаем юнит /etc/systemd/system/mnt-backup.mount:


[Unit]
Denoscription=Disk for backups

[Mount]
What=/dev/disk/by-uuid/f774fad3-2ba0-47d1-a20b-0b1c2ae1b7d6
Where=/mnt/backup
Type=ext4
Options=defaults

[Install]
WantedBy=multi-user.target


2️⃣ Подготовка диска:


cfdisk /dev/sdb #создаем раздел
mkfs -t ext4 /dev/sdb1 #форматируем
blkid #смотрим UUID


3️⃣ Запуск и включение автозагрузки:


systemctl daemon-reload
systemctl start mnt-backup.mount
systemctl enable mnt-backup.mount


▪️ Пример: автомонтирование NFS через VPN. Для сетевых дисков будет удобнее использовать .automount. Он подключает ресурс по требованию и может отмонтировать при простое.

/etc/systemd/system/mnt-backup.mount:


[Unit]
Denoscription=NFS share

[Mount]
What=srv.example.com:/backup/nfs_share
Where=/mnt/backup
Type=nfs4
Options=rw
TimeoutSec=15


/etc/systemd/system/mnt-backup.automount:


[Unit]
Denoscription=NFS share
Requires=network-online.target
BindsTo=openvpn@client.service
After=openvpn@client.service

[Automount]
Where=/mnt/backup
TimeoutIdleSec=60

[Install]
WantedBy=graphical.target


Включаем:


systemctl daemon-reload
systemctl enable --now mnt-backup.automount


Теперь:

при старте системы диск не монтируется сразу;
при первом обращении к /mnt/backup - идет подключение NFS через VPN;
при остановке openvpn@client.service диск автоматически отмонтируется.

#systemd #fstab

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
⌨️ Инструмент для управления RDP-серверами Windows

Для администраторов windows есть небольшой, очень быстрый и почти олдовейший по духу инструмент - Terminal Services Manager от LizardSystems. Размер всего ~4 МБ, работает мгновенно, интерфейс простой и предельно функциональный. Изначально утилиту делали для терминальных серверов, но по факту она отлично подходит для любой Windows-машины: от серверов до обычных рабочих станций.

Программа платная, но условно. Для персонального использования доступна полностью бесплатная версия без ограничений.

▪️ Что умеет Terminal Services Manager

▪️ Управление терминальными сессиями

- Просмотр всех подключённых пользователей
- Видно, кто активен, кто в состоянии Disconnected
- Подключение к пользовательской сессии
- Принудительный logout или завершение всех сессий

▪️ Взаимодействие с пользователями

- Отправка сообщений прямо в их RDP-сессии

▪️ Мониторинг состояния системы

- Быстрый просмотр нагрузки CPU, RAM, диска

▪️ Управление процессами

- Просмотр процессов на удалённой машине
- Завершение зависших приложений
- Видно процессы по пользователям

▪️ Администрирование хоста

- Перезагрузка и выключение удалённых серверов
- Очистка профилей пользователей
- Быстрое включение/отключение RDP-доступа

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

#windows #RDP

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
SMB-сервер на Python

impacket - идеален для одноразовых задач: поднимаешь за пару команд, кидаешь файлы и завершаешь процесс.

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


apt install python3-impacket


▪️ Пример запуска (встроенный примерный скрипт):


cd /usr/share/doc/python3-impacket/examples/
python3 smbserver.py share /mnt/share -smb2support


Пояснения:

share - имя шары;
/mnt/share - директория, которую расшариваем (не забудьте права, для анонимного доступа удобно chmod 777 /mnt/share);
-smb2support - включить SMB2 (без этого Windows 10/11 иногда не подключаются).


Если нужна простая авторизация, можно указать логин/пароль:


python3 smbserver.py share /mnt/share -smb2support -username demo -password pass


⚠️ Важно: windows иногда пытается автоматически подключиться под текущей учеткой и не показывает диалог ввода пароля, в таких случаях полезно явно указать в проводнике «Connect using different credentials» или подключаться по IP с параметром учётных данных. С linux таких проблем нет, smbclient прекрасно работает:


smbclient -L 192.168.55.15 --user demo%pass
smbclient //192.168.55.15/share --user demo%pass


Плюсы:

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

Минусы:

пакет impacket - большой и ориентирован в основном на сетевые инструменты (pentest/ssc), так что для постоянной работы лучше все же samba или ksmbd;
не для продакшена: минимальная безопасность, упрощенные механизмы аутентификации.

Для быстрых переносов файлов или тестов - это будет шикарный инструмент.

#SMB

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