Настройка Ubuntu 16.04 server
Настройка сервера/VPS - это не сложно. Но так как я люблю все "поковырять", а потом вожусь с переустановкой системы, то решил для себя (а если кому-то понадобится - то и для других), что необходимо зафиксировать здесь простейшие действия, которые рекомендую сделать после установки ОС на VPS.
Кстати, VPS, которым я пользуюсь - от компании Scaleway (раньше тут был айХор).
Обратите внимание: все действия я произвожу используя OS X, поэтому, например, не знаю, как сгенерировать SSH-ключи на Windows.
Итак, для начала нужно описать конечный результат, который мы ожидаем от наших действий:
- Добавление нового пользователя, отличного от root
- Авторизация по публичному ключу (PKA) при SSH-подключении
- Настройка SSH (смена порта, запрет на вход под root)
- Настройка firewall
- Установка и настройка fail2ban
- Установка 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 - объем свопа.
Готово.
Пост будет обновляться.
Спасибо данным гайдам: