Linux: Системный администратор


Гео и язык канала: Россия, Русский
Категория: Технологии


Здесь вы найдете полезные советы, практические материалы и интересные инсайты по администрированию Linux. Погружаемся в мир команд, скриптов и серверов вместе! 🚀
Авторский канал действующего админа 👨🏼‍💻

Связанные каналы

Гео и язык канала
Россия, Русский
Категория
Технологии
Статистика

🔧 Отключаем IPv6 правильно через sysctl — без костылей и багов

В некоторых окружениях (legacy-сети, специфичные firewall policy, старые софты) требуется полностью отключить IPv6. Многие делают это через GRUB (ipv6.disable=1), но это не всегда корректно: интерфейсы всё равно могут получать link-local адреса (fe80::/10), что приводит к неожиданностям.

📌 Надёжный способ — через sysctl:

cat << 'EOF' > /etc/sysctl.d/99-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF

sysctl --system

🔥 Не забудь:
- Если у тебя кастомные интерфейсы (eth0, ens33, и т.д.) — проверь их через sysctl net.ipv6.conf.<iface>.disable_ipv6.
- Также удали ::1 из /etc/hosts, если не нужен loopback IPv6.

📍 Когда применять:
– нет поддержки IPv6 на маршрутизаторах/файрволах;
– жёсткие требования к аудиту/безопасности;
– снижение attack surface.

⚠️ Важно:
Некоторые демоны (например, Postfix, systemd-resolved) могут логировать ошибки при отсутствии IPv6 — проверь логи!

👉 @channel_linux_admin


🔥 Когда tcpdump врёт: ловим только то, что проходит через iptables

Иногда вы запускаете tcpdump, видите трафик — но приложение его не получает. Почему?

📌 tcpdump по умолчанию работает на уровне интерфейса, а не IP-стека. Он видит весь трафик — даже тот, что будет дропнут iptables.

🛠 Как посмотреть только то, что прошло фильтрацию iptables?

1. Создаём временный NFLOG-правилo:

iptables -I INPUT -p tcp --dport 22 -j NFLOG --nflog-group 1

2. Слушаем лог-группу с tcpdump:

tcpdump -i nflog:1 -nn -vv

3. Потом удалим правило:

iptables -D INPUT -p tcp --dport 22 -j NFLOG --nflog-group 1

📎 Что происходит?
Правило направляет пакеты, которые дошли до этой цепочки, в NFLOG. А tcpdump уже читает их после обработки iptables.

✅ Когда применять:
— Отладка проблем доступа
— Проверка, дропает ли iptables нужный трафик
— Точная диагностика без "шума"

⚠️ Не забудьте убрать правило после отладки, иначе лог будет засоряться.

Сохрани, пригодится. Особенно когда "всё открыто, но не работает" 😉

👉 @channel_linux_admin


Хотите быстро проверить, через какой интерфейс и IP ваш Linux-сервер выйдет к определённому адресу, без реального подключения?

Решение:
Используйте ip route get — лёгкая команда для диагностики маршрутизации:

ip route get 8.8.8.8

Что покажет:
- Какой IP-адрес будет использоваться для исходящего соединения;
- Какой сетевой интерфейс (dev eth0 и т.д.);
- Какой шлюз (via) задействован.

Пример вывода:
8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.10 uid 0

Пояснение:
- Полезно для диагностики проблем с маршрутизацией, VPN, балансировкой каналов.
- Проверка без реальной отправки пакетов: не создаёт нагрузку и не требует открытых портов.

Бонус:
Проверить маршрут сразу для нескольких целей:
for ip in 8.8.8.8 1.1.1.1; do ip route get $ip; done

Важно:
Если у вас настроены policy-based routing (PBR) или VRF, команда тоже отразит их влияние!

Сохрани, пригодится на проде. 🔥

👉 @channel_linux_admin


Как быстро сбросить сетевой интерфейс без перезапуска системы

Иногда после правки конфигурации сети нужно *мягко* применить изменения без ребута. Особенно на продакшене.

🔧 Простейший способ — с помощью ip:

ip link set eth0 down
ip addr flush dev eth0
ip link set eth0 up

Что делают эти команды:
- set down — переводит интерфейс в неактивное состояние.
- flush — очищает IP-адреса интерфейса.
- set up — активирует интерфейс заново.

Когда применять:
🔹 После ручной настройки IP через ip/ifconfig;
🔹 После внесения изменений в /etc/network/interfaces, Netplan, systemd-networkd и пр.;
🔹 Для быстрой переинициализации интерфейса без влияния на другие службы.

⚡ Трюк: если используется DHCP-клиент (dhclient), можно сразу запросить новый IP:

dhclient -r eth0 && dhclient eth0

(первое — release, второе — новый запрос)

Важно:
- Для виртуальных интерфейсов (vlan, bridge) могут быть дополнительные зависимости!
- После flush интерфейс теряет все адреса — убедись, что автоматика подтянет их обратно.

Итог: Безопасный способ быстро перезагрузить сетевой стек локально.

Сохрани, пригодится! 🚀


🔐 Fail2Ban для защиты SSH: настройка за 2 минуты

SSH — первая цель сканеров и брутфорсеров. Один fail2ban-джейл — и атаки больше не проблема.

🛠 Минимальная настройка fail2ban для SSH:

1. Установи fail2ban (если ещё нет):

apt install fail2ban # Debian/Ubuntu
dnf install fail2ban # RHEL/AlmaLinux

2. Создай кастомную конфигурацию:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

3. Включи и настрой SSH-защиту в jail.local:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log # или /var/log/secure на RHEL
maxretry = 5
bantime = 1h
findtime = 10m

4. Перезапусти fail2ban:

systemctl restart fail2ban

5. Проверка работы:

fail2ban-client status sshd

👀 Что это даёт:
– Блокирует IP после нескольких неудачных попыток входа.
– Автоматическая защита от брутфорса 24/7.
– Простая интеграция с iptables/nftables.

💡 Трюк: Используй bantime = 3600m и recidive-джейл для агрессивных нарушителей.


Диагностика “висящих” TCP-соединений: как быстро найти виновника

Когда приложение “подвисает”, а сеть вроде работает — проверь состояние TCP-соединений. Часто помогает ss.

Команда:

ss -o state time-wait '( sport = :http or sport = :https )'

Покажет TCP-соединения в TIME-WAIT на 80/443 портах. Много? Возможно, приложение не успевает освобождать сокеты.

А если хочется увидеть, кто держит ESTABLISHED соединения:

ss -tp state established

Флаг -p покажет PID/имя процесса — удобно для отладки.

Ограничь количество TIME-WAIT через sysctl, если сервер под нагрузкой:

sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_fin_timeout=15

Когда использовать:
– Приложение “висит” при подключении;
– Подозрение на сетевое истощение ресурсов;
– Нужна быстрая отладка без лишнего софта.

Сохрани, пригодится в бою.


🔥 WireGuard через systemd: автоподключение при старте + автоматический рестарт

WireGuard крут, но не всегда подключается сам при перезагрузке. Особенно, если интерфейс поднимается раньше, чем сеть. Решение — systemd-сервис с зависимостями.

📌 Настраиваем правильный автозапуск

1. Создай кастомный systemd unit:
sudo systemctl edit wg-quick@wg0

2. Вставь следующее:
[Unit]
Description=WireGuard via wg-quick for %i
After=network-online.target
Wants=network-online.target

[Service]
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

3. Перезапусти демон systemd:
sudo systemctl daemon-reexec

4. Включи автозапуск:
sudo systemctl enable wg-quick@wg0

5. Проверь статус:
systemctl status wg-quick@wg0

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


- After=network-online.target гарантирует, что интерфейс поднимется после появления сети.
- Restart=on-failure полезен, если туннель может не подняться с первого раза (например, из-за временного недоступного пира).

⚠️ Без этого юнита туннель часто не поднимается после ребута на headless-серверах.

💡 Совет: проверь DNS внутри туннеля — в wg0.conf можно указать DNS=..., если используешь resolvconf или systemd-resolved.

Сохрани, пригодится


🛡️ Быстрая проверка iptables-правил с логированием трафика

Нужно быстро понять, почему пакет не доходит? Добавь временное логирование в iptables — это упростит отладку.

💡 Шаги:

1. Вставь логирующее правило перед DROP:

iptables -I INPUT -s 192.168.0.100 -j LOG --log-prefix "DROP DEBUG: " --log-level 4

👉 Меняй -s и -j под нужное направление/адрес.

2. Проверь логи (обычно dmesg или syslog):

dmesg | grep "DROP DEBUG"
# или
grep "DROP DEBUG" /var/log/syslog

3. Удалить правило после отладки:

iptables -D INPUT -s 192.168.0.100 -j LOG --log-prefix "DROP DEBUG: " --log-level 4

📌 Зачем и когда:
— Удобно при отладке фаервола, особенно при сложных правилах.
— Можно логировать и FORWARD/OUTPUT.
— Не забудь убрать, чтобы не заспамить логи!

💥 Лайфхак: добавь -m limit чтобы не заливать логи:

-m limit --limit 5/min

🧠 Сохрани, пригодится при разборе сетевых траблов.


⚠️ systemd-networkd и маршруты: частая ошибка с static routes

Если ты настраиваешь сеть через systemd-networkd и вручную прописываешь маршруты, будь внимателен: непрописанный gateway может сломать всё подключение.

📄 Пример .network файла с правильным static route:

[Match]
Name=eth0

[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1

[Route]
Destination=10.10.0.0/16
Gateway=192.168.1.1

🔍 Типичная ошибка:
[Route]
Destination=10.10.0.0/16

❌ Без Gateway или PreferredSource маршрут будет нерабочим или странно себя вести.

📌 Зачем и когда это нужно:
— Когда нужно направить часть трафика (например, к VPN или другим подсетям) в обход основного маршрута.
— systemd сам не всегда умеет «додумать», как доставить пакет, если маршрут не полный.

🧪 Проверь после старта:
networkctl status eth0
ip route show dev eth0

💡Проверяй journalctl -u systemd-networkd — там видно, почему не применились маршруты.

Сохрани, чтобы не отлаживать сеть часами 😬

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin


💡 Как быстро сбросить зависший SSH-сеанс без ожидания таймаута

Иногда SSH-соединение замирает (например, при потере сети), и попытка закрыть его обычным Ctrl+C не работает. Не жди таймаута — есть правильный способ разорвать зависший сеанс.

🔧 Решение: спец-последовательность OpenSSH


Нажми Enter, затем ~. (тильда + точка) — и SSH сразу завершится:

<Enter>~.

🔍 Как это работает

~. — escape-последовательность, встроенная в OpenSSH-клиент. Работает только в начале новой строки.

👉 Другие полезные комбинации:
- ~? — список доступных escape-команд
- ~# — переслать локальный порт (вручную)
- ~& — фоновый режим

⚠️ Работает только в интерактивных SSH-сессиях, не в скриптах.

🧠 Зачем знать:
- Мгновенное закрытие зависших сессий
- Удобно при обрывах VPN/моб. сети
- Не нужен kill -9 на терминале

Сохрани, пригодится в дороге или на выезде 🚀


🎉 Поздравляем с Днём системного администратора!

Фразы, которые сисадмин говорит вслух:

— Сейчас посмотрим.
— Уже почти готово.
— Попробуйте ещё раз.

И фразы, которые он думает:

— Перезагрузите уже наконец...
— Нет, принтер не сломан.
— Да, пароль действительно нужно вводить правильно.

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


💥 WireGuard: Быстрая настройка через systemd без ifupdown и Netplan

Хочешь минимализм без танцев с бубном? Вот как быстро поднять WireGuard-туннель чисто через systemd — особенно удобно на серверах без NetworkManager.


📌 1. Создай конфиг /etc/wireguard/wg0.conf:

[Interface]
Address = 10.0.0.1/24
PrivateKey = <your_private_key>
ListenPort = 51820

[Peer]
PublicKey = <peer_pub_key>
AllowedIPs = 10.0.0.2/32

⚠️ Убедись, что chmod 600 wg0.conf — приватный ключ должен быть защищён.


📌 2. Активируй через systemd:

systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0

👉 Это создаст интерфейс wg0 и применит всё из конфига.


📌 3. Проверка статуса:

wg show

Покажет активные пиры, handshake, трафик и т.д.


💡 Трюк:
Если используешь systemd-networkd, можешь вместо wg-quick собрать туннель через .netdev и .network — это даёт больше контроля и не требует wg-quick.


🧠 Когда использовать:
– Минималистичные серверы без NM и Netplan
– Контейнеры и чёткие systemd-based системы
– Желание поднять VPN при boot без сторонних скриптов

Сохрани, пригодится 😉


🖥 Мини-NAS на NanoPi M4 (статья на Eng)

Автор собрал домашний NAS на базе NanoPi M4 с минимальными затратами и при этом сохранил функциональность. В статье пошагово описывается:

- выбор железа и корпуса;
- подключение SATA-адаптера для HDD;
- настройка Armbian;
- использование OpenMediaVault для управления;
- оптимизация питания и охлаждения.

По сути, это недорогая альтернатива готовым NAS-решениям, где можно получить контроль и гибкость за счёт DIY-подхода. Отличный вариант для тех, кто хочет поднять личное хранилище на SBC и при этом разобраться в деталях настройки.

https://cgomesu.com/blog/Nanopi-m4-mini-nas/


📌 Шпаргалка по Linux


📂 Структура каталогов Linux 🐧

Каждый файл и каталог в Linux начинается с / (корневой каталог).

🔹 /bin – Основные бинарные файлы команд

🖥 /boot – Файлы загрузки системы

🖧 /dev – Файлы устройств

⚙️ /etc – Конфигурационные файлы системы

🏠 /home – Домашние каталоги пользователей

📚 /lib – Общие библиотеки

💿 /media – Подключаемые носители (CD, USB)

🔌 /mnt – Временные точки монтирования

📦 /opt – Дополнительные пакеты программ

📊 /proc – Виртуальная файловая система с информацией о процессах

🏡 /root – Домашняя директория суперпользователя root

📂 /run – Данные, используемые запущенными программами

⚡ /sbin – Системные бинарные файлы

🗄 /srv – Данные, обслуживаемые системой (например, веб-сервер)

🔍 /sys – Виртуальная файловая система с информацией о системе

🗑 /tmp – Временные файлы

📁 /usr – Статические файлы пользователей (библиотеки, программы)

♻ /var – Данные, которые часто изменяются (логи, кеш)


🔒 Как быстро заблокировать IP через nftables без перезапуска правил

Иногда нужно срочно отрубить наглого сканера или атакующего IP, но без пересборки всего firewall-правила. Вот как это делается динамически, через nftables.

🔹 Шаг 1: создаём таблицу и цепочку (если ещё нет)
nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; }

🔹 Шаг 2: создаём сет blocked_ips
nft add set inet filter blocked_ips { type ipv4_addr \; flags timeout \; }> timeout позволяет задавать TTL для блокировок.

🔹 Шаг 3: добавляем правило на блокировку из сета
nft add rule inet filter input ip saddr @blocked_ips drop

🔹 Шаг 4: баним IP с TTL 1 час
nft add element inet filter blocked_ips { 192.0.2.123 timeout 1h }


💡 Зачем это?
— Блокировка IP на лету, без перезагрузки firewall.
— Удобно использовать в связке со скриптами, fail2ban и даже вручную.
— Работает быстро и безболезненно для остальных правил.

🛑 Best practice: не делай flush ruleset, если используешь stateful блокировку — можно потерять connection tracking и нарушить трафик.


Сохрани, пригодится для быстрой обороны 🔥
А ты так блочишь IP?

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin


🐧 Шпаргалка по перенаправлению потоков в Linux, которую стоит сохранить

Работаете в терминале каждый день? Тогда понимание перенаправления потоков ввода и вывода сэкономит вам массу времени при написании скриптов и администрировании.

Что важно помнить:

