Эта статья о том, как быстро настроить сервер так, чтобы минимизировать риски взлома и получения абузы (abuse) от хостера. Подойдет, если сервер временный или на нем не размещается что-то критически важное.
Если вы – серьезный дядя (или тетя) с бизнесом, то данная статья вам не нужна. Лучше наймите специалиста по информационной безопасности. Серьезно.
Сервер всегда под угрозой
Необходимо понимать, что сервер смотрит в интернет, а интернет – это опасное место.
Сеть постоянно сканируют тысячи вредоносных ботов и заражают любые уязвимые серверы и сайты. Под раздачу попадают абсолютно все. Атака на ваш сервер – это исключительно вопрос времени. Это неминуемо.
Вредоносу все равно, что у вас на сервере или сайте – если есть потенциальная возможность его заразить, это произойдет.
Зараженный сервер может быть использован злоумышленниками для:
- рассылки спама,
- размещения фишинговых страниц,
- спуфинга,
- исходящих атак на другие серверы,
- DDoS,
- в качестве промежуточного узла для маскировки нелегальной деятельности,
- майнинга криптовалюты и еще много чего другого.
Поэтому необходимо хотя бы слегка усложнить задачу ботам и потенциальным злоумышленникам.
По умолчанию при создании VDS для root-пользователя генерируется хороший пароль, но про него лучше сразу забыть, ведь можно добавить SSH-ключ. В отличие от паролей, подобрать SSH-ключи невозможно.
Linux, MacOS, Windows 10
Создание SSH-ключей
Эта инструкция подойдет для ОС Linux, MacOS, а также для версий Windows 10 начиная с 1809 — в них доступен встроенный SSH-клиент. Если у вас более ранняя версия Windows, воспользуйтесь инструкцией из пункта Старые версии Windows (без OpenSSH).
Запустите терминал или Windows PowerShell на вашем компьютере и выполните команду:
ssh-keygen
Вы увидите примерно следующее сообщение:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Нажмите Enter - ключ будет сохранен в указанную директорию по умолчанию.
Далее вам будет предложено задать пароль (кодовую фразу) для ключа. Вы можете задать ее или оставить пустой, просто нажав Enter. Обратите внимание, что если вы зададите кодовую фразу, ее потребуется вводить при каждой авторизации по ключу.
Процедура создания ключей завершена, ключи сохранены в директории ~/.ssh/ в файлах id_rsa и id_rsa.pub. Теперь их необходимо скопировать на сервер.
Копирование ключей на сервер
Выполните в терминале следующую команду, указав вместо user имя пользователя, созданного на сервере, а вместо server - IP-адрес вашего сервера:
ssh-copy-id user@server
#Например:
ssh-copy-id admin@5.60.53.245
В результате содержимое файла с публичным ключом id_rsa.pub будет скопировано в файл ~/.ssh/authorized_keys на сервере, и в дальнейшем вы сможете устанавливать соединение с сервером, используя команду:
ssh user@server
#Например:
ssh-copy-id admin@5.60.53.24
Старые версии Windows (без OpenSSH)
Если вы используете версию Windows без OpenSSH, вам потребуется специальная программа - PuTTYgen. Вы можете скачать дистрибутив puttygen.exe с официального сайта PuTTY.
Создание SSH-ключей
Запустите программу, в открывшемся окне выберите "Type of key - SSH-2 RSA и нажмите "Generate".
Пока создается ключ, водите мышью в хаотичном порядке в пространстве под строкой загрузки для генерации случайных значений.
После того, как ключ будет создан, в окне программы вы сможете задать "Key passphrase" (кодовую фразу) для ключа. Это необязательно, вы можете оставить строку пустой. Если вы решите задать кодовую фразу, обратите внимание, что ее потребуется вводить при каждой авторизации по ключу.
Далее сохраните созданные ключи, нажав на кнопки "Save public key" и "Save private key", например, под именами id_rsa.pub и mykey.ppk. Также скопируйте и сохраните в любом текстовом файле содержимое окна "Public key for pasting…" - оно потребуется при копировании созданного ключа на сервер.
На этом процедура создания ключей завершена.
Копирование ключей на сервер
В процессе копирования ключей вам потребуется утилита pageant. Вы можете скачать дистрибутив pageant.exe с официального сайта PuTTY.
Подключитесь к серверу по SSH и выполните команду для создания на сервере директории и файла для хранения ключей:
mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
Откройте созданный файл с помощью текстового редактора:
nano ~/.ssh/authorized_keys
Вставьте в него скопированный на предыдущем шаге текст public key из окна PuTTYgen и сохраните файл.
Запустите pageant - его иконка появится в трее. Щелкните по ней правой кнопкой мыши и выберите Add Key.
В открывшемся окне укажите путь к приватному ключу mykey.ppk, сохраненному ранее, и нажмите Open. Если при создании ключа вы указывали кодовую фразу, pageant запросит ее на данном этапе.
Для проверки работы авторизации по ключу снова запустите утилиту PuTTY, подключитесь к вашему серверу и введите свой логин. Если все настроено корректно, вы увидите подобный вывод в окне консоли:
Authenticating with public key "rsa-key-20151220" from agent
Для того, чтобы доступ к серверу мог осуществляться только по ключу, необходимо запретить авторизацию по паролю. Для этого требуется внести правки в файл /etc/ssh/sshd_config.
Откройте файл командой:
sudo nano /etc/ssh/sshd_config
Откроется файл, в нем ищем строки:
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
#PermitEmptyPasswords no
И меняем на:
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
#PermitEmptyPasswords no
Сохраняем изменения нажатием Ctrl+O и закрываем редактор нажатием Ctrl+X.
Мы запретили доступ по паролям. Чтобы настройки вступили в силу, необходимо перезапустить службу SSH:
sudo service ssh restart
Закройте порты
Включим файрвол с минимальным изменением стандартных настроек.
Установим сам файрвол:
apt install ufw -y
Обязательно открываем SSH, иначе можем потерять доступ к серверу:
ufw allow ssh
Также открываем порты для работы веб-сервера:
ufw allow http
ufw allow https
Теперь включим файрвол:
ufw enable
Порты закрываются для всех входящих соединений, исходящие разрешены. Входящие соединения после выполнения команд выше будут доступны только для портов 22 (SSH), 80 (HTTP) и 443 (HTTPS).
Если надо открыть еще какой-то порт, например 8080, нужно выполнить:
ufw allow 8080
Итог: залогиниться извне под существующего на сервере пользователя невозможно (приватный ключ есть только у вас), потенциальные дыры в виде торчащих в интернет портов служб закрыты (например MySQL).
Это далеко не самая безопасная конфигурация, но риски снижаются. Сервер все еще можно поломать через уязвимые сайты. Поэтому...
Это относится к любым программам, в том числе используемым на сайтах CMS и их плагинам.
С выходом новых версий ПО разработчики закрывают найденные в них уязвимости, поэтому свежая версия программы практически всегда означает, что она самая безопасная.
Если ваш сайт не обновлялся год или больше, то он, скорее всего, уже взломан, и вы об этом можете даже не подозревать. Разумеется «год» – это условный год, взломать могут когда угодно, но если вы обновлялись, то это произойдет с гораздо меньшей вероятностью.
Резервная копия – это ваш спасательный круг во многих ситуациях, в том числе при заражении вредоносным кодом. Не нужно лишать себя возможности восстановить данные. Представьте, что завтра ваш сайт пропадет. Что вы будете делать?
Хостеры предлагают автоматические резервные копии, о которых вам не надо заботиться, но я также настоятельно рекомендую делать копии самостоятельно. В интернете масса инструкций о том, как это сделать.
Копия хостера может оказаться для вас слишком старой, и тогда вы можете потерять важные данные. В конце концов, невозможно избежать сбоев, и резервные копии могут быть утрачены. Хранить бэкапы в одном месте – не меньшее зло, чем не делать бэкапы вовсе.
От Sipsb
Рекомендуемые комментарии
Комментариев нет
Создайте учетную запись или войдите, чтобы комментировать
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти