Pull to refresh
0

Как создать свой первый безопасный веб-сервер, готовый к продуктиву

Reading time 4 min
Views 42K
Original author: Flavio H. Freitas
В этом руководстве мы рассмотрим некоторые из лучших методик создания своего первого безопасного сервера. Мы пошагово разберём весь процесс, и в результате получим сервер, полностью готовый к использованию в продуктиве для вашего приложения. Конечно, это не исчерпывающее руководство. Безопасный сервер — это постоянный поиск новых ресурсов и бесконечные улучшения. Но с этим материалом вы можете начать создавать собственную инфраструктуру.

Для прогона тестов мы будем использовать Amazon EC2, но можно взять и Amazon LightSail, Digital Ocean, Vultr или другой сервис. Все они конфигурируются одинаково, так что выбирайте тот, который вам по душе.



Создаём публичный и приватный SSH-ключи


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

SSH-ключи мы будем создавать с помощью ssh-keygen.

$ ssh-keygen -t rsa -b 4096

В результате получим два файла: id_rsa и id_rsa.pub (приватный и публичный ключи). Никогда и никому не передавайте свой приватный ключ.

Подробную инструкцию по созданию ключей вы найдёте здесь.

Импорт публичного ключа в Amazon


Импортируем только что созданный публичный ключ в платформу Amazon.

  1. Заходим в консоль управления Amazon.
  2. Кликаем AWS services → Compute > EC2
  3. Кликаем на левое меню Network & Security → Key Pairs
  4. Кликаем «Import Key Pair» и загружаем публичный ключ (id_rsa.pub)

Создаём свою виртуальную машину


Установим в Amazon EC2 виртуальную машину под управлением Ubuntu. Настройка подробно описана здесь:

  1. Заходим в консоль управления Amazon.
  2. Кликаем AWS services → Compute → EC2
  3. Выбираем запускаемый экземпляр.
  4. Выбираем один из образов. В нашем случае это будет Ubuntu Server 16.04 LTS (HVM), с SSD-накопителем (но вы можете выбрать то, что вам больше подходит).
  5. Выбираем виртуальную машину (в соответствии с вашими нуждами). Кликаем «Review» и «Launch».
  6. Открываем новую вкладку и импортируем в Amazon созданный публичный ключ.
  7. Здесь нас попросят «выбрать существующую пару ключей или создать новую» («Select an existing key pair or create a new key pair»). Жмём «выбрать существующую» («Choose an existing key pair»). Выбираем ранее загруженный ключ.
  8. Кликаем «Launch Instances».
  9. Кликаем на ссылку виртуальной машины, которую мы только что создали.

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

Подключаемся к новому серверу


Обращаемся к виртуальной машине по SSH.

Пишем в терминале:

$ ssh <USЕR>@<IP-ADDRЕSS> -p 22 -i <PATH-TO-PRIVАTЕ-KEY>

  • <USЕR>: пользователь Linux-системы. В случае с Amazon используйте ubuntu, на других сервисах — root
  • <IP-ADDRЕSS>: IP-адрес созданной нами виртуальной машины. Это поле «Public DNS (IPv4)» во вкладке «Description» нашего сервера.
  • <PATH-TO-PRIVATЕ-KEY>: полный путь к сгенерированному ранее приватному ключу (например, /Users/flavio/.ssh/id_rsa).
  • -i <PATH-TO-PRIVATЕ-KEY>: это можно пропустить, если вы добавили ключ в свой SSH-агент.

Даём доступ новому пользователю


Создадим новый аккаунт пользователя по имени “wizard”:

$ sudo adduser wizard

Дадим “wizard” разрешение выполнять sudo. Откроем файл:

$ sudo nano /etc/sudoers.d/wizard

И зададим содержимое:

wizard ALL=(ALL) NOPASSWD:ALL

Создадим директории:

$ mkdir /home/wizard/.ssh
# create authorized_keys file and copy your public key here
$ nano /home/wizard/.ssh/authorized_keys
$ chown wizard /home/wizard/.ssh
$ chown wizard /home/wizard/.ssh/authorized_keys

Скопируем публичный ключ (PATH-TO-PUBLIC-KEY) и вставим в удалённый экземпляр /home/wizard/.ssh/authorized_keys. Настроим разрешения:

$ chmod 700 /home/wizard/.ssh
$ chmod 600 /home/wizard/.ssh/authorized_keys

Обеспечиваем безопасность


Обновляем все установленные пакеты.

$ sudo apt-get update
$ sudo apt-get upgrade

Меняем SSH-порт с 22 на 2201. Для конфигурирования файрвола (ufw, Uncomplicated Firewall, незатейливый файрвол) открываем файл /etc/ssh/sshd_config:

$ sudo nano /etc/ssh/sshd_config

и меняем эти данные:

Port 2201
PermitRootLogin no
PasswordAuthentication no
# add this to avoid problem with multiple sshd processes
ClientAliveInterval 600
ClientAliveCountMax 3

Перезапускаем SSH-сервис:

$ sudo service ssh restart

Конфигурируем Uncomplicated Firewall (UFW) так, чтобы пропускались только входящие подключения SSH (порт 2201), HTTP (порт 80) и NTP (порт 123).

# close all incoming ports
$ sudo ufw default deny incoming
# open all outgoing ports
$ sudo ufw default allow outgoing
# open ssh port
$ sudo ufw allow 2201/tcp
# open http port
$ sudo ufw allow 80/tcp
# open ntp port : to sync the clock of your machine
$ sudo ufw allow 123/udp
# turn on firewall
$ sudo ufw enable

Конфигурируем серверные часы


Устанавливаем в качестве локального часового пояса UTC:

$ sudo dpkg-reconfigure tzdata

Выбираем опцию ‘None of the Above’ и снова UTC.

Отключаемся и добавляем наш ключ в SSH-агент


Для отключения вводим:

$ exit

а потом добавляем ключ.

Добавляем в Amazon разрешения по порту


Это необходимо сделать в Amazon. Зададим SSH-порт, который будем использовать также на Amazon.

  1. Заходим в консоль управления Amazon.
  2. Кликаем AWS services > Compute > EC2
  3. Кликаем на левое меню Network & Security → Security Groups
  4. Выбираем группу безопасности, относящуюся к нашей виртуальной машине.
  5. Кликаем Action > Edit Inbound Rules
  6. Кликаем «добавить правило» («Add Rule») и задаём: Type: Custom TCP, Port Range: 2201, Source: 0.0.0.0/0 и Description: SSH

Подключаемся с новыми данными


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

$ ssh wizard@<IP-ADDRESS> -p 2201 -i <PATH-TO-PRIVATE-KEY>

Теперь у вас есть сервер, готовый обслуживать ваше приложение.
Tags:
Hubs:
+6
Comments 12
Comments Comments 12

Articles

Information

Website
www.nixsolutions.com
Registered
Founded
1994
Employees
1,001–5,000 employees