Админы, привыкшие к bash и linux, часто недооценивают powershell. А зря - это также неплохая оболочка, которая умеет не только выполнять команды, но и работать с объектами, сервисами и API windows. Ниже несколько полезных сценариев, которые пригодятся, если админите и linux, и windows.
# Процессы по имени
Get-Process | Where-Object { $_.ProcessName -like "*chrome*" }
# Открытые TCP-порты
Get-NetTCPConnection | Where-Object { $_.State -eq "Listen" }
# Найти все *.log файлы и удалить старше 7 дней
Get-ChildItem -Path "C:\Logs" -Filter *.log -Recurse |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } |
Remove-Item -Force
$hosts = "8.8.8.8","1.1.1.1","networkadmin.ru"
foreach ($h in $hosts) {
Test-Connection -ComputerName $h -Count 2 -Quiet |
ForEach-Object { "$h -> $($_ -replace 'True','OK' -replace 'False','Fail')" }
}
# Проверить статус службы
Get-Service -Name "Spooler"
# Перезапустить службу
Restart-Service -Name "Spooler"
Invoke-RestMethod -Uri "https://api.ipify.org?format=json"
# Системная информация
Get-ComputerInfo | Select-Object CsName, WindowsVersion, OsArchitecture
# Диски
Get-PSDrive -PSProvider FileSystem
#powershell #windows
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍2🔥2
Ubuntu давно перешла от классического
/etc/network/interfaces к новому инструменту - netplan. Он появился начиная с ubuntu 17.10 и стал основным способом настройки сетевых интерфейсов.❗️ Netplan - это уровень абстракции для сетевых конфигураций.
Использует YAML-файлы в /etc/netplan/.
Работает через рендереры:
systemd-networkd - для серверов и headless-систем.
NetworkManager - для десктопов.
Позволяет централизованно и декларативно описывать сеть.
Все настройки находятся в
/etc/netplan/*.yaml.По умолчанию обычно есть файл
01-netcfg.yaml или 50-cloud-init.yaml.
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: true
network:
version: 2
renderer: networkd
ethernets:
ens33:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
network:
version: 2
ethernets:
ens33:
addresses:
- 192.168.1.101/24
- 192.168.1.102/24
network:
version: 2
bonds:
bond0:
interfaces: [ens33, ens34]
parameters:
mode: balance-rr
addresses:
- 192.168.1.200/24
gateway4: 192.168.1.1
network:
version: 2
vlans:
vlan100:
id: 100
link: ens33
addresses: [192.168.100.10/24]
После изменения файлов:
sudo netplan apply
Для теста перед применением можно использовать:
sudo netplan try
(дает 120 секунд на подтверждение, если сеть отвалилась - конфиг откатывается).
#linux #netplan
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1
Многие для отправки писем из консоли ставят дополнительные утилиты вроде
mailx или mutt. Но часто этого не нужно - все умеет curl.
curl -v \
--url "smtp://smtp.networkadmin.ru:587" \
--mail-from "admin@networkadmin.ru" \
--mail-rcpt "user@domain.ru" \
--user "admin@networkadmin.ru:MySecurePass" \
--upload-file ~/letter.txt
Пример letter.txt:
From: "Admin" <admin@networkadmin.ru>
To: "User" <user@domain.ru>
Subject: Test mail from curl
Hello from curl!
Заголовки (From, Subject и др.) задаются прямо в файле, и можно указывать любые значения.
Хранить пароль в команде небезопасно. Вместо этого используем ~/.netrc:
machine smtp.networkadmin.ru login admin@networkadmin.ru password MySecurePass
machine smtp.another.ru login user@another.ru password StrongPass123
Теперь команда проще и безопаснее:
curl -v \
--url "smtp://smtp.networkadmin.ru:587" \
--mail-from "admin@networkadmin.ru" \
--mail-rcpt "user@domain.ru" \
--netrc \
--upload-file ~/letter.txt
curl --ssl-reqd ...
curl --ssl ...
curl --url "smtps://smtp.networkadmin.ru" ...
curl --url "smtp://smtp.networkadmin.ru/myhost.domain.ru" ...
#SMTP #curl
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤1
Когда попадаешь на чужой сервер - никогда не знаешь, какие изменения там вносили. Один из быстрых способов разобраться - использовать утилиту
debsums, которая есть в базовых репозиториях:
apt install debsums
❓ Что делает debsums
Утилита сравнивает MD5-суммы файлов из пакетов с эталонными значениями. Это помогает:📍 проверить целостность пакетов;📍 выявить модифицированные файлы;📍 понять, какие стандартные конфиги редактировались.
debsums --config --changed
Результат может быть таким:
/etc/ssh/ssh_config
/etc/default/ssh
То есть видно, что системные конфиги OpenSSH редактировались.
файлы из базовой системы (/etc/default, /etc/pam.d, /etc/grub.d);
юниты systemd;
конфиги сервисов вроде nginx, mariadb, apache2.
#linux #audit
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Проверить все пакеты:
debsums
Показать только измененные файлы:
debsums --changed
Проверять только конфиги (/etc):
debsums --config
Только измененные конфиги:
debsums --config --changed
Показать отсутствующие файлы пакета:
debsums --missing
Игнорировать отсутствующие файлы (проверять только существующие):
debsums --ignore-missing
Проверка конкретного пакета
debsums nginx
Найти какие конфиги менялись руками:
debsums --config --changed
Проверить целостность пакета OpenSSH:
debsums openssh-server
#linux #audit
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Одна из полезных практик на пути к оптимизации - переодически смотреть, а что вообще запускается и что из этого действительно нужно, а что можно отключить. Это будет полезно не только для оптимизации, но и для безопасности тоже.
systemctl list-unit-files --state=enabled
Команда покажет список всех юнитов, которые стартуют при загрузке. Также полезно посмотреть реально работающие процессы:
systemctl list-units --type=service
systemctl disable avahi-daemon.service
Чтобы остановить прямо сейчас:
systemctl stop avahi-daemon.service
Если сервис не нужен вообще - можно замаскировать, чтобы исключить случайный запуск:
systemctl mask avahi-daemon.service
(при этом запуск будет невозможен даже вручную, пока не сделаете unmask).
Примеры сервисов, которые часто не используются:
avahi-daemon.service - autodiscovery (не нужен на сервере)
bluetooth.service - если нет блютуза
ModemManager.service - если не используется мобильный модем
rpcbind.service - устаревший RPC, не нужен большинству
Далее уже зависит конкретно от Ваших потребностей и ситуации.
systemctl list-unit-files --state=enabled
#linux #systemd
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2❤1
ethtool - это не только утилита для просмотра информации о сетевой карте. С ее помощью можно управлять сетевыми интерфейсами в linux: от настройки скорости линка до оптимизации производительности под конкретные задачи.
ethtool eth0
Покажет: скорость, дуплекс, поддержку offload-функций, драйвер, версию прошивки и т.д.
ethtool -s eth0 speed 100 duplex full autoneg off
Можно использовать для тестов или если автосогласование работает некорректно.
Проверить поддержку:
ethtool -k eth0
Отключить контрольную сумму (будет полезно для отладки):
ethtool -K eth0 tx off rx off
Также можно управлять GRO, LRO, TSO и другими функциями.
Проверка кабеля и физики:
ethtool --test eth0
ethtool -t eth0 offline
А команда:
ethtool eth0 | grep detected
покажет, есть ли линк и его скорость.
ethtool -S eth0
Выводит счётчики ошибок, дропов, коллизий. Это помогает отлавливать проблемы на низком уровне.
ethtool -g eth0
Изменить глубину очереди при интенсивной нагрузке:
ethtool -G eth0 rx 4096 tx 4096
ethtool -s eth0 wol d
#network #ethtool
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2
Часто говорят, что при DDoS провайдер отправляет трафик в blackhole. Это не метафора - blackhole (или nullroute) - реальная запись в таблице маршрутизации, которая заставляет ядро молчаливо отбрасывать пакеты к указанному адресу/сети.
ip route add blackhole 10.20.30.40
ip route show | grep blackhole
Теперь все пакеты к 10.20.30.40 будут просто выброшены, без попытки доставить и без ICMP-ответа.
Для сети:
ip route add blackhole 203.0.113.0/24
Для IPv6:
ip -6 route add blackhole 2001:db8::/32
ip route del blackhole 203.0.113.0/24
blackhole - молча дропает пакеты (никаких ICMP).
prohibit - отсылает ICMP administratively prohibited (полезно, если нужно, чтобы источник получил уведомление).
unreachable - возвращает host unreachable.
Команды выглядят похоже:
ip route add prohibit 10.0.0.0/8
ip route add unreachable 10.0.0.0/8
Выбор зависит от сценария: для имитации «исчезновения» хоста - blackhole, чтобы сигнализировать отправителю - prohibit/unreachable.
Провайдеры - при крупном DDoS обычно ставят null-route на адрес жертвы на своей инфраструктуре. Это позволяет дропать трафик до границ сети провайдера, защищая инфраструктуру дальше по пути.
#network #blackhole
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
nftables - это замена iptables, встроенная в ядро linux. Она объединяет фильтрацию, NAT и маршрутизацию в единую подсистему и считается более быстрой и удобной. Разберемся, как можно построить базовую защиту сервера.
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
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤1
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
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Please open Telegram to view this post
VIEW IN TELEGRAM
😁21❤4👌3
Когда разворачиваешь кластер или нужно повторить одинаковые действия на нескольких серверах, очень помогает режим синхронизации панелей в tmux. С ним одна команда сразу выполняется во всех открытых панелях.
apt install tmux
Ctrl+B % - вертикальное разделениеCtrl+B " - горизонтальное разделениеCtrl+B :) вводим:
:setw synchronize-panes
Теперь все, что вводите в активной панели, автоматически дублируется во все остальные.
Отключение производится той же командой.
Если работаете с одним и тем же стендом регулярно, то можно написать конфиг для tmux или скрипт, который сразу запускает сессию и подключает нужные SSH-сессии.
#linux #terminal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12
Иногда необходимо жестко контролировать, какие ядра процесс может занимать, например, чтобы тяжелые задачи не забивали сервер или чтобы критичные сервисы не конкурировали за ресурсы. В linux это решается утилитой
taskset, которая позволяет как изменять affinity уже работающих процессов, так и запускать новые с заданными ограничениями.
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
Теперь процесс гарантированно не займет остальные ядра.
Как работает маска?
Каждое ядро - это один бит:
Ядро Маска
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
taskset -pc 4-5 $(pidof systemd-journald)
А теперь смотрим его маску:
taskset -p $(pidof systemd-journald)
Пример:
pid 412's current affinity mask: 30
Вот и маска.
dd if=/dev/urandom of=/tmp/testfile bs=1M count=200
Запускаем xz только на ядрах 0 и 1 (маска 3):
taskset 3 xz -T2 /tmp/testfile
Смотрим в htop и процесс будет занимать строго эти два ядра.
#linux #taskset
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
Nmap - это не только сканер портов, но и инструмент для быстрой диагностики сети. Небольшая подборка команд, которые часто выручали меня в работе.
nmap -Pn -sS -T4 10.20.1.5
SYN-скан, не пингуем сначала, быстрый тайминг.
nmap -sV --top-ports 100 10.20.1.0/24
Узнаем версии сервисов по 100 самым распространенным портам в подсети.
nmap -p- -T4 10.20.1.5
Сканируем все 65535 TCP-портов.
sudo nmap -sU --top-ports 50 10.20.1.5
UDP требует прав root и больше времени - выбирайте топ-порты.
sudo nmap -A 10.20.1.5
Включает обнаружение ОС, версий, скрипты и traceroute.
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤3😁1
Иногда нужно выяснить, было ли соединение на 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), куда добавляют правила для логирования нужных адресов и портов.
cat /proc/net/nf_conntrack | grep 'dport=22'
По сути, ss и netstat читают данные именно отсюда.
#network
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Три основных механизма, которые могут использоваться в linux:
Где искать системные задания:
/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
Каждый пользователь имеет свой отдельный список задач.
Они более гибкие: умеют запускать сервисы с зависимостями, работать после событий, логировать в journal и даже поддерживают случайные задержки.
Посмотреть список таймеров:
systemctl list-timers
Все таймеры, включая неактивные:
systemctl list-timers --all
Подробнее о конкретном таймере:
systemctl status logrotate.timer
Примеры стандартных таймеров, установленных по умолчанию:
apt-daily.timer
fstrim.timer
logrotate.timer
anacron.timer
Идеален для задач вроде: выполни через 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2