Видео по настройке VPS на Linode

  • Tutorial
На Хабре полно разных инструкций, как связать Nginx с php5-fpm, даже я уже такую писал. Но сегодня предлагаю кое-что новенькое, а именно видео-инструкцию покупки и настройки собственного VPS на Linode.

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

Смотреть видео категорически не рекомендуется супер-крутым админам и беременным женщинам!



Под катом подробности организации + план работ с кусками кода, для удобного копипастинга.

Как работает


Сервер строится на базе Ubuntu + Nginx + Php5-fpm + mySql + Sendmail.

На каждый сайт приходится
— 1 выделенный пользователь
— 1 база данных
— 1 доступ по SFTP

Все файлы сайта принадлежат этому юзеру, он может заходить удалённо и менять их. Php для сайта запускается от имени этого пользователя и обладает его правами.

Помимо ограничения прав php правами юзера, он также запускается с отключением опасных функций и включением open_basedir в директорию юзера.

Такая конфигурация, на мой взгляд, максимально безопасна. Если поломают один сайт — все остальные даже потрогать не смогут.

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

Для доступа в консоль сервера используется юзер user. Вам я советую создавать этого пользователя под другим именем. Суперпользователю root вход запрещен вообще, чтобы злоумышленнику кроме пароля пришлось подобрать еще и имя.
После входа на сервер user может делать sudo и получать привелегии root.

Этот пользователь должен использоваться только для управления сервером. У него нет сайтов, он не владеет файлами сайтов. Конечно, он также может использовать SFTP для своих нужд.

Сам порт ssh защищается от перебора iptables, путём блокировки неудачных попыток входа на 30 секунд.

Почтовый сервер настраивается только на отправку писем. Получение почты я рекомендую отдать Яндекс или Google.

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

Советую самостоятельно настроить резервное копирование и выгрузку в Dropbox, этого на видео нет.

Этапы установки


1. Регистрация на Linode

Для регистрации предлагаю две ссылки: реферальную (нажать Sign up справа вверху), и обычную. Кликайте в зависимости от настроения.

Для оплаты я использовал Qiwi Visa Virtual, на которую положил $ 20.

Если платить во второй половине месяца — то снимут деньги за полтора месяца. Если в первой — то только за остаток текущего, поэтому там вышло всего около $ 16.

2. Настройка ssh
Нужно запретить вход root, создать юзера для sudo и защитить 22й порт.

Скрипт защиты
#!/bin/bash

# Очистка цепочек правил
iptables -F INPUT
iptables -Z INPUT
iptables -P INPUT ACCEPT

iptables -F OUTPUT
iptables -Z OUTPUT
iptables -P OUTPUT ACCEPT

iptables -F FORWARD
iptables -Z FORWARD
iptables -P FORWARD ACCEPT

# Защита порта ssh, время блокировки - 30 секунд
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 30 -j DROP
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT


В /etc/ssh/sshd_config
— Меняем PermitRootLogin no
— Комментируем #Subsystem sftp /usr/lib/openssh/sftp-server
— Добавляем в конец
Subsystem sftp internal-sftp
Match Group sftp
	ChrootDirectory %h
	AllowTCPForwarding no
	ForceCommand internal-sftp


3. Установка нужных пакетов
apt-get install python-software-properties
add-apt-repository ppa:nginx/stable
apt-get update
apt-get dist-upgrade -y
apt-get install nginx php5-fpm mysql-server php5-mcrypt php5-mysql php5-curl php-db php5-gd unzip zip sendmail htop


Во время установки нужно указать пароль для root mySql.

4. Настройка почты
В /etc/hosts нужно указать внешний ip сервера для своего домена (или localhost), чтобы sendmail мог определять свой ip.
Имя домена нужно указать в /etc/hostname.

127.0.0.1       localhost
195.167.123.115   mydomain.com mydomain


Затем нужно указать не принимать свои же письма при отправке на свой домен в /etc/mail/sendmail.mc
define(`MAIL_HUB', `mydomain.com.')dnl
define(`LOCAL_RELAY', `mydomain.com.')dnl


Потом в консоли
sendmailconfig
service sendmail restart


И проверяем
echo -e "To: user@mydomain.com\nSubject: Test\nTest\n" | sendmail -bm -t -v


5. Установка и проверка скриптов MODX
Addplace — gist.github.com/bezumkin/3833852 — Создаёт место под сайт
Install — gist.github.com/bezumkin/2179479 — Создаёт место и ставит MODX
Update — gist.github.com/bezumkin/2179440 — Обновление MODX
Remove — gist.github.com/bezumkin/2179492 — Удаление места с сайтом и БД

6. Установка PhpMyAdmin
Качаем дистрибутив отсюда.
Создаём директорию config, доступную для записи, настраиваем логин\пароль для БД и сохраняем конфиг.
Затем переносим его в корень сайта, немного меняем дамп таблиц pma и импортируем их в БД.

Не забудьте удалить директории config и setup, после успешной настройки.

Теперь всё должно работать.

Updated.


Cейчас у поста -2. 12 плюсов и 14 минусов.
Действительно, это такой плохой и ненужный никому пост, что его надо затопить, дабы никто не видел?

А кто эти 34 человека, которые занесли его в закладки?

Положим, я сейчас расстроюсь и уберу ненужный пост в черновики — кому от этого станет лучше? Есть мнение, 34 человека не обрадуются, когда соберутся его перечитать. А 14 человек и не узнают об этом никогда. Минусанул молча и пошел себе дальше.

Где критика видео, где указание на недочёты, или может, ссылки на подобные ролики? Я что, Apache2 из под рута запускаю, или что?

Похоже, это последний раз когда я что-то публикую на Хабре. Наверное, просто не понимаю, что нужно местной аудитории.
Поделиться публикацией

Похожие публикации

Комментарии 43
    –6
    А ролики как переустановить виндоус и сделать сайт на юкозе будут?
      +1
      А ведь действительно грамотный ролик для того чтобы давать знакомым бы не помешал.
        +7
        Нос задирать легко, а снять и смонтировать обучающее видео сложнее.

        Я работаю с MODX и стараюсь помогать новичкам, в том числе, и уходить от кривых shared-хостингов. Если тебе это не надо — почему бы просто мимо не пройти?

        .
          +3
          Шаг в лево, шаг в право и ваши установочные скрипты работать не будут. Легче админа за 20-30$ нанять.
            +1
            Только директории поправить. Основной принцип незачем менять: один сайт == один юзер со своей БД и SFTP.

            Скрипты избавляют от опечаток и других неприятных ошибок. После установки сайта всегда можно вручную докрутить конфиги.
            +4
            Вы во многом даете неправильный посыл для новичков. Вот поэтому такие статьи и не очень любят, хотя для того чтобы просто работало кое-как, сойдет.
              0
              Можно подробнее?
                +2
                Это подробнее на статью больше вашей в раз пять выйдет. Выберите сами из пункта со 2 по 4. 5 и 6 не моя компетенция.
                  0
                  Ясно, значит это был просто комментарий Хабра-style.
                    +2
                    Не, честно, выберите пункт со 2 по 4 и я вам развернуто отвечу, или вы так боитесь критики?
                      +1
                      Давайте пункт 3, какие там ошибки?
                        +3
                        О, спасибо, это самый просто и короткий. Во-первых, несмотря, что вы разворачиваетесь на LTS, не помешает обновить пакеты, при этом до установки всего остального софта. Потом неплохо было бы устроить хоть минимальное самообновление, убунту позволяет это делать достаточно просто. Зачем пользователю навязывать ненужные ему mc и htop? Постоянно это вижу в таких горе-туториалах, все необходимое уже есть в системе.

                        Еще на этом этапе я настраивая синхронизацию времени, локаль и часовой пояс.

                        Но это не слишком интересная часть, интереснее, там где настройка sudo и ssh. Я бы там вообще все по-другому сделал.

                        Но я опять же говорю, чтоб работало кое-как, вполне сойдет.
                          +2
                          На 04:33 видео есть upt-get update. Это всё-таки видео инструкция, а текст для копипаста при настройке.

                          Новичку htop и mc очень нужные. Можно и об этом поспорить, но несколько килобайт на HDD роли не сыграют в любом случае.

                          На Linode установлен ntpd, время синхронизируется. Остальное каждый настроит сам, полагаю, видео не хотелось раздувать.

                          Вообще, какой смысл комментировать видео для новичков в таком стиле? Это «кое-как» работает, и работает лучше подавляющего большинства shared-хостингов.

                          Тру-админъ, конечно, в 500 раз круче умеет, но почему-то новичков не учит и видео не снимает, ограничиваясь ехидством в комментариях.
                            +2
                            Вот это проблема таких туториалов, вроде бы они и помогают, но у них есть и обратная, темная, так сказать, сторона.

                            apt-get update это вроде бы обновление локального индекса пакетов, а не самих пакетов. apt-get upgrade -y или apt-get dist-upgrade -y (у этого варианта есть противники правда).

                            htop вполне может быть, а вот mc отбрасывает новичка далеко в 90-е. Редактировать файлы? nano есть, копировать, удалять и т.д. Так толку то от mc, если практически те же команды (ls, cd, rm, cp) прийдется использовать по sftp? Хотя это я, наверное, неправ, никто из потенциальной аудитории не будет работать с sftp напрямую (да и неоткуда в виндоусе).

                            Насчет того, что лучше shared-хостингов, вы, наверное, правы. В том время когда я ими пользовался это был неимоверный ад, хотя сейчас есть всякие cloud-сервисы типа heroku, dotCloud и т.п. Там все элементарно и удобно. А главное не нужен админ-бэкграунд.
                              +1
                              У меня на сайте куча вопросов про кривые shared-хостинги, именно поэтому в своё время я написал довольно популярный пост.

                              Новое видео — его экранизация, дополненная скриптами для MODX.

                              С одной стороны да, такие инструкции могут отбросить человека в освоении серверов. А с другой — без таких инструкций человек может и не прийти к своей VPS.

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

                                +2
                                Ну так это потенциально будущие админы :)

                                Может я конечно предвзят, но для схемы одно приложение (сайт) – один сервер, сейчас лучше использовать что-то вроде AppFog, там вообще не надо быть админом. С другой стороны, для проектов 1 приложение – ~10 серверов (инстэнсов) есть Chef, Puppet и иже с ними.
                            +1
                            Читая ваши комментарии, вспоминается выражение:
                            «Кончились аргументы? Доебись до орфографии!»

                            П.с. по поводу софта, я скажу так, каждый выбирает то чем ему удобно пользоваться ибо для меня иной раз очень удобны инструменты mc и htop, Поедем далее, когда программисту нужно тупо быстро поднять девелопер ноду, он не будет заботится о настройке sudo и менять порты в ssh, максимум до чего у него руки дойдут это до ключей авторизации. ИМХО если же все делать по «фен шую» то на это у новичка реально времени уйдет на много больше.
                              0
                              Это вы мне написали? Типа не важно, что человек не знал как обновлять пакеты и дистрибутив, не знает, что синхронизация времени происходит в убунте только при старте, ничего не сказал о локали и часовом поясе? При том, что он выбрал пункт, в котором труднее всего налажать.

                              Речь идет не о девелопер ноде, а о мини-хостинге, где есть сайты клиентов. Порты менять в ssh дурной тон, разве что ssh используется не как шел, а, например, для того, чтоб порт пробросить, security through obscurity это не наш путь. За часть с sftp я бы даже похвалил автора, он пошел более простым методом, чем обычно принято (vsftpd с sftp, ftp и ftps), чем действительно облегчил жизнь новичкам, не ударив по безопастности. Опять же, повторю свое ИМХО, новичкам вполне хватит облачных сервисов.
                                0
                                Да именно вам. Я не делал акцент на том знал автор или нет про обновление пакетов. Я делал акцент на том, то что автор указал в своем уроке различные инструменты и вы его начали упрекать в этом. По поводу портов, ИМХО грош цена словам вашим, ибо в них я не увидел ни единого аргумента.
                                  0
                                  Портов? Вы думаете, что если бросите ssh на 56435 ваша безопастность как-то повысится? Единственным боком она может повысится при прямом переборе, ибо такой глупый способ используют только на 22. Я даже затрудняюсь, какой годовой улов таких «хакеров», 0.0001% или 0.00001% от просканированых хостов. Если есть эксплойт под ssh, то всегда сканируют все 65535, можете мне поверить, это «стоит не так дорого» как вам может показаться. Поэтому, я считаю этот способ самым бесполезным из всех, которые могут быть. №2 — это поменять банер, а в нем версию ssh)
                                    0
                                    Эм… пока что я больше верю своим логам — по поводу скана ssh, нежели вам. по поводу защиты в целом, тут отдельная песня о которой я даже и разговаривать не хочу, т.к. эту тему можно обсасывать бесконечно. ну и по поводу того что и куда бросить — я не то чтобы думаю, я знаю как и что мне сделать, меня в этих вопросах лечить не надо, я только высказываю свою точку зрения.
                                      0
                                      Не, мне интересно, скинте на pastbin лог такой «атаки». Я скину своих парочку. По моим наблюдениям, есть три типа «ssh-хакеров»: сканируют один раз по юзернэймам oracle, mysql и т.д., сканируют переодически 200–500 запросов сегодня, столько же завтра (хотя я не вижу, что за пароли, может одни и те же, тогда это вообще пипец), ну и те, кто сканируют целенаправленно root, admin (по несколько суток). Я даже не ставлю ограничение на количество, чтоб посмотреть на сколько хватит у них терпения.

                                      Что интересно, пару лет назад, я слал на abuse@ который «привязан» к ip жалобы с логами, никто ни разу не ответил. Ни китайские, ни бразильские, ни турецкие, ни американские провайдеры.
                                  0
                                  Типа не важно, что человек не знал как обновлять пакеты и дистрибутив
                                  Я обновляю индекс пакетов при первом заходе на сервер и дальше все они устанавливаются последней версии.
                                  Да, полностью дистрибутив я не обновил, иначе видео было бы минут на 10 дольше.

                                  не знает, что синхронизация времени происходит в убунте только при старте,
                                  На серверах Linode устанавливается ntpd, по умолчанию, который берет синхронизацию на себя. Во всяком случае, в образе Ubuntu так.

                                  ничего не сказал о локали и часовом поясе?
                                  Локаль обычная, en_US.UTF-8, не нужно её менять. Часовой пояс выставляется для каждого сайта индивидуально, в /etc/php5/pool.d/sitename.conf

                                  По умолчанию там Europe/Moscow.
                                    0
                                    Коротко: обновление пакетов можно начать, но не показывать до конца (монтаж), часовой пояс нужен не только для сайтов, локаль важна для сортировок (LC_COLLATE) не знаю как mysql, но postgres, mongo очень на нее расчитывают и плохо если там будет C или en_US.UTF-8, а вам нужно будет отсортировать по кириллице.

                                    Сорри за ntpd, перепутал с ntpdate.
                                      0
                                      Добавил в текст apt-get dist-upgrade -y
                                        +1
                                        Ой блин, вы зря. Я же написал, что dist-upgrade спорный. Добавте просто upgrade, а для минорных обновлений напишите do-release-upgrade. Дебианы обновляются обычно через dist-upgrade, у Убунты есть свои тонкости, поэтому лучше придерживаться do-release-upgrade, а то после обновления, можно и не загрузиться.
              +3
              Спасибо за пост.
              Для товарища zhovner — не вся аудитория хабра админы. И лично мне пост пригодится хотя бы даже в качестве общей информации.
                –8
                Подобные пошаговые howto взращивают только идиотов.

                А это вообще шедевр gist.github.com/bezumkin/2179479

                Снимите еще эти прекрасных видео про установку nginx и phpMyAdmin да выпейте чаю.
                  +3
                  Товарищ, аргументируйте! Предложите свой вариант, а мы оценим ваш шедевр.
                    0
                    Зачем? Проще ведь ведро помоев вылить, чем помочь кому-либо.
                      0
                      Троль он )
                  +6
                  можно вместо iptables
                  ufw allow ssh
                  ufw allow http
                  ufw allow https
                  ufw enable

                  лучшая защида для ssh — просто выключить вход по паролю, оставить только по ключам
                    +5
                    Как всегда такое в штыки встречают, а ведь суть-то как раз в том,
                    что материал удобен тем, кто с этим не сталкивался. А это как входной билет.

                    А уж до разницы cd, ls итд или mc каждый для себя сам дойдет, если ему это в принципе будет нужно. Ну а по самим настройкам, тут уж на вкус и цвет…

                    +1
                      –1
                      Стать хороша. Расписано отлично.

                      Вот только зачем дублировать почти полностью свою-же статью: habrahabr.ru/post/139461/ за март 2012? (2-6 пункты)
                        +1
                        Пост анонсирует видео-инструкцию.

                        Текст добавлен для удобного копипастинга при настройке, чтобы не разглядывать, что я там набираю каждый раз.
                        0
                        как раз вчера себе купил хостинг на линоде. опоздала ваша статья — сам уже настроил. там кстати туториал лучше вашего :)
                          0
                          Рыдаю в подушку.
                          0
                          1. iptables default policy — accept? На сервере в открытой сети? Ой как сомнительно. Обычно ж всё закрывают и открывают нужное по белому списку.

                          2. Зачем вообще в таблице forward — accept? Это же не роутер.
                            0
                            Это дефолтные параметры iptables. У меня они указаны, чтобы гарантированно сбросить все правила, которые новичок мог накрутить. Кому надо — изменит.

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

                                Речь не про настройку iptables для чего-то, речь о том, что я добавляю одно правило, приводя всё остальное к умолчанию.

                                Наружу смотрят только 22 и 80 порты,. Может, подскажите, что нужно еще «зафаерволить»?

                                  0
                                  Простой сценарий — при настройке sendmail / mysql пропадает строчка bind'а и он начинает торчать в сеть. Плохо. Accept 22, 80, Deny All — простой способ избежать таких конфузов.

                                  А ssh порт я бы вообще унёс на какой-нибудь нестандартный из верхнего диапазона, чтоб лишний раз не брутфорсили.
                            0
                            Спасибо за статтю, всегда полезно ознакомиться с опытом других.

                            Если говорить именно о Линод, то у них есть отличная вещь для автоматизации установки нового впс — StackScripts.

                            Вот пример для WordPress с модулем WP SuperCache и Nginx/PHP/MYSQL
                            www.linode.com/stackscripts/view/?StackScriptID=3229

                            Кстати для ModX не нашел скрипта, так что есть шанс быть первым :)

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое