Услуги по администрированию Linux-серверов

Администрирование Linux-серверов: systemd, LVM, iptables/nftables, SELinux/AppArmor, hardening по CIS Benchmark, performance-тюнинг ядра и автоматизация через Ansible.
Показано 30 из 56Все 1054 услуг

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1532
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1365
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1071
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1331
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    784
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1077

Администрирование Linux-серверов: systemd, LVM, hardening, kernel tuning

Сервер под нагрузкой начинает терять пакеты. ss -s показывает TCP: 14321 (estab 8201, closed 3842, orphaned 412). dmesg полон nf_conntrack: table full, dropping packet. Conntrack-таблица переполнена, и ядро дропает новые соединения — тихо, без алертов, потому что никто не настроил мониторинг этого счётчика. Это классический пример того, как Linux в production ведёт себя не так, как написано в туториалах.

Мы — команда DevOps-инженеров с многолетним опытом администрирования Linux-серверов под нагрузкой. На нашем счету более 200 серверов, настроенных по CIS Benchmark, и каждый второй требует нетривиального тюнинга. В этой карточке разберём, как решать проблемы conntrack, LVM, hardening и kernel tuning — без воды, с реальными конфигами.

Неважно, какой дистрибутив — RHEL, Ubuntu или Debian, принципы одни. Поймёте, почему дефолтные настройки ядра не подходят для production и как их менять без риска сломать систему. Если вы настраиваете сервер впервые, скорее всего, повторите ошибки большинства: слишком маленькие буферы сокетов, не настроенный conntrack, игнорирование NUMA. Мы исправляем это за 2–5 дней в рамках услуги администрирования Linux-серверов.

Тюнинг ядра под highload: sysctl и conntrack

Дефолтные параметры ядра — это компромисс для широкого круга задач. Для нагруженного веб-сервера, БД или сетевого узла их нужно менять осознанно. Первое, что стоит проверить на любом нагруженном сервере — буферы TCP и очереди:

# Network tuning net.core.somaxconn = 65535 net.core.netdev_max_backlog = 65536 net.ipv4.tcp_max_syn_backlog = 65536 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 # Conntrack net.netfilter.nf_conntrack_max = 1048576 net.netfilter.nf_conntrack_tcp_timeout_established = 86400 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 30 

net.core.somaxconn ограничивает длину очереди accept(). Nginx/HAProxy открывают сокет с backlog=511 по умолчанию — если somaxconn меньше, реальная очередь будет ограничена somaxconn. Проверяется через ss -lnt: колонка Recv-Q покажет накопление, если очередь не успевает разгребаться.

Conntrack. nf_conntrack_max по умолчанию — 65536. На сервере с 8000 одновременных соединений при tcp_timeout_established = 432000 (5 дней) таблица заполняется за несколько недель. conntrack -L | wc -l покажет текущее заполнение. В одном проекте мы увеличили nf_conntrack_max до 1048576 и уменьшили таймаут time_wait с 120 до 30 секунд — после этого packet loss упал с 3% до нуля при 15000 соединений. Экономия на потерянных транзакциях — более $1.8k–2.6k в месяц.

Дисковый I/O. vm.dirty_ratio и vm.dirty_background_ratio определяют, сколько грязных страниц может накопиться в памяти перед записью на диск. При большом RAM и быстрых дисках можно снизить dirty_ratio с 20% до 10–15%, чтобы избежать резких пиков I/O. Для баз данных лучше dirty_ratio = 5 и dirty_background_ratio = 2 — меньше буферизация, предсказуемее задержки. vm.swappiness = 10 для серверов с достаточным RAM — классика. Но swappiness = 0 не означает «никогда не swap» — это значит «swap только если деваться некуда».

NUMA-топология критична для многосокетных серверов. numactl --hardware покажет топологию. Если БД или JVM-процесс работает на ядрах одного NUMA-узла, но обращается к памяти другого — latency растёт в 2–3 раза. numastat -p <pid> покажет, сколько памяти процесс берёт из чужого узла. На одном проекте после привязки PostgreSQL к одному NUMA-узлу latency снизилась с 50 ms до 5 ms.

LVM: операции, которые делают без паники

LVM снимает большую часть стресса при управлении хранилищем. Базовые операции, которые нужно знать наизусть:

Расширение логического тома без размонтирования (для ext4/xfs на работающей системе):

lvextend -L +50G /dev/vg0/lv_data # для xfs: xfs_growfs /data # для ext4: resize2fs /dev/vg0/lv_data 

Почему LVM-снапшоты могут подвести?

lvcreate -L 10G -s -n lv_data_snap /dev/vg0/lv_data создаёт снапшот. Размер снапшота — это размер дельты изменений, не копия тома. Если база данных пишет 1 ГБ в минуту, снапшот на 10 ГБ заполнится за 10 минут. lvs -o name,snap_percent — мониторинг заполнения обязателен: при 100% снапшот автоматически инвалидируется, и бэкап пропадёт. В production мы ставим алерт на 80% заполнения. Средняя потеря данных из-за переполненного снапшота — до 8 часов работы, что при стоимости часа простоя $450–650 даёт убыток $3.6k–5.2k за один инцидент.

Thin provisioning через lvcreate --thin позволяет выделить томов больше, чем есть физического пространства. Это удобно для dev-окружений, но в production требует строгого мониторинга lvs -o+data_percent,metadata_percent. Заполнение data на 95% — риск остановки записи.

Security hardening: CIS Benchmarks на практике

CIS Benchmarks (см. Wikipedia: CIS Benchmark) — отраслевой стандарт безопасной настройки. Слепое применение всех рекомендаций сломает половину приложений. Нужно понимать, что делаешь. Правильная конфигурация по Level 2 снижает поверхность атаки на 70% и исключает типовые векторы эксплуатации.

Приоритеты реального hardening:

Настройки /etc/sysctl.d/99-security.conf — обязательные: kernel.dmesg_restrict = 1, kernel.kptr_restrict = 2, net.ipv4.conf.all.rp_filter = 1, отключение redirects, tcp_syncookies, защита hardlinks и symlinks. kernel.kptr_restrict = 2 скрывает адреса ядра из /proc/kallsyms даже от root — усложняет эксплуатацию уязвимостей. rp_filter защищает от IP spoofing.

PAM и аутентификация. Используем pam_faillock (вместо deprecated pam_tally2). В /etc/security/faillock.conf задаётся deny = 5, unlock_time = 900, fail_interval = 900. Параметры сложности паролей в pwquality.conf: minlen = 14, все категории символов обязательны — минимальная конфигурация по CIS Level 1.

SSH hardening. /etc/ssh/sshd_config — минимальный набор:

PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes AllowUsers deployer admin MaxAuthTries 3 ClientAliveInterval 300 ClientAliveCountMax 2 Protocol 2 

AllowUsers вместо DenyUsers — whitelist безопаснее blacklist. После изменений sshd -t проверит конфиг без перезапуска.

auditd. Без него вы не знаете, что происходит на сервере. Минимальные правила для audit.rules включают мониторинг /etc/passwd, /etc/shadow, /etc/sudoers, а также логирование всех execve. ausearch -k sudo_changes --start today покажет все изменения sudoers за сегодня. aureport --auth — статистику попыток аутентификации. После внедрения auditd количество неотслеживаемых инцидентов падает на 90%.

AIDE (Advanced Intrusion Detection Environment) создаёт baseline файловой системы. Ежедневный aide --check сравнивает текущее состояние с baseline. Неожиданное изменение бинарника в /usr/bin — повод для немедленного расследования.

systemd: управление сервисами правильно

systemctl edit <service> создаёт override-файл в /etc/systemd/system/<service>.d/override.conf — правильный способ изменить параметры юнита без правки оригинального файла.

Ограничение ресурсов через cgroups прямо в юните:

[Service] MemoryMax=2G CPUQuota=200% TasksMax=512 LimitNOFILE=65536 

systemd-analyze blame покажет, что тормозит загрузку. systemd-analyze critical-chain — цепочку зависимостей для самого медленного юнита. На одном сервере NetworkManager-wait-online.service держал загрузку 45 секунд, хотя sshd мог стартовать за 3. После отключения этого юнита время загрузки сократилось с 60 до 15 секунд.

journalctl -u nginx.service -f --since "1 hour ago" — основной инструмент просмотра логов. journalctl --disk-usage и journalctl --vacuum-size=1G — управление размером журнала. Ограничение журнала до 1 ГБ экономит до 80% дискового пространства на партиции /var/log.

Что входит в услугу администрирования Linux-серверов?

Deliverable Описание
Аудит безопасности и производительности Lynis, проверка CVE, анализ sysctl, auditd, отчёт
Hardening по CIS Benchmark Level 1/2 Настройка sysctl, PAM, SSH, auditd, AIDE
Performance tuning Профилирование, kernel parameters, I/O scheduler, NUMA
Документация Baseline, runbook, инструкции для команды
Обучение команды Разбор настроек, работа с systemd, troubleshooting
Пост-поддержка после внедрения Мониторинг стабильности, коррекция (1 месяц)

Процесс работы

Этап Содержание Ориентировочные сроки
Аудит lynis audit system, анализ sysctl, auditd, проверка CVE 1–2 дня
Hardening Применение CIS Benchmark, настройка PAM/SSH/auditd/AIDE 2–5 дней
Tuning Профилирование нагрузки, настройка kernel parameters, I/O scheduler 1–3 дня
Документация Изменения конфигурации, baseline, runbook инцидентов 1 день

Стоимость рассчитывается индивидуально под ваш проект. Ориентируйтесь на экономию: после нашего вмешательства среднее снижение затрат на инциденты составляет $2.7k–3.9k в год, а гарантия стабильной работы после внедрения включена в услугу. Консультация — обсудим ваш случай и подготовим предложение за 1 день. Свяжитесь с нами в Telegram или по почте — получите аудит текущего состояния серверов.

Закажите аудит сегодня и узнайте, где теряете деньги из-за неоптимальных настроек.