🔹 0 — STDIN (стандартный ввод)
< file.txt - читать данные из файла.

🔹 1 — STDOUT (стандартный вывод)
> file.txt - записать вывод в файл.
>> file.txt - добавить в конец файла.

🔹 2 — STDERR (стандартный поток ошибок)
2> errors.log - сохранить только ошибки.

💡 Самые полезные комбинации:

command > output.log
Сохранить обычный вывод.

command 2> errors.log
Сохранить только ошибки.

command > output.log 2>&1
Объединить стандартный вывод и ошибки в один файл.

command > /dev/null 2>&1
Полностью скрыть любой вывод команды.

⚠️ Важно: порядок имеет значение!

command > /dev/null 2>&1

✅ Скрывает всё.

Но:

command 2>&1 > /dev/null

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

📌 Сохраняйте шпаргалку - она пригодится каждому Linux-администратору, DevOps-инженеру и разработчику, который регулярно работает с Bash.


Команда findmnt

Это простая утилита командной строки, используемая для отображения списка подключенных файловых систем или поиска файловой системы в /etc/fstab, /etc/mtab или /proc/self/ mountinfo.

Для отображения списка подключенных файловых систем, выполните в командной строке следующую команду.
По умолчанию команда findmnt отображает файловые системы в древовидном формате.
# findmnt

Чтобы отобразить информацию в виде обычного списка, используйте параметр -l, как показано ниже
# findmnt -l

Можно выбрать отображение файловых систем только определенного типа, используя параметр командной строки -t, за которым следует тип файловой системы, такой как XFS или EXT4.
# findmnt --fstab -t xfs или # findmnt --fstab -t ext4

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

Например, следующая команда отображает все файловые системы /etc/fstab, где каталогом точки монтирования является /mnt/external/disk2.
# findmnt --fstab /mnt/external/disk2 # this prints bind mounts where /mnt/external/disk2 is a source
или # findmnt --fstab --target /mnt/external/disk2

Выводим все файловые системы /etc/fstab и преобразовываем теги LABEL = и UUID = в реальные имена устройств, добавьте ключ – –evaluate
# findmnt --fstab --evaluate

Отобразить только точку монтирования, в которой смонтирована файловая система с меткой «/ boot» или «/», используйте следующую команду.
# findmnt -n --raw --evaluate --output=target LABEL=/boot или # findmnt -n --raw --evaluate --output=target LABEL=/

Findmnt также позволяет отслеживать действия по монтированию, размонтированию, перемонтированию и перемещению каталога, например, в /mnt/test.
# findmnt --poll --mountpoint /mnt/test

Если вы хотите больше информации в выводе, используйте ключ –verbose.
# findmnt --real --verbose


Шпаргалка по windows CMD. Список команд cmd windows с описанием

Способы запуска командной строки
Командная строка Windows может быть запущена, как и любое другое стандартное приложение - через Главное меню Windows, с использованием диалога Выполнить (комбинации клавиш Win+R, Win+X), а также с использованием открытия Проводником ярлыка или исполняемого файла C:\WINDOWS\System32\cmd.exe. В результате запуска откроется окно командной строки. Результаты выполнения команд отображаются в окне консоли Windows и нередко зависят от наличия достаточных прав у текущего пользователя. Для выполнения команд в контексте учетной записи Администратора в операционных системах Windows Vista - Windows 10 необходимо использовать режим Запуск от имени Администратора.


