UNIXAWESOME

Повышение безопасности сервера

May 19, 2021

Для любого сервера в интернете или в локальной сети очень важно сделать несколько простых действий для обеспечения его безопасности. Речь пойдёт про linux сервера, которые многим кажутся очень надёжными и неприступными, но это не так, если для безопасности ничего не предпринимается.

Многие администраторы или простые пользователи которые настраивают какие нибудь серверы или сервисы, пренебрегают базовыми правилами безопасности.

Вот небольшой список основных действий для повышения безопасности сервера.

Итак начнём.

  1. Установка апдейтов.
    Многие сервера взламывают потому что в установленных старых пакетах есть уязвимости. И это дыра в безопасности.

    apt update
    apt dist-upgrade
    

    Включаем автоматическую установку секюрити апдейтов.

    apt install unattended-upgrades
    dpkg-reconfigure --priority=low unattended-upgrades
    
  2. Использовать сложные и уникальные пароли.

    Не менее 10 символов.

  3. Не использовать root логин.

    Создать нового пользователя

    adduser guest
    

    Добавляем теперь нашего пользователя в группу sudo

    usermod -aG sudo guest
    
  4. Не использовать пароли для подключения по ssh к серверу.

    Можно авторизовываться на сервере без регулярной необходимости отсылать ваш пароль через сеть. Идентификация при помощи ключей SSH предоставляет дополнительную безопасность, а также может быть более удобным способом , чем традиционная идентификация при помощи пароля.

    Генерация пары ключей SSH

    Пара ключей SSH может быть сгенерирована при помощи команды ssh-keygen:

    ssh-keygen
    

    По умолчанию последние версии ssh-keygen будут создавать 3072-битную пару ключей RSA, которая достаточно безопасна для большинства сценариев использования (вы можете также добавить к этой команде флаг -b 4096 для получения 4096-битного ключа).

    ssh-keygen -t rsa -b 4096
    

    Копирование открытого ключа на сервер

    Копирование открытого ключа с помощью утилиты ssh-copy-id

    ssh-copy-id username@remote_host
    

    Если всё прошло ок, то можем попробовать подключится к нашему ssh серверу

    ssh username@remote_host
    

    Так же необходимо ещё внести некоторые правки в конфиг ssh:

    sudo nano /etc/ssh/sshd_config
    

    sshd_config

    ...
    PasswordAuthentication no
    ChallengeResponseAuthentication no
    UsePAM no
    PermitRootLogin no
    ...
    

    Заодно в этом файле можно изменить стандарный порт. Это добавить ещё немного безопасности

    Для применения новой конфигурации необходимо рестартнуть сервис.

    systemctl restart ssh
    

    Дополнительно можно запретить пользователям добавлять новые открытые ключи и подключаться с их помощью.

    Сделайте файл authorized_keys доступным только для чтения пользователям и запретите все остальное:

    chmod 400 ~/.ssh/authorized_keys
    

    Важно!

    Что бы не потерять случайно соединение с удалённым сервером необходимо открыть вторую консоль и попробовать подключится по ssh. Если подключение успешно удалось, можно делать logout.

  5. Закрываем все порты.

    Проверяем какие открытые

    sudo ss -tupln
    

    ufw

    Ставим пакет

    sudo apt install ufw
    

    По дефолту он не включен. Смотрим статус:

    sudo ufw status
    

    Разрешаем ssh порт:

    sudo ufw allow 22/tcp
    

    Так же по аналогии открываем и другие нужные нам порты.

    Включаем firewall

    sudo ufw enable
    

Проверяем статус. Firewall должен быть запущен и будет стартовать автоматически после перезагрузки. Теперь блокируются все порты, кроме тех которые мы разрешили.

Всё можно взломать, но некоторые вещи можно сделать более безопасными.