Настройка Debian 7

В этой записи я бы хотел вам показать, как можно установить и настроить безопасный сервер на Debian 7, который будет работать на связки Nginx + Apache2. Также мы установим PHP и настроим MySQL. В итоге у нас получится сервер, на котором будет размещен один сайт, и он будет корректно работать.


Нам необходим абсолютно чистый Linux сервер, на котором лишь установлен Debian 7. Авторизуемся через терминал с правами root и начинаем!

Настройка SSH

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

nano /etc/ssh/sshd_config

Находим следующую строчку (обычно она первая, если не учитывать комментарии):

Port 22

И меняем 22 (порт по умолчанию) на любой другой в диапазоне от 1024 до 65535.
Применяем настройки:

service ssh reload

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

passwd

И после введите новый пароль и повторите новый пароль.
Смена пароля

Репозитории

Для Debian я использую следующие репозитории:

deb http://security.debian.org/ wheezy/updates main

deb http://nginx.org/packages/mainline/debian/ wheezy nginx
deb-src http://nginx.org/packages/mainline/debian/ wheezy nginx

deb http://repo.mysql.com/apt/debian/ wheezy mysql-5.6
deb-src http://repo.mysql.com/apt/debian/ wheezy mysql-5.6

Хранится такой список в /etc/apt/sources.list, однако последние 2 строчки лучше записать в /etc/apt/sources.list.d/mysql.list

Если вы будете использовать такие же репозитории, то нам необходимо выполнить еще следующие команды:

1. Для MySQL

wget http://repo.mysql.com/mysql-apt-config_0.2.1-1debian7_all.deb
dpkg -i mysql-apt-config_0.2.1-1debian7_all.deb

2. Для Nginx

wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key

После чего обновляем наш Linux сервер:

apt-get update
apt-get upgrade
apt-get dist-upgrade

Имя сервера

Теперь давайте настроим имя нашего сервера. Сделать это очень просто:
1. Выполняем следующую командy:

hostname site.com

Вместо «site.com» укажите ваш домен. Теперь отредактируем файл:

nano /etc/hostname

Там вы должны заменить написанное на ваш домен и затем выполнить следующую команду:

/etc/init.d/hostname.sh start

Настройка времени

Для настройки времени просто установите службу ntp:

apt-get install ntp

И теперь давайте настроим часовой пояс:

dpkg-reconfigure tzdata

Исходя из того, что я живу в России, я выбираю Europe/Moscow:

Настройка временной зоны

Настройка временной зоны

Локализация

В Debian вы можете выбрать несколько языков, которые будут поддерживать ваша система. Для этого воспользуемся командой:

dpkg-reconfigure locales

Там мы ищем en_US.UTF-8 UTF-8 и, скорее всего, уже будет стоять звездочка (это значит, что уже выбрано), но если не стоит, то нажмите пробел.

locales1

Затем ищем ru_RU.UTF-8 UTF-8 и жмем пробел.

locales2

Итого мы выбрали EN и RU с кодировкой UTF-8. Жмём enter и выбираем язык по умолчанию.

Почтовая система

Почти ни один сайт не обойдется без отправки сообщений на e-mail, поэтому было бы хорошо настроить данную службу. Лично я предпочитаю postfix, хоть есть и другие, например, exim4.

apt-get install postfix

Затем у вас появится окошко, где нужно будет настроить тип конфигурации почтового сервера, выбираем «Internet Site».

postfix_is
Имя почтового сервера = имени вашего сервера.

После того, как почтовый сервер успешно установится, его нужно будет настроить:

nano /etc/postfix/main.cf

1. Изначально inet_interfaces = all, но мы это изменяем и вместо «all» пишем 127.0.0.1. Иначе вас быстро завалит спамом.
2. Возможно, вы бы хотели отправлять какие-нибудь уведомления на почту вашего домена (к примеру на admin@site.com), но это работать будет, только если в mydestination вы сотрёте имя вашего домена, иначе все эти сообщения будут сохраняться локально на вашем сервере.
В принципе, больше нам ничего не нужно, поэтому перезагружаем postfix для сохранения настроек:

service postfix restart

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

nano /etc/aliases

И прописываем такую строчку:

postmaster:    root: root, admin@site.com

Разумеется, почту меняем на свою. Применяем настройки:

newaliases

MySQL

Теперь приступим к установке базы данных. На момент написания статьи актуальна версия 5.7, поэтому именно её мы и установим. Учтите, что если вы не добавили репозиторий с mysql, то возможно вам будет недоступна данная версия MySQL.

apt-get install mysql-server-5.6 php5-mysql

В процессе установки вам будет предложено придумать пароль. Не используйте простые пароли!

MySQL

И затем подтвердите введенный пароль. Рекомендую воспользоваться готовыми генераторами паролей.

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

nano /root/.my.cnf

И в кавычках впишите ваш пароль:

[client]
password = ""

Теперь просто и легко можно подключиться к базе данных через терминал:

mysql

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

Давайте обезопасим нашу базы данных:

mysql_secure_installation

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

Теперь хорошо было бы добавить нового пользователя в нашу базу, чтобы не подключаться к БД от root:

CREATE user 'user'@'localhost' IDENTIFIED BY 'password';

Давайте создадим базу для нашего будущего сайта:

CREATE DATABASE `my_db`;

И выдадим полные права на данную базу нашему пользователю:

GRANT ALL ON `my_db`.* to 'user'@'localhost';

Либо выдадим ему абсолютно все права:

GRANT ALL PRIVILEGES ON * . * TO 'user'@'localhost';

И после обновим все привилегии:

FLUSH PRIVILEGES;

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

PHP

Перейдем к установке.

apt-get install php5-common libapache2-mod-php5 php5-cli

Собственно, после этого на ваш сервер успешно установится php.

Apache

Сразу же приступим к установке:

apt-get install apache2 apache2-mpm-itk

После установки остановим apache2, чтобы произвести настройку:

/etc/init.d/apache2 stop

1. Если вы не знакомы с модулем autoindex, то рекомендую отключить его:

a2dismod autoindex

2. Скорее всего вам пригодится mod_rewrite, поэтому давайте его включим:

a2enmod rewrite

3. Теперь хорошо бы заставить apache2 слушать 81 порт:

nano /etc/apache2/ports.conf

И приведите соответствующие строчки к следующему формату:

#NameVirtualHost *:80
Listen 81

Теперь установим mod-rpaf для корректного отображения IP адресов в логах, ведь все запросы проксирует nginx:

apt-get install libapache2-mod-rpaf

И теперь запустим наш apache2:

/etc/init.d/apache2 start

Nginx

Установим:

apt-get install nginx

После установки защитим конфигурацию и файлы журналов:

chmod 750 /etc/nginx /var/log/nginx
chgrp adm /var/log/nginx

FTP

Куда же без FTP, поэтому давайте его сейчас и установим.

apt-get install proftpd

В окошке выбираем «standalone»:

proftpd

Пользователи

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

adduser username

Вам будет необходимо ввести пароль прочую информацию.

adduser

Добавление сайта

Теперь, когда наш сервер уже настроен и готов к работе, мы можем добавить наш первый сайт. Так как у нас используется связка apache2 + nginx, то настраивать придется всё.

1. Для начала необходимо создать некоторые директории:

mkdir /home/user/www
mkdir /home/user/tmp

*user — имя созданного пользователя. Данный пользователь будет являться владельцем сайта.

2. Теперь перейдем к настройке Apache2:
Переходим в директорию /etc/apache2/sites-available и создаем файл с вашим сайтом:

nano site.com

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

<VirtualHost 127.0.0.1:81>
        ServerName site.com
        AddDefaultCharset UTF-8
        AssignUserID user user
        DirectoryIndex index.html index.php
        DocumentRoot /home/user/www/site.com
        ServerAdmin admin@site.com
        ServerAlias www.site.com
        CustomLog /dev/null combined
        ErrorLog /dev/null
        <FilesMatch "\.ph(p[3-5]?|tml)$">
            SetHandler application/x-httpd-php
        </FilesMatch>
        <FilesMatch "\.phps$">
            SetHandler application/x-httpd-php-source
        </FilesMatch>
            php_admin_value sendmail_path "/usr/sbin/sendmail -t"
            php_admin_value upload_tmp_dir "/home/user/tmp"
            php_admin_value session.save_path "/home/user/tmp"
            php_admin_value open_basedir "/home/user/www/site.com:."
</VirtualHost>
<Directory /home/user/www/site.com>
    Options -ExecCGI
    php_admin_flag engine on
</Directory>

*user — имя созданного пользователя (в слове «AssignUserID» заменять ничего не нужно). Данный пользователь будет являться владельцем сайта.
*site.com — домен вашего сайта
*127.0.0.1 — IP вашего сайта.

И давайте включим наш сайт.

a2ensite site.com

3. Теперь нужно настроить nginx. Процедура схожа с процедурой настройки сайта на apache2. Создаем файл настроек:

nano /etc/nginx/conf.d/site.com.conf
server {
        server_name site.com;
        charset UTF-8;
        disable_symlinks if_not_owner from=$root_path;
        index index.html index.php;
        root $root_path;
        set $root_path /home/user/www/site.com;
        access_log off ;
        error_log /dev/null crit;
        location / {
                location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi$
                        try_files $uri $uri/ @fallback;
                }
                location / {
                        try_files /does_not_exists @fallback;
                }
                location ~ [^/]\.ph(p\d*|tml)$ {
                        try_files /does_not_exists @fallback;
                }
        }
        location @fallback {
                proxy_pass http://127.0.0.1:81;
                proxy_redirect http://127.0.0.1:81 /;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                access_log off ;
        }
        ssi on;
        listen 127.0.0.1:80;
}

*user — имя созданного пользователя.
*site.com — домен вашего сайта
*127.0.0.1 — IP вашего сайта.

Перезагружаем nginx и всё заработает:

/etc/init.d/nginx restart

Дополнительное ПО

Я уверен, что в будущем вам всё это пригодится. Я не буду расписывать что и зачем нужно, просто рекомендую к установке:

apt-get install sudo aptitude automysqlbackup curl php5-curl memcached php5-memcache php5-memcached git

Собственно это всё, что нужно для корректной работы сайта. Разумеется, настройки MySQL, Apache, Nginx вы можете регулировать под себя, под ваши задачи, но всё это делается после запуска вашего стартапа. Надеюсь вам было интересно читать 🙂

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *