Telegram Web Link
🔐 Защищаем SSH с помощью Fail2Ban

Всем привет! 👋 Сегодня поговорим о базовой, но крайне важной утилите для защиты вашего сервера - Fail2Ban. Если у вас есть сервер с доступом по SSH, этот пост для вас.

Что такое Fail2Ban?

Fail2Ban — это утилита, которая анализирует логи служб (например, SSH, Apache, Nginx) на предмет подозрительной активности, такой как многократные неудачные попытки входа. При обнаружении нарушителя (бота или злоумышленника), Fail2Ban автоматически блокирует его IP-адрес на определённое время с помощью файрвола.

Как это защищает SSH?

Основная угроза для SSH - это брутфорс-атаки (атаки перебором), когда боты пытаются подобрать ваш пароль, пробуя тысячи комбинаций. Fail2Ban эффективно противостоит этому:

1. Мониторинг логов: Он постоянно следит за файлом /var/log/auth.log (или аналогом в вашей системе).
2. Обнаружение аномалий: Если с одного IP-адреса поступает, скажем, 5 неудачных попыток входа подряд, Fail2Ban это замечает.
3. Блокировка: Утилита мгновенно добавляет правило в файрвол (например, iptables или ufw), которое блокирует этот IP-адрес.
4. Снятие блокировки: Через заданное время (например, 10 минут или час) IP-адрес автоматически разблокируется.

Быстрая настройка для SSH (на примере Debian/Ubuntu)

Настроить базовую защиту очень просто:

1. Установка:


sudo apt update
sudo apt install fail2ban


2. Создание локального конфигурационного файла:
Никогда не редактируйте jail.conf! Создайте его копию jail.local, чтобы ваши настройки не перезаписались при обновлении.


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


3. Настройка jail.local:
Откройте файл sudo nano /etc/fail2ban/jail.local и найдите секцию [sshd]. Убедитесь, что она включена:


[sshd]
enabled = true


Вы можете изменить стандартные параметры, например:

- maxretry = 5 - количество неудачных попыток до бана.
- bantime = 10m - время блокировки (10 минут).
- findtime = 10m - временное окно, в течение которого считаются попытки.

4. Перезапуск службы:


sudo systemctl restart fail2ban


5. Проверка статуса:
Чтобы увидеть, заблокировал ли Fail2Ban кого-нибудь, используйте команду:


sudo fail2ban-client status sshd


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

👉 @linux_odmin
👍3
Сколько раз вы слышали истории о том, как злоумышленники получали доступ к 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
👍3
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
👍5
Управление виртуальными машинами 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
👍6
Команда crontab: опции, ключи и примеры использования

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

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

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

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

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

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

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

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

👉 @linux_odmin
👍4
Операции с файлами в 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
👍9🔥1
2025/10/19 18:12:28
Back to Top
HTML Embed Code: