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
⌛️ Автозапуск сервисов в systemd при сбоях

В systemd есть встроенный механизм автоматического перезапуска сервисов при их падении. Управляется это параметром Restart в разделе [Service] unit-файла.

📌 Основные значения Restart

always - перезапуск всегда (даже при корректном завершении)
on-success – только если сервис завершился без ошибок
on-failure – при ошибках или принудительном завершении (SIGKILL, timeout)
on-abnormal – при завершении сигналом или зависании
on-abort – если сервис был принудительно завершён
on-watchdog – при срабатывании watchdog timeout
no – автозапуск отключен (значение по умолчанию)


⚙️ Настройка автозапуска сервиса
Редактировать основной unit-файл не нужно. Достаточно создать override.conf:


mkdir -p /etc/systemd/system/nginx.service.d
nano /etc/systemd/system/nginx.service.d/override.conf


Добавьте настройки:


[Service]
Restart=always
RestartSec=5s


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


systemctl daemon-reload


Теперь при падении Nginx перезапустится через 5 секунд. Проверка:


systemctl status nginx
kill -9 <PID>
systemctl status nginx


🌟 Когда не стоит включать автозапуск:

1. Базы данных (MySQL, PostgreSQL) – после аварии могут запустить ресурсоёмкое восстановление, которое OOM-killer прервёт, создавая бесконечный цикл.
2. Кластеры (Elasticsearch, Ceph) – возможна рассинхронизация или некорректная работа.

Для веб-серверов (Nginx, Apache), почтовых сервисов (Postfix, Dovecot) и агентов мониторинга (Zabbix Agent) – автозапуск обычно безопасен.

✉️ Оповещения о сбоях
Добавьте в override.conf, чтобы получать уведомления:


[Unit]
OnFailure=your-notify-noscript.service


Это может быть скрипт с отправкой алерта в Telegram или email.

#linux #systemd

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍181
📅 Как обнаружить бэкдор на Windows-сервере?

1️⃣ Проверяем сетевые подключения. Запущенные соединения покажут активные подключения:


netstat -ano | findstr :3389


Можно искать процессы, слушающие нестандартные порты:


Get-NetTCPConnection | Where-Object { $_.State -eq "Listen" }


Неизвестные процессы, особенно на портах RDP, SSH, HTTP/S - тревожный знак.

2️⃣ Сканируем автозапуск. Бэкдоры часто закрепляются в автозагрузке:


Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location


Autoruns от Microsoft покажет больше деталей.

3️⃣ Анализируем активные процессы. Проверяем запущенные процессы и их происхождение:


Get-Process | Sort-Object CPU -Descending


Подозрительные процессы ищем в Task Manager, Process Explorer, проверяем путь C:\Windows\System32\, C:\Users\Public\.

4️⃣ Ищем нестандартные учетные записи


Get-LocalUser | Where-Object { $_.Enabled -eq $true }


Неизвестные администраторы или странные группы – считаем поводом для доп. аудита.

5️⃣ Проверяем планировщик задач. Атакующие могут создать скрытые задания:


Get-ScheduledTask | Where-Object {$_.State -eq "Ready"}


Задачи с cmd.exe, powershell.exe, wnoscript.exe без явного назначения - подозрительны.

6️⃣ Ищем DLL-инъекции и хуки. Используем Sysinternals Process Explorer, вкладка DLLs.

DLL из Temp, AppData или сторонних каталогов могут быть вредоносными.

7️⃣ Проверяем системные логи. В Event Viewer (Просмотр событий) смотрим разделы:

Security - неудачные попытки входа
System - странные ошибки служб
Application - нестандартные ошибки



Get-EventLog -LogName Security -Newest 50


Логон с незнакомых IP, массовые ошибки 4625 (неудачные входы) могут указывать на атаку.

8️⃣ Проверяем файловую систему. Сканируем системные каталоги на свежие файлы:

powershell
Get-ChildItem C:\Windows\System32 -Recurse | Sort-Object LastWriteTime -Descending | Select-Object -First 10

Внезапные изменения в System32, Temp, AppData - подозрительны.

#windows #security

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍221
🫂 Совместная работа в терминале

screen - отличная утилита для работы в Linux, особенно если хочется сохранить SSH-сессию при разрыве соединения. Но кроме этого, её можно использовать для совместной работы в одной консоли, как аналог TeamViewer/AnyDesk, но для терминала.

▪️ Совместная сессия для одного пользователя. Если два пользователя подключены под одной учетной записью, можно создать общую сессию:


screen -d -m -S shared


Подключаемся к ней с двух терминалов:


screen -x shared


Теперь оба пользователя видят и могут вводить команды в одном терминале.

▪️ Совместная работа для разных пользователей. По умолчанию screen не позволяет шарить сессии между разными пользователями. Нужно немного подготовить систему:

1️⃣ Разрешаем screen запускаться с правами root


chmod u+s $(which screen)
chmod 755 /var/run/screen
rm -fr /var/run/screen/*


2️⃣ Запускаем сессию под root и включаем мультипользовательский режим


screen -d -m -S shared
screen -r shared


Внутри screen включаем доступ для другого пользователя (например, zerox):


Ctrl-a :multiuser on
Ctrl-a :acladd zerox


Теперь пользователь zerox может подключиться к сессии:


screen -x root/shared


3️⃣ Ограничиваем права. По умолчанию пользователь получает полный доступ. Чтобы оставить только режим просмотра:


Ctrl-a :writelock on


#linux #terminal

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111
👀 Анализ логов Windows с PowerShell и LogParser

1️⃣ Анализ логов через PowerShell. PowerShell позволяет извлекать события из журнала Windows через Get-WinEvent или Get-EventLog.

📍 Пример 1: Найти все неудачные попытки входа (Event ID 4625):


Get-WinEvent -LogName Security | Where-Object { $_.Id -eq 4625 } | Select-Object TimeCreated, Id, Message


📍 Пример 2: Вывести последние 10 ошибок из системного журнала:


Get-WinEvent -LogName System -MaxEvents 10 | Where-Object { $_.Level -eq 2 }


📍 Пример 3: Фильтрация по дате и пользователю:


$start = (Get-Date).AddDays(-1) # Логи за последние 24 часа
Get-WinEvent -LogName Security | Where-Object { $_.TimeCreated -ge $start -and $_.Message -match "admin" }


PowerShell удобен, но не всегда эффективен при анализе больших логов. Тут поможет LogParser.

2️⃣ LogParser: SQL-запросы к логам Windows. LogParser - инструмент от Microsoft, который позволяет выполнять SQL-запросы к журналам событий, файлам и даже реестру.

⚙️ Установка: Скачиваем LogParser с официального сайта Microsoft и устанавливаем.

📍 Пример 1: Вывести все ошибки из системного журнала:


LogParser.exe "SELECT TimeGenerated, EventID, Message FROM System WHERE EventType = 1" -i:EVT


📍 Пример 2: Найти неудачные попытки входа:


LogParser.exe "SELECT TimeGenerated, SID, Message FROM Security WHERE EventID = 4625" -i:EVT


📍 Пример 3: Вывести топ-10 процессов, потребляющих ресурсы:


LogParser.exe "SELECT TOP 10 Image, COUNT(*) AS Hits FROM 'C:\Windows\System32\winevt\Logs\Application.evtx' GROUP BY Image ORDER BY Hits DESC" -i:EVT


LogParser умеет анализировать не только логи, но и файлы CSV, IIS-логи, текстовые файлы и даже WMI-запросы.

#windows #logs

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
🗑 Microsoft: старый ПК с Windows 10 нужно утилизировать, если его невозможно обновить до Windows 11

Microsoft выпустила чек-лист по подготовке к окончанию поддержки Windows 10 - это произойдёт 14 октября 2025 года. Если кратко, то пользователей ждёт развилка из двух дорог.

Первый путь - обновление до Windows 11, если «железо» ещё тянет.
Второй - расстаться с компьютером (утилизировать), если он не соответствует требованиям новой ОС.

---

Приму в дар вашу технику, не соответствующую новым требованиям Microsoft 😁

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁39🤡10🔥4👍2
💎 Как правильно настроить SNMP для мониторинга сети

SNMP (Simple Network Management Protocol) - один из самых популярных протоколов для мониторинга сетевого оборудования, серверов и рабочих станций. Он позволяет получать данные о загрузке процессора, памяти, сетевых интерфейсах и многом другом. Однако, неправильная настройка SNMP может стать уязвимостью в системе. Разберем, как его правильно настроить.

1️⃣ Выбор версии SNMP. Существует три версии протокола:

SNMPv1 – устаревшая, передает данные в открытом виде (НЕ рекомендуется).
SNMPv2c – улучшенная версия, но всё еще без шифрования.
SNMPv3 – наиболее безопасная, поддерживает аутентификацию и шифрование (РЕКОМЕНДУЕТСЯ).


Для безопасного мониторинга лучше взять SNMPv3 с аутентификацией и шифрованием.

2️⃣ Настройка SNMP на Linux. Установка SNMP-сервера (snmpd)


sudo apt install snmp snmpd -y # Для Debian/Ubuntu
sudo yum install net-snmp net-snmp-utils -y # Для CentOS/RHEL


Редактирование конфигурации (/etc/snmp/snmpd.conf)

📍 Оставляем только нужные OID и включаем SNMPv3:


agentAddress udp:161,udp6:[::1]:161
rocommunity public default -V systemonly
sysLocation "Server Room"
sysContact "admin@networkadmin.ru"


📍 Перезапускаем службу:


sudo systemctl restart snmpd
sudo systemctl enable snmpd


📍 Проверяем работу SNMP:


snmpwalk -v2c -c public 127.0.0.1


3️⃣ Настройка SNMP на Windows. Установка SNMP

Для Windows 10/11 и Windows Server:


Enable-WindowsOptionalFeature -Online -FeatureName SNMP


Затем включите службу в services.msc и настройте параметры в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP через реестр.

4️⃣ Ограничение доступа по IP и Firewall. Чтобы SNMP не стал уязвимостью, ограничиваем доступ к нему.

На Linux (iptables/firewalld):


iptables -A INPUT -p udp --dport 161 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p udp --dport 161 -j DROP


На Windows:


New-NetFirewallRule -DisplayName "Allow SNMP" -Direction Inbound -Protocol UDP -LocalPort 161 -Action Allow -RemoteAddress 192.168.1.0/24


5️⃣ Мониторинг с помощью SNMP. Для сбора данных через SNMP можно использовать:

Zabbix
LibreNMS
Telegraf + InfluxDB + Grafana
snmpwalk/snmpget


Пример запроса данных с устройства:


snmpget -v2c -c public 192.168.1.1 .1.3.6.1.2.1.1.5.0


#SNMP #linux #windows #monitoring

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Попался

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁14💊4👍1
✏️ Логи Nginx в JSON: удобство и гибкость

По умолчанию Nginx ведёт логи в текстовом формате, но уже давно умеет писать их в JSON. Однако, в большинстве конфигураций всё ещё используются старые текстовые логи. Если вы до сих пор не перешли на JSON, самое время это сделать – его проще анализировать вручную и обрабатывать в автоматизированных системах.

⚙️ Настройка JSON-логов в Nginx. Включить JSON-формат просто – достаточно добавить новую директиву log_format в конфигурационный файл:


log_format json_combined escape=json '{'
'"time_local":"$time_local",'
'"remote_addr":"$remote_addr",'
'"remote_user":"$remote_user",'
'"request":"$request",'
'"status":"$status",'
'"body_bytes_sent":"$body_bytes_sent",'
'"request_time":"$request_time",'
'"http_referrer":"$http_referer",'
'"http_user_agent":"$http_user_agent"'
'}';


Добавляем в http { } или в настройки виртуального хоста:


access_log /var/log/nginx/access.log json_combined;


После перезапуска Nginx сервер начнёт записывать логи в JSON.

🌟 Почему это удобно?

Если вы используете Zabbix, ELK (Elasticsearch + Logstash + Kibana), Grafana или другие системы мониторинга – обработка JSON-логов упростится, так как для него уже есть готовые парсеры.


Но даже в консоли JSON-логи обрабатывать намного удобнее с помощью jq:

▪️ Вывод всех логов в формате JSON:


jq '.' access.log


▪️ Список всех запрашиваемых URL:


jq '.request' access.log


▪️ Фильтр по коду ответа 404 (показывает всю запись):


jq '. | select(.status=="404")' access.log


▪️ Вывод только URL с кодом 404:


jq '. | select(.status=="404") | .request' access.log


▪️ Добавляем к URL ещё и время запроса:


jq '. | select(.status=="404") | .time_local, .request' access.log


▪️ Вывод значений без кавычек (флаг -r):


jq -r '.request' access.log


🌟 Дополнительные переменные для логов. К стандартным переменным можно добавить полезные параметры:

Метрики запроса и прокси-серверов:

$request_length – длина запроса
$upstream_addr – адрес upstream-сервера
$upstream_status – HTTP-ответ от upstream
$upstream_response_time – время ответа backend'а
$upstream_connect_time – время установки соединения с upstream
$upstream_header_time – время получения HTTP-заголовков от upstream


Безопасность и TLS:

$server_name – имя виртуального хоста
$ssl_protocol – используемый TLS-протокол
$ssl_cipher – алгоритм шифрования


#Nginx #JSON

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍2
🚫 Как полностью удалить OneDrive из Windows 10/11

OneDrive предустановлен во всех версиях Windows 10 и 11, интегрирован в систему и запускается автоматически при входе в систему. По умолчанию OneDrive устанавливается отдельно для каждого пользователя в его профиле: %localappdata%\Microsoft\OneDrive. Если OneDrive вам не нужен, его можно удалить, но важно сделать это для всех пользователей, включая будущие учетные записи.

▪️ Удаление OneDrive для всех пользователей

1️⃣ Остановите и удалите клиент OneDrive:


taskkill /f /im OneDrive.exe

%SystemRoot%\System32\OneDriveSetup.exe /uninstall


2️⃣ Удалите остатки файлов и папок:


rd "%UserProfile%\OneDrive" /Q /S
rd "%LocalAppData%\Microsoft\OneDrive" /Q /S
rd "%ProgramData%\Microsoft OneDrive" /Q /S


3️⃣ Очистите записи в реестре:


reg delete "HKEY_CURRENT_USER\Software\Microsoft\OneDrive" /f
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OneDrive" /f


▪️ Запрещение установки OneDrive для новых пользователей. Чтобы OneDrive не устанавливался автоматически при создании новых учетных записей, нужно удалить соответствующую запись из реестра шаблонного профиля Default:


reg load "HKU\Default" "C:\Users\Default\NTUSER.DAT"
reg delete "HKEY_USERS\Default\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "OneDriveSetup" /f
reg unload "HKU\Default"


Теперь новые пользователи на этом компьютере не получат OneDrive в своих профилях.

#windows #OneDrive

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍293🔥3
👀 Контроль сетевого трафика в Linux с помощью eBPF и XDP

Современные нагрузки требуют высокой производительности сетевых решений, а классические инструменты вроде iptables и nftables уже не всегда справляются. Здесь на сцену выходят eBPF (Extended Berkeley Packet Filter) и XDP (eXpress Data Path) - технологии для глубокой фильтрации и анализа трафика прямо в ядре Linux.

🌟 Что это такое?

eBPF - механизм в ядре Linux, позволяющий безопасно выполнять программы в режиме ядра без изменения исходного кода. Используется для фильтрации пакетов, мониторинга, трассировки и профилирования системы.

XDP - подсистема ядра Linux, основанная на eBPF, позволяющая обрабатывать пакеты на самом раннем этапе их поступления в систему (на уровне драйвера сетевой карты).


▪️ Как использовать eBPF и XDP для анализа трафика? Для работы с eBPF можно использовать утилиты bpftool и bcc (BPF Compiler Collection).

1️⃣ Установим необходимые пакеты:


sudo apt install -y bpfcc-tools linux-headers-$(uname -r) #на Debian/Ubuntu
sudo dnf install -y bpftool bcc #на RHEL/Fedora


2️⃣ Запустим мониторинг пакетов с eBPF:


sudo /usr/sbin/tc qdisc add dev eth0 clsact
sudo /usr/sbin/tc filter add dev eth0 egress bpf direct-action obj xdp_prog_kern.o


Это позволит анализировать выходящий трафик с интерфейса eth0.

3️⃣ Фильтрация пакетов с помощью XDP. Простейший eBPF-программы для отбрасывания пакетов (пример на C):


#include <linux/bpf.h>
int xdp_drop(struct __sk_buff *skb) {
return XDP_DROP; // Отбрасываем пакет
}


Компилируем и загружаем программу в XDP:


clang -O2 -target bpf -c xdp_drop.c -o xdp_drop.o
sudo ip link set dev eth0 xdp obj xdp_drop.o


Теперь весь трафик на интерфейсе eth0 будет блокироваться на уровне драйвера.

⭐️ Где применяют eBPF и XDP?

DDoS-защита - можно отбрасывать вредоносный трафик без нагрузки на процессор.
Балансировка нагрузки - построение L4-L7 балансировщиков без iptables.
Мониторинг сети - сбор детальной статистики по пакетам в реальном времени.


Примеры таких решений: Cilium, Suricata, Falco, Katran (Facebook), XDP Firewall.

#linux #eBPF #XDP

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
⬇️ Развертывание DHCP-сервера на Linux с Kea

Если вам нужен гибкий и высокопроизводительный DHCP-сервер для управления IP-адресами в сети, стоит обратить внимание на Kea DHCP от ISC. В отличие от классического ISC DHCP, Kea предлагает:

Динамическое обновление конфигурации без перезапуска сервера
Поддержку API RESTful для управления в реальном времени
Работу с базами данных (MySQL, PostgreSQL, Cassandra)
Поддержку DHCPv4 и DHCPv6


Для примера, развернем DHCP-сервер Kea на Ubuntu/Debian и настроим его на раздачу IP-адресов.

⚙️ Установка Kea DHCP. На Debian/Ubuntu устанавливаем Kea из официальных репозиториев:


sudo apt update && sudo apt install -y isc-kea-dhcp4-server


На CentOS/RHEL Kea можно установить через EPEL:


sudo dnf install -y epel-release
sudo dnf install -y kea


▪️ Настройка DHCP-сервера Kea. Файл конфигурации Kea для DHCPv4: /etc/kea/kea-dhcp4.conf

Пример минимальной конфигурации:


{
"Dhcp4": {
"interfaces-config": {
"interfaces": [ "eth0" ]
},
"subnet4": [
{
"subnet": "192.168.1.0/24",
"pools": [
{ "pool": "192.168.1.100 - 192.168.1.200" }
],
"option-data": [
{ "name": "routers", "data": "192.168.1.1" },
{ "name": "domain-name-servers", "data": "8.8.8.8, 8.8.4.4" }
]
}
]
}
}


eth0 - сетевой интерфейс, с которого раздаются адреса
192.168.1.100 - 192.168.1.200 - пул IP-адресов
192.168.1.1 - шлюз по умолчанию
8.8.8.8, 8.8.4.4 - DNS-серверы


▪️ Запуск и управление Kea DHCP. После настройки запускаем Kea DHCP:


sudo systemctl enable --now kea-dhcp4
sudo systemctl status kea-dhcp4


Проверяем логи для диагностики:


journalctl -u kea-dhcp4 --no-pager -n 50


Если нужно перезапустить DHCP-сервер после изменения конфигурации:


sudo systemctl restart kea-dhcp4


▪️ Проверка работы DHCP. Проверяем, какие клиенты получили IP-адреса:


cat /var/lib/kea/dhcp4.leases


Запросим новый IP с клиента:


dhclient -v eth0


Если адрес не выдается, смотрим активные порты Kea:


sudo ss -tulpn | grep kea


⭐️ Дополнительные возможности Kea

Подключение к MySQL или PostgreSQL для хранения аренды IP
Настройка статических IP-адресов для MAC-адресов
Работа с DHCPv6 для IPv6-сетей
Динамическое управление через API RESTful


#linux #DHCP #Kea

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍3
Раз уж залезла, глянь ошибку из лога, может чего подскажешь..

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
1😁40🍾32
🔼 Тюнинг сетевого стека Linux

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

▪️ Полезные параметры sysctl

📍 Максимум осиротевших сокетов (TCP orphans). Каждый такой сокет съедает ~64 КБ памяти. Увеличиваем лимит, если сервер мощный:


net.ipv4.tcp_max_orphans = 65536


📍 Сокращаем FIN-WAIT-2. Позволяет быстрее очищать соединения, которые "зависли":


net.ipv4.tcp_fin_timeout = 10


📍 Настройка KeepAlive-проверок. Полезно для "выметания" неактивных соединений:


net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5


📍 Диапазон локальных портов. Расширяем диапазон для исходящих соединений:


net.ipv4.ip_local_port_range = 10240 65535


📍 Увеличиваем очередь входящих соединений. Особенно важно на серверах с высокой нагрузкой:


net.core.somaxconn = 16384


📍 Буферы по умолчанию. Прокачиваем rmem и wmem для эффективной работы сокетов:


net.core.rmem_default = 851968
net.core.wmem_default = 851968
net.core.rmem_max = 12582912
net.core.wmem_max = 12582912


📍 Конфигурация TCP Congestion Control. Выбираем алгоритм, подходящий под вашу нагрузку. По умолчанию:


net.ipv4.tcp_congestion_control = cubic


📍 Отключаем TCP syncookies. Если нет необходимости в защите от SYN-флудов, можно отключить:


net.ipv4.tcp_syncookies = 0


📍 Включаем защиту от TIME_WAIT атак. Обязательно при большом количестве соединений:


net.ipv4.tcp_rfc1337 = 1


📍 Безопасность ICMP и redirect’ов. Для серверов, которые не являются маршрутизаторами:


net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0


Дополнительно - игнорировать ICMP echo-запросы (ping):


net.ipv4.icmp_echo_ignore_all = 1


❗️ Стоит учитывать

Параметры вроде tcp_mem, tcp_rmem, tcp_wmem зависят от объема оперативной памяти и автоматически настраиваются при загрузке. Их можно регулировать вручную при необходимости, но в большинстве случаев дефолтных значений достаточно.


#linux #sysctl #TCP

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥64
🟣 Кто и что устанавливал в системе за последние 7 дней

Если нужно быстро узнать, какие приложения, обновления или MSI-пакеты были установлены или удалены на Windows-системе за последнюю неделю - поможет встроенный журнал Reliability Monitor и небольшой PowerShell-скрипт.

Скрипт вытащит:

Установку/удаление MSI пакетов
Установку/удаление приложений из Microsoft Store
Установленные обновления Windows
Пользователя, от имени которого происходили действия


▪️ Вот сам скрипт:


$DaysAgo = (Get-Date).AddDays(-7)
$RealiabilityFilter = "TimeGenerated > '$DaysAgo' and (SourceName='Microsoft-Windows-WindowsUpdateClient' or SourceName='MsiInstaller')"

Get-CimInstance -ClassName Win32_ReliabilityRecords -Filter $RealiabilityFilter |
Select-Object TimeGenerated, ProductName, User, Message |
Out-GridView


Скрипт использует данные из журнала Win32_ReliabilityRecords и отфильтровывает события только по установке/удалению софта. Отображение в Out-GridView - удобно и наглядно для быстрого анализа.

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

#windows #audit #security

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
🛡 Отказоустойчивый DNS

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

🌟 Архитектура:

Bind9 отвечает за авторитетные зоны — внутренние домены, PTR-записи, сервисные SRV и т.д.
Unbound обрабатывает внешние запросы (Google, GitHub, NTP и прочее), кеширует и защищает от DNS-рекурсии.

Между ними можно использовать dnsdist для балансировки и DDoS-защиты (опционально).
Обе службы работают на разных портах (например, Bind на 1053, Unbound на 53).


⚙️ Настройка Bind9 (авторитетный). Устанавливаем:


sudo apt install bind9


Конфигурация зоны:


zone "corp.lan" {
type master;
file "/etc/bind/zones/db.corp.lan";
allow-query { any; };
};


Слушаем нестандартный порт:


options {
listen-on port 1053 { any; };
recursion no;
};


⚙️ Настройка Unbound (рекурсивный + прокси к Bind9). Устанавливаем:


sudo apt install unbound


Базовый unbound.conf:


server:
interface: 0.0.0.0
access-control: 192.168.0.0/16 allow
verbosity: 1

# Кеширование и защита
cache-max-ttl: 86400
hide-identity: yes
hide-version: yes

# Проксирование запросов во внутренние зоны на Bind
local-zone: "corp.lan." transparent

forward-zone:
name: "corp.lan"
forward-addr: 127.0.0.1@1053


▪️ Отказоустойчивость. Устанавливаем второй DNS-сервер (с таким же конфигом Bind + Unbound).

Прописываем оба IP-адреса на клиентах или в DHCP:


DNS1: 192.168.1.10
DNS2: 192.168.1.11


Используем keepalived или VRRP для виртуального IP, если хотим активный кластер.

▪️ Безопасность и дополнения: Активируйте DNSSEC в Unbound.

1. Используйте dnsdist для фильтрации, балансировки и rate-limit.
2. Следите за логами (/var/log/syslog или systemd-journald).

#DNS #Bind9 #Unbound

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🖥 Секреты удобной работы в терминале

Если вы проводите много времени в терминале - переход на zsh и настройка Oh My Zsh может серьёзно упростить и ускорить вашу работу. Это не просто замена bash, а настоящий рабочий инструмент с автодополнением, подсветкой синтаксиса, git-индикацией и кучей других плюшек.

⚙️ Установка Zsh и Oh My Zsh


sudo apt install zsh # или brew install zsh на macOS
chsh -s $(which zsh) # сделаем zsh шеллом по умолчанию


⚙️ Установка Oh My Zsh:


sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"


▪️ Темы и кастомизация. Тема "agnoster" или "powerlevel10k" - удобная и информативная, особенно для работы с Git.

Powerlevel10k:


git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k


И укажите в .zshrc:


ZSH_THEME="powerlevel10k/powerlevel10k"


🌟 Полезные плагины Oh My Zsh. В .zshrc:


plugins=(git z sudo zsh-autosuggestions zsh-syntax-highlighting)


git - алиасы вроде gst (git status), gco (git checkout)
z - умное перемещение по папкам (находит нужную по частичному совпадению)
sudo - быстрое добавление sudo при повторе команды с ESC+ESC
zsh-autosuggestions - автоподсказки по истории
zsh-syntax-highlighting - подсветка ошибок до нажатия Enter


🌟 Полезные фишки и алиасы. Автодополнение для ssh, kubectl, docker, git

Автоисправление команд (grpe → grep)

Алиасы можно описывать прямо в .zshrc:


alias gs='git status'
alias ll='ls -alF'
alias ..='cd ..'


#zsh #linux #terminal

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👎2😁1💊1
🤔🤔

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
😁29👎7🔥2🤔2
📱 Hadolint - линтер, который реально помогает

Если вы регулярно пишете Dockerfile'ы, следует добавить в свой арсенал Hadolint - это линтер, который проверяет как синтаксис, так и best practices. Он поможет выявить ошибки, неточности и неочевидные нюансы на этапе написания. В том числе - проверит shell-команды с помощью правил из ShellCheck.

Hadolint можно использовать:

Локально (через Docker или бинарник)
Через онлайн-версию

▪️ Пример 1. Go + Alpine


FROM golang:1.22 AS build
WORKDIR /app
COPY . .
RUN go mod tidy && \
CGO_ENABLED=0 GOOS=linux go build -o app .

FROM alpine:3.19
RUN apk add --no-cache ca-certificates
WORKDIR /root/
COPY --from=build /app/app .
CMD ["./app"]


Проверка:


docker run --rm -i hadolint/hadolint < Dockerfile


Вывод Hadolint:

DL3007: Не используйте latest, всегда указывайте версию (например, alpine:3.19)
DL3018: Указывайте конкретные версии пакетов при apk add - это улучшает воспроизводимость сборки

▪️ Пример 2. Debian + Apache


FROM debian:bookworm
RUN apt-get update && \
apt-get install -y --no-install-recommends apache2 && \
apt-get clean && rm -rf /var/lib/apt/lists/*
EXPOSE 80 443
VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"]
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]


Hadolint замечает:

DL3008: Указывайте точные версии пакетов (например, apache2=2.4.57-1)
DL3009: Чистите списки apt-пакетов после установки
DL3015: Используйте --no-install-recommends, чтобы не тащить лишнее

🌟 Зачем это нужно?

latest, без версий, без очистки - всё это может привести к нестабильной сборке. Особенно при CI/CD. Линтер Hadolint позволяет быстро выявить подобные места, не дожидаясь багов в проде.

⚙️ Установка локально:


brew install hadolint # macOS
sudo apt install hadolint # Ubuntu (через snap или вручную)


Или через Docker:


docker run --rm -i hadolint/hadolint < Dockerfile


Рекомендации Hadolint в большинстве случаев точны, понятны и логичны. Если вы ещё не используете его - самое время начать.

#Docker #Hadolint

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🔗 Как обновляются групповые политики в Windows и как применить их немедленно

По умолчанию настройки GPO (Group Policy Objects) в Windows обновляются в следующих случаях:

📍 при загрузке компьютера,
📍 при входе пользователя в систему,
📍 и в фоновом режиме каждые 90–120 минут с небольшой случайной задержкой.

Обновление происходит только если служба Group Policy Client (gpsvc) обнаружит изменение версии политики. Номер версии хранится в файле:


<Имя_контроллера_домена>\SYSVOL\<домен>\Policies\<GUID>\gpt.ini


Хотите применить изменения немедленно на удалённой машине? Используйте один из способов:

▪️ Через GUI: Откройте gpmc.msc (Group Policy Management Console)

1. Кликните правой кнопкой по нужному OU (организационному подразделению)
2. Выберите "Group Policy Update"

▪️ Через PowerShell:


Invoke-GPUpdate -Computer "PC01" -RandomDelayInMinutes 0


Команда принудительно обновит политики на удалённой системе без задержек.

❗️ Для выполнения PowerShell-команды нужны соответствующие права и разрешённые WinRM-соединения между клиентом и целевой машиной.

#windows #GPO #GroupPolicy

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🤔1🤡1
🗃 Скрываем лишние файлы в SMB

Одна из полезных, но редко используемых функций SMB - Access-Based Enumeration (ABE). Она скрывает файлы и папки, к которым у пользователя нет доступа, делая сетевые шары более удобными и безопасными.

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

🔘 Включение ABE

Windows Server (SMB):


Get-SmbShare DOCS | Set-SmbShare -FolderEnumerationMode AccessBased


Samba (Linux, FreeBSD). Добавьте в smb.conf:


hide unreadable = Yes


Скрытие самих расшаренных папок:


access based share enum = Yes


#SMB #server

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🗿4
Понаберут с улицы..

#юмор

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23😁8🤡63😢2