Введение
Помню свои первые серверы. Я почти ничего не делал для их защиты, потому что не знал, что кто-то со злыми намерениями может получить к ним доступ. И вы можете догадаться, чем всё это закончилось. К счастью, у меня были резервные копии, и я мог легко их восстановить. Но ситуация повторилась. Поэтому на этот раз я провёл небольшое исследование, выполнил домашнюю работу и укрепил свои серверы. Я знаю, что невзламываемых серверов не существует, но я собираюсь показать вам, как обеспечить безопасность сервера и что делать, если он выйдет из строя.
Начнём с базовой настройки. Вы узнаете, что делать при создании нового сервера. Затем мы расскажем, как поддерживать его работоспособность, регулярно выполняя проверки. Наконец, вы узнаете, что делать, если сервер выйдет из строя. Это руководство не сделает вас профессиональным администратором сервера, поскольку требует много работы и является серьёзной работой. Но, по крайней мере, вы сможете сохранить свои хобби-проекты в безопасности.
Предпосылки
- 1 сервер (например, с Hetzner)
Шаг 1 — Начальная настройка и базовая безопасность
После создания сервера выполните шаги с 1 по 5 из руководства “Начальная настройка сервера в Ubuntu”. В нём объясняется, как:
- Создайте нового пользователя с правами sudo
- Добавить SSH-ключ
После выполнения первых 5 шагов приведенного ниже руководства и подключения к новому пользователю sudo вы можете продолжить выполнение следующих шагов.
Обновление системы
Первое, что следует сделать, — проверить наличие обновлений, поскольку устаревшее программное обеспечение может содержать уязвимости, которыми легко воспользоваться. Это проще, чем вы думаете; просто выполните эти две команды:
sudo apt update
sudo apt upgradeЛегко, правда? Теперь мы используем самые последние версии.
Безопасный доступ SSH
Когда кто-то атакует ваш сервер, первым делом он, вероятно, попытается получить к нему доступ по SSH. Они часто делают это с помощью ботов и различных методов. Поэтому обеспечение безопасности SSH-доступа очень важно.
Отредактируйте файл конфигурации:
sudo nano /etc/ssh/sshd_config
- Отключить root-доступ
Найдите строку “PermitRootLogin” и измените ее на “no”.
- Отключить ввод пароля
Если вы добавили ключ SSH, как предложено выше, вы можете отключить ввод пароля.
- “Найдите ”PasswordAuthentication“ и установите для него значение ”нет».
- “Найдите ”PubkeyAuthentication“ и установите для него значение ”Да».
- Изменить порт SSH по умолчанию
Изменив это, мы можем устранить большинство атак автоматизированных ботов, поскольку большинство из них являются поддельными ботами и пытаются получить доступ к SSH через порт 22.
Найдите строку “#Port 22” и измените ее на что-то вроде “Port 2222” (или измените 2222 на то, что вам нужно).
Сохраните изменения и проверьте, успешно ли был изменен порт:
sudo systemctl restart ssh.service
sudo systemctl status sshУбедитесь, что указано Сервер прослушивает :: порт 2222.
Если указан порт 2222, вы можете выполнить следующую команду, чтобы разорвать соединение с сервером и проверить, работает ли соединение с новым портом:
ssh -p 2222 holu@<203.0.113.1>
Если вы можете подключиться к заданному вами порту, вы можете продолжить обучение.
Настройте брандмауэр
Для управления правилами брандмауэра мы будем использовать “ufw”. Он прост в использовании и использует интерфейс командной строки. Ufw, вероятно, уже установлен в вашей системе, но вы можете выполнить следующую команду, чтобы убедиться в его наличии:
sudo apt install ufw
Далее мы запретим весь входящий сетевой трафик, если он не разрешён другими правилами. Это необходимо для защиты вашего сервера, поскольку разрешается только тот трафик, который вы явно разрешите. Вам потребуется выполнить следующую команду:
sudo ufw default deny incoming
Далее мы разрешаем весь исходящий сетевой трафик. Обычно это безопасно и позволяет вашему серверу взаимодействовать с другими серверами или службами без ограничений. Выполните следующую команду:
sudo ufw default allow outgoing
Теперь нам нужно разрешить нашему порту SSH подключаться к нашему серверу по SSH. Просто измените 2222 на ваш порт SSH, если вы указали другой, и выполните следующую команду:
sudo ufw allow 2222/tcp
Наконец, нам нужно включить правила нашего брандмауэра:
sudo ufw enable
Фэйл2Бан
Мы изменили порт SSH и настроили брандмауэр. Но что произойдёт, если бот обнаружит наш порт и всё равно попытается получить доступ к нашему серверу по SSH? Это будет атака методом подбора, и мы можем защитить наш сервер с помощью Fail2Ban. Эта программа блокирует IP-адреса, которые демонстрируют признаки вредоносных программ. Чтобы установить и включить Fail2Ban, выполните следующие три команды:
sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2banВы также можете настроить параметры Fail2Ban, отредактировав файлы конфигурации в папке /etc/fail2ban/. Более подробную информацию и рекомендации см. в документации Fail2Ban.
Отлично! Вы сделали большой шаг вперёд и теперь ваш сервер более защищён. Пока вам нужно просто время от времени проводить регулярное обслуживание. Мы объясним, что нужно делать, в следующем разделе.
Шаг 2 — Регулярное обслуживание
- Обновление системы
Для начала нам нужно проверить наличие обновлений для нашей системы. Выполните следующую команду:
sudo apt update && sudo apt upgrade -y
- Отчеты мониторов
Регулярно проверяйте системные журналы, чтобы выявлять необычную активность. Logwatch поможет вам автоматизировать этот процесс. Установить logwatch можно с помощью следующей команды:
sudo apt install logwatch
Более подробную информацию о настройке ежедневных отчетов и о том, как выглядят отчеты, вы можете найти в этом руководстве.
- Проверьте использование диска.
Чтобы убедиться, что у вас достаточно места для работы сервера, проверьте оставшееся место на диске с помощью этой команды:
df -h
- Сделайте резервную копию ваших данных.
Всегда следует иметь несколько резервных копий, чтобы иметь возможность восстановить данные в случае сбоя, если ваш сервер будет полностью удалён или станет недоступен. К счастью, у Hetzner есть автоматизированное решение для резервного копирования облачных серверов, с которым вы можете ознакомиться в официальной документации. Если вы хотите настроить резервное копирование самостоятельно, воспользуйтесь такими инструментами, как rsync или Duplicity.
- Аудит учетных записей пользователей
Не забывайте регулярно проверять учётные записи пользователей на сервере. Убедитесь, что доступ к вашему серверу имеют только авторизованные пользователи. Удалите все ненужные учётные записи. Вы можете проверить учётные записи пользователей, выполнив следующую команду:
sudo nano /etc/passwd
- Проверьте наличие руткитов и вредоносных программ
Для быстрого сканирования сервера можно использовать такие инструменты, как rkhunter и chkrootkit. Эти инструменты помогут вам проверить сервер на наличие возможных руткитов, бэкдоров и локальных эксплойтов, а также убедиться, что всё в порядке. Выполните следующие команды, чтобы убедиться, что rkhunter установлен, и проверьте:
sudo apt install rkhunter
sudo rkhunter --check- Мониторинг производительности системы
Наконец, вы можете быстро проверить производительность системы, чтобы убедиться в отсутствии узких мест в ресурсах при работе программы. Существуют такие инструменты, как «htop», «top» или «atop». Но можно просто выполнить следующую команду:
htopШаг 3 — Дополнительные инструменты безопасности
- Используйте системы обнаружения вторжений.
Вы можете использовать такие инструменты, как “AIDE” (Advanced Intrusion Detection Environment), для отслеживания изменений в системе. AIDE создаёт базу данных ваших файлов и папок и сравнивает вашу систему с ней, чтобы гарантировать целостность файлов. Более подробную информацию можно найти в репозитории AIDE. Для первоначального использования установите её с помощью следующей команды:
sudo apt install aide
Запустите и сгенерируйте базу данных с помощью следующих команд:
sudo aideinit
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.dbИ сравните свою систему с базой данных с помощью этой команды:
sudo aide --config /etc/aide/aide.conf --check
- Включить двухфакторную аутентификацию (2FA)
Вы также можете настроить 2FA (двухфакторную аутентификацию) для входа на сервер по SSH. Это добавит дополнительный уровень защиты и снизит риск несанкционированного доступа. Установить 2FA можно с помощью следующей команды:
sudo apt install libpam-google-authenticator
И выполните эту команду для его запуска:
google-authenticator
- Безопасные веб-приложения
Если на вашем сервере используются веб-приложения, обязательно следуйте их рекомендациям и регулярно обновляйте их. Например, если вы используете WordPress, всегда используйте последнюю версию WordPress, а также регулярно обновляйте все плагины и темы. Кроме того, установите подходящий плагин безопасности WordPress. Это снизит риск несанкционированного доступа к вашему серверу и приложениям.
Шаг 4 – План реагирования на инциденты
Этот план может быть очень подробным в крупных организациях, но мы сделаем его простым и практичным для небольших развлекательных серверов. Поэтому я подготовил для вас трёхэтапный план.
- Подготовка
Для этого раздела вам следует создать небольшой текстовый файл или заметку в блокноте с информацией о вашем сервере. Укажите такие сведения, как архитектура сервера, используемое на нём программное обеспечение, место хранения резервных копий и журналов, а также ваши конфигурации. Сохраните эту заметку в надёжном месте. В качестве отправной точки можно использовать следующий пример:
Информация о сервере
| Информация | Описание |
|---|---|
| Имя сервера | МойСервер01 |
| IP-адрес | 192.168.1.100 |
| Операционная система | Ubuntu 24.04 LTS |
| Процессор | 4 виртуальных ЦП |
| БАРАН | 8 ГБ |
| Хранилище | SSD-накопитель на 100 ГБ |
| SSH-порт | 2222 |
- Программное обеспечение и службы: Nginx 1.18.0, PostgreSQL 13, Django 3.1
- Резервное копирование: двойное, ежедневное, /mnt/backup и удаленное хранилище в AWS S3, хранение 30 дней
- Конфигурация Nginx: /etc/nginx/nginx.conf
- Конфигурация PostgreSQL: /etc/postgresql/13/main/postgresql.conf
- Конфигурация Django: /home/myuser/myapp/settings.py
- Конфигурация UFW: /etc/ufw/ufw.conf
- Идентификация
На этом этапе вам необходимо определить, в чём проблема с вашим сервером. Связана ли проблема или нарушение с вашим веб-приложением, самим сервером или одной из баз данных на нём? Если вы не уверены, всегда предполагайте, что всё под угрозой. Поэтому вам нужно начать проверку заново, начиная с сервера.
- Улучшение
Восстановите повреждённые системы в этом разделе. Если вы не можете получить доступ к серверу, восстановите его из резервной копии. Если одно из ваших веб-приложений неисправно, вам может потребоваться восстановить его из резервной копии. Убедитесь, что всё восстановлено, протестировано, работает как надо, и вы выполнили сканирование безопасности.
Результат
Обеспечение безопасности вашего сервера требует сочетания передовых методов и регулярного обслуживания. Следуя инструкциям, описанным в этой статье, вы сможете значительно повысить безопасность своего сервера и защитить свои ценные данные. Помните, что обеспечение безопасности — это непрерывный процесс, поэтому не забывайте регулярно проверять свои серверы.











