Архив за год 2025

Руководство по определению версии Linux

Каждый системный администратор должен уметь быстро и точно определять версию Linux-дистрибутива. Это важно для:

  • Обновления системы
  • Устранения неисправностей
  • Совместимости ПО
  • Документирования инфраструктуры

В этой статье разберём все основные команды, их различия и лучшие практики использования.


1. Стандартные команды для определения дистрибутива

1.1. hostnamectl (рекомендуемый способ)

Почему лучше?

  • Встроен в systemd (есть почти везде)
  • Показывает не только ОС, но и ядро, архитектуру, hostname

Пример:

hostnamectl

Вывод:

  Static hostname: server1  
       Operating System: Ubuntu 22.04.3 LTS  
            Kernel: Linux 5.15.0-78-generic  
      Architecture: x86-64

Фильтрация вывода:

hostnamectl | grep "Operating System" # Только ОС
hostnamectl | grep "Kernel"           # Только ядро

1.2. lsb_release (классический метод для Debian/Ubuntu)

Плюсы:

  • Чётко показывает дистрибутив и кодовое имя
  • Есть почти во всех Debian-based системах

Пример:

lsb_release -a

Вывод:

Distributor ID: Ubuntu  
Description:    Ubuntu 22.04.3 LTS  
Release:        22.04  
Codename:       jammy

Короткие варианты:

lsb_release -d # Только описание  
lsb_release -c   # Кодовое имя (jammy, focal, bullseye)

1.3. Чтение файлов /etc/*-release

Когда использовать?

  • Если hostnamectl и lsb_release недоступны (минимальные дистрибутивы)

Команды:

cat /etc/os-release # Самый информативный
cat /etc/lsb-release # Альтернатива для Ubuntu
cat /etc/redhat-release # Для RHEL/CentOS
cat /etc/issue # Простая версия  
 

Пример (/etc/os-release):

 
NAME="Ubuntu"  
VERSION="22.04.3 LTS (Jammy Jellyfish)"  
ID=ubuntu  
ID_LIKE=debian  
PRETTY_NAME="Ubuntu 22.04.3 LTS"

2. Дополнительные методы

2.1. uname – информация о ядре

uname -a

Вывод:

Linux server1 5.15.0-78-generic #85-Ubuntu SMP x86_64 GNU/Linux  

Опции:

  • uname -r – только версия ядра
  • uname -m – архитектура (x86_64, arm64)

2.2. neofetch (красивый вывод)

Установка:

sudo apt install neofetch # Ubuntu/Debian
sudo dnf install neofetch # RHEL/Fedora  

Запуск:

neofetch

Вывод (графический, с логотипом дистрибутива):

OS: Ubuntu 22.04.5 LTS x86_64
Host: KVM RHEL 7.6.0 PC (i440FX + PIIX, 1996)
Kernel: 5.15.0-136-generic
Uptime: 27 days, 18 hours, 26 mins
Packages: 634 (dpkg)
Shell: bash 5.1.16
Resolution: 1024×768
Terminal: /dev/pts/0
CPU: AMD EPYC 9454P (1) @ 2.749GHz
GPU: 00:02.0 Cirrus Logic GD 5446
Memory: 313MiB / 956MiB
 

3. Сравнение команд

Команда Лучше всего подходит для Показывает ядро? Требует установки?
hostnamectl Любой systemd-дистр. ✅ Да ❌ Нет (встроен)
lsb_release -a Debian/Ubuntu ❌ Нет ❌ Нет (обычно есть)
cat /etc/os-release Минимальные дистры ❌ Нет ❌ Нет
uname -a Проверка ядра ✅ Только ядро ❌ Нет
neofetch Красивый вывод ✅ Да ✅ Да (устанавливается)

Настройка базовой защиты сервера: iptables и Fail2Ban

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


1. Установка и настройка Fail2Ban

1.1. Установка и активация

Устанавливаем Fail2Ban из репозитория и включаем автозагрузку:

apt install fail2ban
systemctl enable --now fail2ban

1.2. Базовая конфигурация

Основные настройки хранятся в:

  • /etc/fail2ban/jail.conf — основной конфиг (лучше не редактировать напрямую)
  • /etc/fail2ban/jail.d/*.conf — кастомные настройки (предпочтительный способ)

Создаём или редактируем конфигурацию:

nano /etc/fail2ban/jail.d/custom.conf

Добавляем следующие параметры:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 217.25.227.207  # IP, которые не блокируются
bantime  = 30d                              # Время блокировки (30 дней)
findtime = 5m                               # Окно анализа попыток входа
maxretry = 3                                # Макс. число попыток до бана
banaction = iptables-multiport              # Действие при бане (по портам)
banaction_allports = iptables-allports      # Блокировка всех портов

1.3. Проверка работы Fail2Ban

Проверим статус защиты для SSH:

fail2ban-client status sshd

Посмотрим правила iptables, созданные Fail2Ban:

iptables -L -n -v | grep -A 10 "f2b-sshd"

2. Настройка iptables для базовой защиты

2.1. Основные правила

Перед применением политики DROP на INPUT разрешим необходимый трафик:

# Разрешаем ICMP (ping)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Разрешаем порт для Zabbix-агента
iptables -A INPUT -p tcp --dport 10050 -j ACCEPT

# Разрешаем SSH (порт 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Разрешаем ответы на исходящие соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Разрешаем локальный интерфейс (loopback)
iptables -A INPUT -i lo -j ACCEPT

# Запрещаем весь остальной входящий трафик
iptables -P INPUT DROP

# Сохраняем правила
iptables-save > /etc/iptables/rules.v4

2.2. Управление правилами iptables

Если нужно удалить правило:

iptables -L --line-numbers  # Просмотр правил с номерами
iptables -D INPUT 3         # Удаление правила №3 из цепочки INPUT

3. Что получаем на выходе всех настроек

Комбинация Fail2Ban и iptables даёт:
✅ Автоматическую защиту от брутфорса (Fail2Ban)
✅ Гибкую фильтрацию трафика (iptables)
✅ Контроль доступа к критическим сервисам (SSH, Zabbix)

Рекомендуется:
🔹 Регулярно проверять логи Fail2Ban (journalctl -u fail2ban -f)
🔹 Обновлять список ignoreip для доверенных IP
🔹 Тестировать правила iptables перед применением в production

Такая настройка обеспечит базовый уровень безопасности сервера, минимизируя риски несанкционированного доступа.

🔐 Дополнительные меры:

  • Настройка SSH-доступа по ключам вместо пароля
  • Использование UFW (если iptables кажется сложным)
  • Мониторинг с помощью Zabbix/Grafana для отслеживания атак