Защита виртуального сервера VDS Linux. Часть 2

По умолчанию SSH использует порт 22. Но вы можете перенастроить его на другой порт из соображений безопасности — тогда для подключения по SSH нужно знать еще и номер порта. Откройте /etc/ssh/sshd_config и найди директиву Port. Вместо 22 укажите другой порт:
Port 2206
После этого перезапустите SSH и перелогиньтесь. При входе в настройках клиента укажите новый номер порта.
Настройка брандмауэра
Разобравшись с безопасностью пользователей, нужно настроить брандмауэр. Традиционно в качестве брандмауэра (фильтра пакетов) в Ubuntu используется iptables, но поскольку Ubuntu позиционируется как простой дистрибутив, то и оболочка для iptables была разработана соответствующая — UFW (Uncomplicated Firewall). Это несложный файрвол. Первым делом убедитесь, что пакет ufw вообще установлен, и установите его, если это не так:
sudo apt install ufw
Базовая настройка брандмауэра
Теперь посмотрим состояние брандмауэра:
sudo ufw status verbose
По умолчанию фильтр пакетов выключен, поэтому команда выведет сообщение Status: inactive. Не нужно спешить включать файрвол: сначала его требуется настроить. Ведь если порт 22 окажется по умолчанию недоступен, то вы потеряете доступ к своему VDS. Конечно, саппорт поможет, но это напрасная трата времени.
С базовыми настройками брандмауэр запрещает все входящие соединения и разрешает все исходящие. Такая политика идеальна с точки зрения безопасности — ведь если кто‑то (и вы в том числе) захочет к нему подключиться, у него это не получится. В то же время приложения на сервере смогут создавать исходящие соединения.


Разберемся, что произошло. Сначала мы разрешили SSH и получили ответ Rules updated, то есть правила обновлены. Затем мы включаем файрвол и получаем сообщение, что он активен и будет запускаться при загрузке системы. На этом базовая настройка выполнена — SSH успешно работает, и мы можем приступить к дальнейшей настройке фильтра пакетов.
Создание правил для сервисов
Теперь нужно разрешить работу других приложений. Как правило, требуется разрешить службу HTTP (веб‑сервер), FTP (если этот сервис вам нужен) и постараться не забыть о HTTPS (что очень важно в последнее время):
ufw allow http ufw allow https ufw allow ftp
Сделать то же самое можно было бы и по номерам портов:
ufw allow 80 ufw allow 443 ufw allow 21
При желании можно разрешить целый диапазон портов, указав при этом транспортный протокол (UDP или TCP):
sudo ufw allow 2000:2200/tcp sudo ufw allow 4000:4400/udp
Разрешение IP-адресов
Ufw позволяет разрешить определенному IP-адресу доступ ко всем портам сервера, например:
ufw allow from 111.222.33.44
Если нужно разрешить доступ конкретному IP-адресу только к определенному порту, то делается это так:
ufw allow from 111.222.33.44 to any port 22
Здесь мы разрешаем не все подключения к SSH, а только подключения с IP-адреса 111.222.33.44.
Делать это нужно только в том случае, если у вас постоянный IP — такой IP можно получить за дополнительную плату у вашео провайдера. Обычно у пользователей динамические IP-адреса — если вы прямо сейчас посмотрите свой внешний IP, укажете его в команде выше, то, как только ваш IP поменяется, вы лишитесь доступа к серверу. Так что будьте осторожны!
Разрешить доступ целого диапазона IP-адресов (например, когда у админа динамический IP) можно таким образом:
ufw allow from 123.45.67.89/24 to any port 22
Запрещение IP-адреса и службы
Чтобы запретить доступ с определенного IP-адреса, воспользуйтесь вот такой командой:
ufw deny from 123.45.67.89
При желании можно запретить все подключения к определенной службе:
ufw deny ftp
Удаление и сброс правил
Сбросит все правила следующая команда:
ufw reset
Но до того, как вводить эту команду, убедитесь, что отключили файрвол (команда ufw disable), иначе потеряете доступ по SSH.
Удалить конкретное правило можно по номеру. Сначала введите следующую команду, чтобы узнать номер правила:
ufw status numbered
Далее введите команду такого вида:
ufw delete <номер правила>
Настройка резервного копирования
Как правило, в админке управления серверами и другими услугами провайдера есть возможность настроить резервное копирование для каждого сервера. В зависимости от условий тарифного плана бэкап может быть бесплатным (то есть вы можете использовать какой‑то объем пространства под бэкапы), а может быть платным. Как показывает практика, часто провайдеры требуют плату за хранение бэкапов, поэтому сама возможность резервного копирования хоть и имеется, но выключена, чтобы у клиента не было дополнительных трат.
У вас, как у админа VDS, есть два варианта. Первый — использовать средства резервного копирования провайдера, второй — настроить резервное копирование на своем сервере. Бэкап на стороне провайдера надежнее, так как резервная копия хранится за пределами сервера. Второй вариант менее надежен, поскольку если что‑то случится с файловой системой сервера, то вы потеряете все свои данные.
Как быть? Лучше всего использовать комбинированную систему — настроить бэкапы на стороне провайдера со средней периодичностью, скажем раз в неделю. При такой периодичности счет за бэкапы не будет космическим. Зато, если что‑то случится с файловой системой, сможете восстановить данные, пусть и не самые актуальные, но это лучше, чем начинать все с нуля.
А теперь поговорим о бэкапе вручную на стороне сервера. Есть целые решения для резервного копирования. Нужны они или нет — решать вам. Я же предлагаю пойти по самому простому пути. Первым делом надо определиться, какие данные стоит резервировать.
Если у вас на сервере сайт (например, интернет‑магазин), то копировать нужно только файлы корневого каталога веб‑сервера ( DocumentRoot, обычно это /var/www/html, но зависит от настроек сервера) и базу данных.
Файлы веб‑сервера можно копировать раз в неделю — они меняются относительно нечасто. Если вы делаете бэкап средствами провайдера, скажем каждую пятницу, то бэкап файлов сервера можно делать в середине недели — в среду. Тогда у вас будет на всякий случай две резервные копии за неделю. Можно и чаще — главное, чтобы хватило места на диске. Если у вас 1 Тбайт, а сайт весит 250 Гбайт, то очень часто бэкапы создавать не придется.
Создать архив с резервной копией файлов сайта можно командой:
zip -r /backups/latest.zip /var/ww/html
Эту команду нужно добавить в расписание crontab. Введите команду crontab –e и добавьте строчку:
1 0 2 * * 3 /usr/bin/zip –r /backups/latest.zip /var/ww/html
Делать бэкап лучше всего ночью, чтобы снизить нагрузку на сервер. Здесь копия будет создаваться по средам в два часа ночи. Распаковать архив можно с помощью команды unzip.
Теперь о базе. Изменения в базу данных вносятся постоянно: менеджеры добавляют информацию о продуктах, какой‑то скрипт импорта изменяет цены и остатки товаров, а посетители делают заказы. Поэтому копия базы должна создаваться раз в день. Для копии используем mysql-dump:
mysqldump -u cp_user -p --opt cp_main_v2 --max_allowed_packet=100M > db-latest.sql
Здесь cp_user — имя пользователя БД, cp_main_v2 — имя базы данных, опция max_allowed_packet задает максимальный размер пакета — на случай, если БД занимает несколько гигов, эта опция вас спасет. Бэкап делается в файл db-latest.sql. Восстановиться можно так:
mysql --host=127.0.0.1 --port=3310 --max_allowed_packet=100M -u cp_user -p cp_main_v2 < /db-latest.sql
Назначение параметров должно быть понятно. Параметры host и port можно не указывать, если MySQL работает на localhost и использует стандартный порт. Команду создания дампа нужно запускать каждый день, поэтому в crontab добавляем строку
0 1 * * * /usr/bin/mysqldump -u cp_user -p --opt cp_main_v2 --max_allowed_packet=100M > /root/db-latest.sql
Бэкап будет сниматься каждый день в час ночи (а в два мы запускаем создание бэкапа файлов).
Кроме бэкапов не забывайте о снапшотах! Перед каждым значимым изменением на сервере (вроде установки расширения, пересборки CMS, обновления ПО, например установки новой версии PHP) делайте снапшот. Да, всегда можно восстановиться из бэкапа, но бэкап у нас не самый свежий, да и времени такое восстановление занимает больше, чем восстановление из снапшота. Снапшоты тоже платные, но их цена ничтожна на фоне простоя production-сервера.
Установка админки
Лично мне проще и привычнее управлять сервером через SSH. Но если нужен графический интерфейс для выполнения ежедневных рутинных задач, можете установить панель управления. Выбор конкретной панели зависит от двух факторов: необходимой функциональности и стоимости панели управления. Если нужны бесплатные решения, смотрите в сторону Webmin и VestaCP. Остальные варианты менее популярны.
Заключение
Собственно, на этом все — базовая настройка и защита виртуального сервера VDS завершена. Теперь можно приступить к установке и настройке необходимого ПО (Nginx, MySQL, PHP и все такое).