SETX - утилита для создания системных переменных
SFC - проверка и восстановление системных файлов Windows
SHARE - просмотр, создание и удаление разделяемых в локальной сети ресурсов
SHIFT сдвиг входных параметров для командного файла
SHUTDOWN - выключение или перезагрузка компьютера
SLEEP - задержка по времени в пакетном файле
SLMGR - управление лицензированием программного обеспечения Windows
SORT - сортировка строк в текстовом файле
START - запуск приложения или командного файла
STORDIAG - диагностика системы хранения данных в Windows 10
SUBST - назначение (отмена назначения) каталогу буквы диска
SxSTrace - диагностическое средство трассировки компонент системы
SYSTEMINFO - отображение информации о системе
TAKEOWN - изменение владельца файла или каталога
TAR - архивирование данных архиватором tar в Windows 10
TASKKILL - завершение процессов на локальной или удаленной системе.
TASKLIST - отображение списка выполняющихся приложений и служб Windows
TIME - отображение и установка системного времени
TELNET - telnet-клиент Windows
TFTP - TFTP-клиент Windows
TIMEOUT - задержка в пакетных файлах
TITLE - изменение заголовка окна CMD.EXE
TRACERT - трассировка маршрута к удаленному узлу
TREE - отображение структуры каталога в графическом виде
TSCON - подключение к сессии удаленного рабочего стола (RDP).
TSDISCON - отключение сессии удаленного рабочего стола (RDP).
TSKILL - завершение процессов, адаптированное для среды сервера терминалов (RDP).
TYPE - вывод на экран содержимого текстового файла
TypePerf - вывод сведений о производительности на экран или в журнал
TZUTIL - управление часовыми поясами в среде Windows
VER - отображение версии операционной системы
VERIFY - управление режимом проверки записываемых файлов
VOL - вывод данных метки тома
VSSADMIN - администрирование службы теневого копирования томов.
W32TM - управление службой времени Windows
WAITFOR - организация обмена сигналами между компьютерами
WBADMIN - управление резервным копированием и восстановлением в Windows
WEVTUTIL - управление событиями в Windows
WHERE - определение места расположения файлов
WHOAMI - вывод имени текущего пользователя
WINDIFF - сравнение содержимого файлов
WinMgmt - обслуживание инструментария управления Windows (WMI)
WINRM - удаленное управление Windows из командной строки
WINRS - удаленная командная строка (Remote Shell)
WINSAT - средство проверки производительности Windows
WMIC - выполнение команды WMI в командной строке
WSCollect - получить CAB-файл с копиями журналов Windows 10 на рабочем столе
Wscript - сервер сценариев Windows с графическим интерфейсом
WSL - выполнение команд Linux и конфигурирование параметров подсистемы Windows для Linux (WSL) в Windows 10
WSLconfig - конфигурирование параметров подсистемы Windows для Linux (WSL) в Windows 10
XCOPY - копирование файлов и папок


Что происходит, когда вы вводите в браузер URL-адрес?

Давайте рассмотрим этот процесс пошагово.

Шаг 1. Пользователь вводит в браузер URL и нажимает Enter. Первое, что нам нужно сделать, это преобразовать URL в IP-адрес. Сопоставление обычно хранится в кэше, поэтому браузер ищет IP-адрес в нескольких уровнях кэша: кэше браузера, кэше ОС, локальном кэше и кэше провайдера. Если браузер не смог найти сопоставление в кэше, он обращается к DNS (Domain Name System) resolver для его разрешения.

Шаг 2. Если IP-адрес не удается найти ни в одном из кэшей, браузер обращается к DNS-серверам для выполнения рекурсивного DNS-поиска, пока IP-адрес не будет найден.

Шаг 3. Теперь, когда у нас есть IP-адрес сервера, браузер посылает на него HTTP-запрос. Для безопасного доступа к ресурсам сервера всегда следует использовать протокол HTTPS. Сначала браузер устанавливает TCP-соединение с сервером с помощью трехстороннего рукопожатия TCP. Затем он посылает открытый ключ клиенту. Клиент использует открытый ключ для шифрования сеансового ключа и отправляет его серверу. Сервер использует закрытый ключ для расшифровки сеансового ключа. Теперь клиент и сервер могут обмениваться зашифрованными данными с использованием сеансового ключа.

Шаг 4. Сервер обрабатывает запрос и отправляет ответ. Для успешного ответа код состояния равен 200. Ответ состоит из трех частей: HTML, CSS и Javascript. Браузер анализирует HTML и формирует дерево DOM. Он также анализирует CSS и генерирует дерево CSSOM. Затем он объединяет дерево DOM и дерево CSSOM в дерево рендеринга. Браузер отображает содержимое и показывает его пользователю.

Показано 20 последних публикаций.