Настройка сервера/VPS - это не сложно. Но так как я люблю все "поковырять", а потом вожусь с переустановкой системы, то решил для себя (а если кому-то понадобится - то и для других), что необходимо зафиксировать здесь простейшие действия, которые рекомендую сделать после установки ОС на VPS.

Кстати, VPS, которым я пользуюсь - от компании  Scaleway (раньше тут был айХор).

Обратите внимание: все действия я произвожу используя OS X, поэтому, например, не знаю, как сгенерировать SSH-ключи на Windows.

Итак, для начала нужно описать конечный результат, который мы ожидаем от наших действий:

  1. Добавление нового пользователя, отличного от root
  2. Авторизация по публичному ключу (PKA) при SSH-подключении
  3. Настройка SSH (смена порта, запрет на вход под root)
  4. Настройка firewall
  5. Установка и настройка fail2ban
  6. Установка swap-файла

1. Добавляем нового пользователя

В данном пункте все действия выполняются из-под root.

Этот шаг очень простой, и в то же время, очень важный, так как всем известно, что сидеть под root достаточно опасно. Добавить нового пользователя можно командой

adduser username

где username - это то имя пользователя, которое вы хотите использовать. Введите пароль и, по желанию, остальные данные.

Сейчас наш пользователь не имеет привилегий администратора, а значит, не может использовать команду sudo. Это легко исправить, добавив пользователя в группу sudo:

gpasswd -a username sudo

Не забываем при этом изменять username на ваше имя пользователя!

2. Добавляем публичный ключ (Public Key Authentication)

Теперь мы можем переключиться на свежесозданную учетную запись командой

su - username

На своем компьютере (под управлением OS X или Linux), вам необходимо открыть новое окно терминала и набрать команду

ssh-keygen

После этого вы увидите запрос на указание места для сохранения ключей, где вместо localuser будет указано ваше имя пользователя:

Generating public/private rsa key pair. Enter file in which to save the key (/Users/localuser/.ssh/id_rsa):

Вы можете согласиться на стандартный путь, либо же указать свой. Далее, вам предложат указать кодовую фразу для ключа, от чего вы можете отказаться, оставив ее пустой. Если вы создадите ключ - он будет использоваться наряду с паролем и приватным ключом для авторизации на сервере. Это еще безопаснее, но не всегда удобно.

Теперь необходимо скопировать ключ на ваш сервер, это можно сделать, набрав в терминале локального компьютера (не сервера) команду

cat ~/.ssh/id_rsa.pub

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

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

Теперь снова перейдите на вкладку/окно с SSH-сессией, и создать папку для ключа:

mkdir .ssh chmod 700 .ssh

Следующая команда создает файл, открывая его в редакторе nano:

nano .ssh/authorized_keys

Здесь нужно вставить ваш ключ и нажать Ctrl+X для закрытия, Y для подтверждения имени файла и Enter для сохранения. Теперь ограничим доступ к файлу:

chmod 600 .ssh/authorized_keys

Готово. Можно переподключаться.

3. Настройка SSH

Теперь настала очередь обезопасить SSH-соединение.
Существует множество ботнетов, которые пытаются перебирать пароли для входа по SSH, и от них можно скрыться, если сменить стандартный порт SSH (но не ограничивайтесь только этим)

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

sudo nano /etc/ssh/sshd_config

Меняем порт с 22 на, например, 4444:

Port 4444

И запрещаем вход под учетной записью root:

PermitRootLogin no

Перезапускаем ssh:

sudo service ssh restart

и подключаемся к серверу с новыми данными:

ssh -p 4444 username@SERVER_IP_ADDRESS

4. Настройка Firewall

Добавляем все необходимые порты в исключения файерволла:

sudo ufw allow 4444/tcp

Этой командой мы разрешили подключаться по SSH через порт 4444

Таким же образом можно открыть порты 80, 443, если у вас стоит веб-сервер,  почту - 25

sudo uff allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 25/tcp

Проверить открытые порты можно командой

sudo ufw show added

И если все отлично, то запускаем файерволл и подтверждаем, нажав Y:

sudo ufw enable

5. Установка fail2ban

Вообще, стандартная конфигурация Fail2ban не отличается особенной защитой. Ботнеты уже достаточно умны, чтобы обходить его ограничения. Поэтому я нашел статью, где описывается установка улучшенного fail2ban, с постоянным уменьшением количества разрешенных попыток ввода пароля после указания неправильного.

Вот статья на эту тему: Habrahabr

6. Swap-файл

Swap-файл пригодится, если вдруг на вашем сервере мало оперативной памяти/для предупреждения ситуации отключения скриптов, в случае, если они "забивают" всю память, путем переноса данных из оперативной памяти на жесткий диск.
Есть несколько способов его установки, но я нашел один, наиболее удобный и простой:

https://github.com/Cretezy/Swap

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

wget https://raw.githubusercontent.com/Cretezy/Swap/master/swap.sh -O swap

Теперь вам необходимо определиться, какой объем swap-файла вам необходим. Обычно, он в 1,5-2 раза больше объема оперативной памяти на сервере. Но если SSD/HDD на сервере небольшой, а оперативной памяти, допустим, 4 Гб или больше - есть смысл установить объем, равный объему оперативной памяти.
В моем случае объем оперативной памяти - 1 Гб:

sh swap 2G

Здесь 2G - объем свопа.

Готово.

Пост будет обновляться.

Спасибо данным гайдам: