Linux: Системный администратор – Telegram
Linux: Системный администратор
1.92K subscribers
81 photos
8 videos
15 files
25 links
Здесь вы найдете полезные советы, практические материалы и интересные инсайты по администрированию Linux. Погружаемся в мир команд, скриптов и серверов вместе! 🚀

Авторский канал действующего админа 👨🏼‍💻
Download Telegram
Сколько раз вы слышали истории о том, как злоумышленники получали доступ к Kubernetes-кластерам через неправильно настроенные права доступа или незащищённые секреты? В эпоху, когда контейнеризация стала стандартом, безопасность K8s — это уже не опция, а жизненная необходимость для любой серьёзной инфраструктуры.

📅 9 сентября в 20:00 Денис Шишикин проведёт открытый вебинар «Обеспечение безопасности в Kubernetes» в рамках курса «DevOps Advanced». Это практическое занятие для тех, кто хочет защитить свои кластеры от типовых угроз и научиться применять проверенные практики безопасности.

На вебинаре разберут конкретные инструменты и подходы — механизмы контроля доступа через RBAC, ограничение привилегий подов с помощью Pod Security Admission, безопасную работу с секретами через Sealed Secrets. Денис покажет, как сканировать манифесты и кластеры с помощью Trivy и kube-bench.

Особенно полезно будет DevOps-инженерам, системным администраторам и всем, кто работает с Kubernetes в продакшне. Спикер объяснит, какие угрозы характерны для K8s-кластеров и как проводить базовый аудит безопасности ресурсов и конфигураций.

👉 Вебинар бесплатный, но регистрация обязательна — места ограничены: https://vk.cc/cP9DCw

🎁 Каждый участник вебинара получит бонус — скидку на полный курс. Главное — успеть записаться.

Реклама. ООО «Отус онлайн‑образование», ОГРН 1177746618576
🤝1
nftables без fail2ban: динамический бан брутфорса SSH (IPv4/IPv6)

Задача: быстро отстреливать источники, ломающие ssh, без демонов и лог-парсеров. Решение - динамический set с таймаутом + правило, которое само добавляет нарушителя.

Шаги

1. Создаём таблицу, набор и цепочку:


sudo nft -f - <<'EOF'
table inet fw {
set ssh_bad {
type inet_addr
flags timeout
timeout 1h # дефолт для элементов
}

chain input {
type filter hook input priority 0; policy accept;

iif lo accept
ct state established,related accept

# уже занесённых — вон:
ip saddr @ssh_bad drop

# детект частых новых соединений на 22/tcp и бан + дроп:
tcp dport 22 ct state new limit rate over 10/minute \
add @ssh_bad { ip saddr timeout 2h } counter drop
}
}
EOF


2. Ручное управление бан-листом (админ-бан/разбан):


sudo nft add element inet fw ssh_bad { 203.0.113.5 timeout 24h comment "manual" }
sudo nft delete element inet fw ssh_bad { 203.0.113.5 }


3. Наблюдение за изменениями сета (для отладки):


sudo nft monitor set


4. Персистентность (Debian/Ubuntu/RHEL/Alma):


# Проверь синтаксис и атомарно загрузись
sudo nft -c -f /etc/nftables.conf && sudo nft -f /etc/nftables.conf
sudo systemctl enable --now nftables


совет: вынеси блок в /etc/nftables.d/ssh-ban.nft и подключи include в /etc/nftables.conf.


Зачем и когда

- Базовая защита от брутфорса без сторонних сервисов.
- Подходит для edge/VM/контейнер-хостов, где не нужен полный fail2ban.
- Работает в family inet → одна логика и для IPv4, и для IPv6.

Трюки / best practices

- limit rate over срабатывает только при превышении порога - нормальные пользователи не пострадают.
- Не делай flush table inet fw в бою: обнулятся текущие баны (timeouts). Обновляй правила точечно (nft -a list ruleset, затем delete rule handle … / add rule …) или проверяй конфиг -c перед загрузкой.
- Для нестандартных портов поменяй tcp dport 22 на свой.

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

👉 @linux_odmin
👍41
nftables: автобан SSH без fail2ban (динамические set’ы + rate-limit)

Коротко: кладём “шумные” источники в чёрный список прямо из datapath - с авто-истечением и без внешних демонов. Подходит для брутфорса SSH и не только. Основано на limit rate over и динамических set с timeout.

Шаги

1. Таблица/цепь (если ещё нет):


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


2. Два уровня списков: кратковременный “flood” и часовой “blackhole” (v4/v6):


# IPv4
nft add set inet filter ssh_flood4 '{ type ipv4_addr; flags dynamic; timeout 10s; size 131072; }'
nft add set inet filter ssh_blackhole4 '{ type ipv4_addr; flags dynamic; timeout 1h; size 65536; }'

# IPv6
nft add set inet filter ssh_flood6 '{ type ipv6_addr; flags dynamic; timeout 10s; size 131072; }'
nft add set inet filter ssh_blackhole6 '{ type ipv6_addr; flags dynamic; timeout 1h; size 65536; }'


flags dynamic + timeout обязательны для пополнения set’ов из правил; size - защита от OOM. Пример такой схемы есть в man nft.


3. Сначала рубим тех, кто уже в бане:


nft add rule inet filter input ip saddr @ssh_blackhole4 drop
nft add rule inet filter input ip6 saddr @ssh_blackhole6 drop


4. Автобан SSH: >10 новых соединений/сек с одного источника ⇒ бан на 1 час:
(используем добавление в set прямо из правила; limit rate over матчится на превышение порога)


# IPv4
nft add rule inet filter input tcp dport 22 ct state new \
add @ssh_flood4 { ip saddr limit rate over 10/second } \
add @ssh_blackhole4 { ip saddr timeout 1h } drop

# IPv6
nft add rule inet filter input tcp dport 22 ct state new \
add @ssh_flood6 { ip6 saddr limit rate over 10/second } \
add @ssh_blackhole6 { ip6 saddr timeout 1h } drop


Зачем и когда

- Нативная альтернатива fail2ban на L3/L4: реакция в ядре, без лог-парсинга.
- Хорошо для SSH/SMTP/HTTP-auth, анти-скан/скрэпинг, временное “blackhole”.
- Порог/timeout легко подкручивать под трафик.

Полезные трюки / предупреждения

🔎 Диагностика:
nft list set inet filter ssh_blackhole4 и nft monitor ruleset - видно пополнение set’ов.
🎚️ Тюнинг детектора: добавьте burst 3 к limit, чтобы сгладить джиттер (по умолчанию 5 пакетов).
🧹 Снятие бана:
nft delete element inet filter ssh_blackhole4 { 1.2.3.4 } или nft flush set inet filter ssh_blackhole4.
📐 Порядок правил: держите drop по @ssh_blackhole вверху input, раньше любых accept.
🧪 Если хочется “не более N коннектов одновременно”, используйте ct count over N (connlimit).

Сохрани, пригодится. А ты так настраиваешь?

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

👉 @linux_odmin
👍21
🇷🇺 100% российская разработка

INFRAX — платформа all-in-one для управления ИТ-инфраструктурой:

Мониторинг инфраструктуры (ITOM)
Удаленный доступ для сотрудников и привилегированных пользователей
Обработка заявок пользователей (ServiceDesk)
База знаний с разграничением доступа к категориям (публичные и закрытые)
Автоматизация (скрипты и планировщик)
Контроль привилегированных пользователей. Видеозапись сессий RDP/SSH/VNC. (PAM)
Управление доступами. Доступ ко всем корпоративным сервисам через одну учетку (IAM)

БЕСПЛАТНО до 100 пользователей! 🎁

👉 Попробовать INFRAX

Реклама. ООО «АУДИТ-ТЕЛЕКОМ», ОГРН 1167746696776, erid: 2Vtzqv8Ag74
🔒 Автоблокировка SSH-брутфорса через nftables

Даже если у тебя стоит fail2ban - иногда проще и быстрее решить задачу силами самого nftables. Минимум зависимостей, максимум контроля.

Пример: бан по 5 неудачным попыткам за 1 минуту


table inet sshguard {
set ssh_blacklist {
type ipv4_addr
flags timeout
timeout 1h
}

map ssh_counter {
type ipv4_addr : counter
}

chain input {
type filter hook input priority 0;

# Разрешаем локалку и уже забаненных
ip saddr @ssh_blacklist drop

tcp dport 22 ct state new add @ssh_counter { ip saddr } counter
tcp dport 22 ct state new ip saddr @ssh_counter { ip saddr } >= 5 add @ssh_blacklist { ip saddr } drop

# Разрешаем SSH по умолчанию (после фильтра)
tcp dport 22 accept
}
}


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

- ssh_counter считает подключения по IP.
- Если за минуту ≥5 попыток — IP летит в ssh_blacklist на 1 час.
- Всё внутри одного ruleset’а, без демонов.

👉 Подходит для серверов, где хочется минимализма и нет нужды в сложных паттернах от fail2ban.
👉 Но осторожно: банится любой IP, даже если это сканер мониторинга или кривой клиент.

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

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

👉 @linux_odmin
👍2🔥1
🚀 Быстрый способ отследить «зависшие» TCP-сессии

Иногда сервис «висит», но порты открыты и соединения висят в ESTABLISHED. Классика: приложение не отвечает, но сокеты не закрываются.

🔍 Как проверить:


ss -tnao state established 'sport = :22'


-tnao - TCP, numeric, all, с таймерами;
state established - только активные соединения;
'sport = :22' - фильтр по SSH (меняй на свой порт).

👉 Обрати внимание на колонку timer:

on (keepalive,...) - соединение живое;
on (timewait,...) или долго висит без активности → зомби-сессия.

🛠 Что делать:

1. Сбросить проблемные соединения:


ss -K dport = :22 state established


2. Добавить sysctl-тюнинг, чтобы ядро не держало «мертвяков» вечно:


sysctl -w net.ipv4.tcp_keepalive_time=300
sysctl -w net.ipv4.tcp_keepalive_probes=5
sysctl -w net.ipv4.tcp_keepalive_intvl=60


💡 Это помогает, если юзеры «обрываются» без выхода или при нестабильных VPN.

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

👉 @linux_odmin
👍5🔥2
Знакомая картина? Terraform-код превратился в спагетти, где одни и те же ресурсы копируются из проекта в проект, а малейшее изменение требует правок в десятках файлов. Вроде бы Infrastructure as Code должен упрощать жизнь, но на практике часто получается наоборот — код становится неподдерживаемым монстром.

📅 23 сентября в 20:00 Николай Акулов проведёт открытый вебинар «Terraform: паттерны, антипаттерны и модульность» в рамках курса «DevOps Advanced». Это практическое занятие для тех, кто хочет привести свою IaC в порядок и научиться строить масштабируемую инфраструктуру.

На вебинаре разберут принципы эффективного DRY на практике → как правильно использовать модульность для повышения зрелости Terraform-проектов, какие антипаттерны встречаются чаще всего и как их избежать. Николай покажет лучшие практики работы с Terraform и даст рекомендации по оптимизации CI/CD пайплайнов.

Особенно полезно будет DevOps-инженерам, инфраструктурным разработчикам и всем, кто работает с Infrastructure as Code. Спикер поможет научиться создавать переиспользуемые модули, распознавать ошибки проектирования и внедрять процессы автоматизации.

👉 Вебинар бесплатный, регистрация по ссылке — тема критически важная для эффективной работы с инфраструктурой: https://vk.cc/cPwhWd

🎁 Каждый участник вебинара получит бонус — скидку на полный курс. Главное — успеть записаться.

Реклама. ООО «Отус онлайн‑образование», ОГРН 1177746618576
1
🚨 Иногда сетевой интерфейс «пропадает» после перезагрузки, особенно на серверах с systemd-networkd. Причина - интерфейсы могут переименовываться (например, ens3enp0s3).

Фиксируем имя интерфейса:

🔧 Решение через systemd-link

1. Узнаём MAC-адрес:


ip link show


2. Создаём правило:


cat >/etc/systemd/network/10-persistent.link <<EOF
[Match]
MACAddress=52:54:00:ab:cd:ef

[Link]
Name=lan0
EOF


3. Перезапускаем:


systemctl restart systemd-udevd
systemctl restart systemd-networkd


Теперь интерфейс всегда будет называться lan0.

- Удобнее писать unit-файлы, firewall-правила и netplan-конфиги.
- Избежите «сломанных» сетевых настроек после обновления/замены железа.

👉 Можно использовать Driver= или Path= вместо MAC, если карты одинаковые.

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

👉 @linux_odmin
👍91
Перевод статей из серии «Кунг-фу стиля Linux»:

Удобная работа с файлами по SSH
Мониторинг дисковой подсистемы
Глобальный поиск и замена строк с помощью ripgrep
Упрощение работы с awk
Наблюдение за файловой системой
Наблюдение за файлами
Удобный доступ к справке при работе с bash
Великая сила make
Устранение неполадок в работе incron
Расшаривание терминала в браузере
Синхронизация настроек
Бесплатный VPN по SSH
Превращение веб-приложений в полноценные программы
Утилита marker и меню для командной строки
sudo и поворот двух ключей
Программное управление окнами
Организация работы программ после выхода из системы
Регулярные выражения
Запуск команд
Разбираемся с последовательными портами
Базы данных — это файловые системы нового уровня
О повторении кое-каких событий сетевой истории
PDF для пингвинов
Делаем все и сразу
Файловые системы пользовательского пространства теперь доступны и в Windows
Делиться — это плохо
Автоматическое генерирование заголовочных файлов
Простые конвейеры

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

👉 @linux_odmin
👍4🔥3
Короткий совет по Linux 💡

Если вы хотите очистить пустые каталоги, команда find может упростить эту работу:
$ find . -type d -empty -exec rmdir -v {} +
Параметр -type d выполняет поиск каталогов, -empty выбирает пустые каталоги, а -exec rmdir {} выполняет команду rmdir для их удаления.

Команда rmdir гарантирует, что каталог пуст перед его удалением.

В качестве альтернативы, вы также можете использовать эту команду для выполнения той же задачи:
$ find . -type d -empty -delete

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

👉 @linux_odmin
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
NetAlertX — инструмент для мониторинга сетевой активности и обнаружения изменений в подключенных устройствах. Он помогает администратору отслеживать новые устройства в сети, анализировать подключение и уведомлять о любых подозрительных изменениях. Утилита может быть полезной для повышения безопасности сети и оптимизации управления подключениями.

https://github.com/jokob-sk/NetAlertX

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

👉 @linux_odmin
👍6
Управление виртуальными машинами KVM из консоли

# virsh list – показать список запущенных ВМ

# virsh list --all – показать список всех машин (в том числе выключенных)

# virsh shutdown <vm name> — выключить виртуальную машину

# virsh start <vm name> — запустить виртуальную машину

# virsh suspend <vm name> — приостановить виртуальную машину

# virsh resume <vm name> — запустить приостановленную виртуальную машину

# virsh reboot <vm name> — перезапустить виртуальную машину

# virsh destroy <vm name> — уничтожить виртуальную машину

# virsh undefine <vm name> — удалить машину из списка и удалить все файлы, принадлежащие ей (обычно применяется после выполнения команды virsh destroy).

# virsh vcpuinfo <vm name> — информация о процессоре на виртуальной машине

# virsh domid <vm name> — получить идентификатор виртуальной машины

# virsh domuuid <vm name> — получить UUID виртуальной машины

# virsh dominfo <vm name> — получить сведения о виртуальной машине

# virsh domstate <vm name> — просмотр состояния виртуальной машины

# virsh dumpxml <vm name> — вывести файл конфигурации указанной виртуальной машины в XML формате

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

👉 @linux_odmin
👍8
Команда crontab: опции, ключи и примеры использования

Планировщик cron для запуска задач с заданными интервалом времени от имени текущего пользователя. Формат планирования задачи: "(минута) (час) (день_месяца) (месяц) (день_недели) команда".

Редактирует файл crontab для текущего пользователя:
crontab -e

Выводит список существующих задая для текущего пользоваетеля:
crontab -l

Удаляет все задачи cron для текущего пользователя:
crontab -r

Пример задачи, которая запускается ежедневно в 10:00. * означает любое значение:
0 10 * * * {{path/to/noscript.sh}}

Пример задачи, которая запускается каждую минуту 3-го апреля:
* * 3 Apr * {{path/to/noscript.sh}}

Пример задачи, которая запускается каждую пятницу в 02:30:
30 2 * * Fri {{path/to/noscript.sh}}

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

👉 @linux_odmin
👍6
Операции с файлами в Linux

pwd # Выводит текущий путь;
ls # Выводит список файлов и каталогов. Пример вывода форматированного списка всех файлов и директорий, включая скрытые: ls -laX ;
cd # Переход по директориям. Примеры:
cd # Переход в домашнюю директорию;
cd /home # Пример перехода в /home;
cd .. # Переход в директорию уровнем выше;
cd ~user # Перейти в домашнюю директорию пользователя user ;
touch # Создание пустого файла если нет. Пример: touch test.txt ;
rm # Удаление. Примеры:
rm test.txt # Удаление файла;
rm -rf temp # Удаление директории temp с вложенными файлами;
cp # Копирование. Примеры:
cp test.txt /home/test.txt # Копирует test.txt из текущей директории в /home ;
cp -la /dir1 /dir2 # Копирование директорий;
ln # — создание символической ссылки. Пример: ln -s /var/test.txt /home/test.txt — создать символическую ссылку к файлу /var/test.txt в директории /home;
mkdir # Создание директории. Пример: mkdir temp ;
rmdir # Удаление директории. Пример: rmdir temp ;
mv # ПеремещениеПереименование. Пример переименования директории: mv /dir1 /dir2 (аналогично с файлами);
locate # Поиск. Пример поиска везде всех файлов с именем test.txt: locate test.txt ;
find # Поиск. Примеры:
find /home/it -name test.txt # Найти файлы и директории с именем test.txt в /home/it и вложенных;
find /home/it -name "*.txt" # Найти все файлы и директории в /home/it и вложенных, имена которых оканчиваются на ‘.txt’;
find /usr/bin -type f -atime +100 # Найти все файлы в ‘/usr/bin’, время последнего обращения к которым более 100 дней;
find /usr/bin -type f -mtime -10 # Найти все файлы в ‘/usr/bin’, созданные или изменённые в течении последних 10 дней;
stat # Отображение всей доступной информации об указанном файле. Пример: stat test.txt;
file # Определяет тип файла. Пример: file test.txt ;
chmod # Права доступа;
chown # Меняет владельца файла, пример: chown www:www test.txt;
mc # запуск файлового менеджера;

#Linux@linux_odmin #Команды@linux_odmin #Шпаргалка@linux_odmin

👉 @linux_odmin
👍10🔥1