Как использовать Firejail для установки WordPress в тюрьму

Вступление

При работе с веб-сервером, доступным для широкой публики, достижение баланса между обеспечением доступности вашего контента и настройкой безопасной конфигурации может оказаться затруднительным. Есть много разных областей, которые должны быть предметом тщательного изучения. Одним из них является изоляция процесса и видимость.

Проект под названием * firejail * стремится помочь в этой области, предоставляя облегченный механизм контейнеризации безопасности, который использует пространство имен ядра для реализации политик разделения. Это делает среду chroot чрезвычайно легкой.

В этом руководстве мы покажем вам, как использовать firejail для изоляции процессов в их собственной среде chroot. Чтобы продемонстрировать это на реальном примере, мы настроим две среды chroot: одну с веб-сервером Nginx, обслуживающим WordPress, а другую - с базой данных MySQL, которая будет обрабатывать данные сайта. Эти два экземпляра будут иметь свои собственные файловые системы и установки и будут взаимодействовать через сетевое устройство с мостовыми соединениями.

Предпосылки и цели

В этом руководстве мы будем использовать 64-битный сервер Ubuntu 14.04 в качестве базовой установки. Это позволит нам использовать предварительно созданные пакеты + firejail + и позволит легко создавать среды chroot.

Чтобы получить хорошую основу для установки, убедитесь, что вы выполнили настройку начального сервера https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 для Ubuntu 14.04]. Вот.

Мы будем настраивать две среды chroot в нашей хост-системе. На самом деле это будут стабильные среды Debian, и этот выбор выбран потому, что среды Debian лучше тестируются с помощью инструмента + debootstrap +, который мы будем использовать.

Наш хост-компьютер будет настроен с общедоступным IP-адресом и будет служить шлюзом для мостовой сети, которую мы настроим для связи с тюрьмами. Заключенные в тюрьму среды будут настроены только на использование интерфейса моста и смогут получать доступ к более широкому Интернету только через правила NAT на хосте.

Три среды, которые мы будем настраивать, будут иметь следующие свойства:

Environment Public IP Address Bridge IP Address

Host

10.10.20.1

Web Server

(none)

10.10.20.10

Database Server

(none)

10.10.20.20

Обратите внимание, что значение красного цвета выше должно быть заменено публичным IP-адресом вашего хост-сервера. Однако IP-адреса моста следует использовать как есть, поскольку мы будем настраивать этот интерфейс и эти адреса в руководстве.

В этом руководстве все команды будут выполняться от имени пользователя * root *.

Загрузите и настройте компоненты хост-машины

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

Сначала нам нужно скачать пакет + .deb + для программы firejail. Найдите последнее имя пакета + .deb + на странице download сайта и замените часть имени файла в приведенном ниже URL-адресе на эту версию. URL-адрес ниже является прямой ссылкой на скачивание пакета:

cd ~
wget http://downloads.sourceforge.net/project/firejail/firejail/

Когда файл будет загружен, установите его с помощью + dpkg +:

dpkg -i firejail*

После установки программы firejail нам нужно получить дополнительные пакеты из стандартных репозиториев Ubuntu. В частности, нам нужен инструмент + debootstrap +, который поможет нам создать наши файловые системы chroot, и + bridge-utils +, который позволит нам создать интерфейс сетевого моста, который наши тюрьмы будут использовать для связи:

apt-get update
apt-get install debootstrap bridge-utils

Настройте интерфейс моста

Прежде чем мы начнем с настоящими тюрьмами, мы настроим сетевой мостовой интерфейс.

Мы можем создать новый интерфейс с помощью команды + brctl +, которая была частью пакета + bridge-utils +. Наш мост будет называться + br0 +:

brctl addbr br0

Далее нам нужно поднять интерфейс. Наряду с активацией интерфейса мы назначаем диапазон сети CIDR. Наш хост-сервер будет иметь адрес * 10.10.20.1 * на этом интерфейсе:

ifconfig br0 10.10.20.1/24

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

echo "1" > /proc/sys/net/ipv4/ip_forward

Теперь нам нужно установить правило + iptables +, которое позволит перенаправлять трафик, предназначенный для порта 80 на нашем хост-сервере, на веб-сервер, который мы будем устанавливать в одной из наших тюрьм. Наш веб-сервер будет иметь IP-адрес * 10.10.20.10 * на нашем мостовом интерфейсе:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 10.10.20.10:80

Это добавляет правило в конец цепочки «PREROUTING» в таблице «nat». Когда пакет TCP, предназначенный для порта 80, получает доступ, трафик перенаправляется на порт 80 по + 10.10.20.10 + посредством трансляции сетевых адресов.

Нам также необходимо установить ряд правил, которые позволят нашей базе данных и веб-серверу запрашивать Интернет, чтобы они могли обновлять компоненты из WordPress. Мы начнем с добавления правила маскарада, которое позволит нашему интерфейсу + br0 + успешно маршрутизировать связь через наш хост-компьютер:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Затем мы можем заблокировать связь между нашими интерфейсами, изменив правила в цепочке FORWARD.

Во-первых, мы должны отразить наше предыдущее правило NAT, которое было установлено, чтобы мы могли явно разрешить трафик от порта 80 в нашу сеть + br0 +:

iptables -A FORWARD -i eth0 -o br0 -p tcp -m tcp --dport 80 -j ACCEPT

Мы также хотим разрешить входящий трафик, связанный с нашими установленными соединениями:

iptables -A FORWARD -i eth0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT

Мы хотим разрешить пересылку всего трафика, происходящего через интерфейс + br0 +, чтобы наши тюрьмы могли общаться друг с другом и с внешним миром:

iptables -A FORWARD -i br0 -j ACCEPT

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

iptables -P FORWARD DROP

Теперь наша хост-система настроена с мостовым интерфейсом, который она будет использовать для связи с окруженными средами.

Создайте структуру каталогов Chroot

Теперь мы готовы создать наши структуры каталогов chroot.

Как мы уже говорили, наш веб-сервер и наш сервер баз данных будут работать в совершенно разных файловых системах. Мы будем хранить обе эти файловые системы в каталоге под названием + / jails +. Создайте этот каталог сейчас:

mkdir /jails

Перейдите в каталог, который вы только что создали:

cd /jails

Теперь нам нужно создать файловые структуры, которые будут использоваться нашими заключенными в тюрьму операционными системами. Для этого мы будем использовать инструмент + debootstrap +. Эта утилита была создана для начальной загрузки среды Debian в существующей файловой системе. Это делается путем извлечения пакетов из репозиториев Debian и «установки» их в правильное местоположение.

Хотя + debootstrap + можно использовать для начальной загрузки среды Ubuntu, вместо этого мы будем выбирать стабильные установки Debian. Поскольку инструмент был создан для работы с Debian, эти среды являются наиболее хорошо протестированными для этого инструмента.

Мы будем устанавливать нашу базу данных в каталог с именем «db». Чтобы создать соответствующую структуру каталогов, а также загрузить и установить необходимые пакеты, введите:

debootstrap --arch=amd64 stable db

Теперь, когда наша файловая система построена в каталоге + / jails / db +, мы можем использовать + rsync +, чтобы скопировать структуру в другой каталог, который может использовать наш веб-сервер. Новый каталог будет называться «www». Убедитесь, что вы обратили внимание на косую черту (/) в следующей команде. Это скопирует contents первого каталога во второй, вместо копирования самого каталога:

rsync -azvh db/ www

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

Используйте Firejail для настройки базы данных WordPress

Теперь, когда у нас есть структура каталогов, мы можем использовать + firejail + для создания среды chroot в нашей структуре каталогов + / jails / db +.

Чтобы создать среду chroot и запустить сессию bash внутри, нам просто нужно указать местоположение каталога корня chroot и имя хоста, которое мы хотим использовать для сессии:

firejail --chroot=/jails/db --name=db
Parent pid 17390, child pid 17391
Interface           IP                  Mask                Status
lo                  127.0.0.1           255.0.0.0           UP
eth0                192.0.2.1           255.255.255.0       UP
eth1                10.128.1.228        255.255.0.0         UP
br0                 10.10.20.1          255.255.255.0       UP

Child process initialized
[root@db ~]$

Команда выведет родительский pid, дочерний pid и интерфейсы, настроенные в этом сеансе тюрьмы (на данный момент мы не ограничивали и не настраивали интерфейсы). После этого вы попадете в командную строку в вашей тюрьме.

Первое, что нам нужно сделать, это обновить нашу базу данных пакетов и установить сервер MySQL в среде chroot. Вы можете сделать это, набрав:

apt-get update
apt-get install mysql-server

В процессе обновления вы должны увидеть, что репозитории Debian проверяются. Это потому, что наша среда chroot является установкой Debian.

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

Когда установка завершится, мы должны сгенерировать структуру каталогов данных MySQL, набрав:

mysql_install_db

Затем заблокируйте некоторые небезопасные значения по умолчанию с помощью включенного скрипта:

mysql_secure_installation

Вам будет предложено ввести пароль root MySQL, который вы установили во время установки. После этого вас спросят, хотите ли вы сменить пароль. Выберите «Нет», если вас устраивает ваш выбор. В оставшейся части запросов просто нажмите ENTER, чтобы выбрать варианты по умолчанию.

Создайте базу данных и пользователя WordPress

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

mysql -u root -p

Вы попадете в приглашение MySQL. Создайте новую базу данных для WordPress для использования:

CREATE DATABASE wordpress;

Далее мы создадим пользователя для работы с этой базой данных из тюрьмы веб-сервера. Веб-сервер будет иметь IP-адрес * 10.10.20.10 * на интерфейсе моста, поэтому нам нужно связать этого пользователя с этим адресом. Назначьте безопасный пароль для этого пользователя. Затем мы дадим этому пользователю возможность работать с базой данных, которую мы создали:

CREATE USER 'wordpressuser'@'10.10.20.10' IDENTIFIED BY '';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'10.10.20.10';

Теперь нам просто нужно очистить таблицу привилегий и выйти:

FLUSH PRIVILEGES;
exit

Измените настройки MySQL для привязки к адресу моста

Далее нам нужно изменить файл конфигурации MySQL. Откройте его в вашем редакторе сейчас:

nano /etc/mysql/my.conf

Этот файл организован в разделы. Найдите раздел, который начинается так:

[mysqld]

Вы должны увидеть директиву + bind-address +, которая в настоящее время установлена ​​в + 127.0.0.1 +. Мы хотим запустить прослушивание нашего экземпляра MySQL через интерфейс моста. Адрес этой тюрьмы в этом интерфейсе будет * 10.10.20.20 *, поэтому мы должны изменить его так, чтобы он выглядел следующим образом:

bind-address = 10.10.20.20

Сохраните и закройте файл, когда вы закончите.

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

service mysql stop
exit

Используйте Firejail для настройки веб-сервера WordPress

Теперь, когда наша база данных настроена, мы можем перейти к нашей тюрьме, которая будет использоваться для веб-сервера. Используйте firejail, чтобы начать сеанс в этой среде:

firejail --chroot=/jail/www --name=www

Первое, что нам нужно сделать, это обновить нашу локальную базу данных пакетов и установить веб-сервер Nginx и компоненты PHP. Это необходимо для обработки динамических запросов и подключения к базе данных MySQL:

apt-get update
apt-get install nginx php5-fpm php5-mysql

Настройка PHP

Мы начнем с редактирования файла конфигурации процессора PHP, чтобы отключить функцию, которая может быть проблемой безопасности:

nano /etc/php5/fpm/php.ini

Найдите в файле директиву + cgi.fix_pathinfo +. Это будет закомментировано и установлено в «1». Нам нужно раскомментировать и изменить его на «0»:

cgi.fix_pathinfo=0

Сохраните и закройте файл, когда вы закончите.

Настройка Nginx

Теперь нам нужно настроить Nginx для корректной работы с файлами WordPress. Это включает в себя создание нового корня документа в + / var / www / html, установку` + server_name _` в качестве публичного IP-адреса вашей хост-системы и настройку обработки PHP.

Откройте файл конфигурации Nginx по умолчанию:

vim /etc/nginx/sites-available/default

Краткое описание изменений, которые мы должны сделать, приведено ниже:

  • Раскомментируйте директиву + listen 80 +, чтобы явно указать номер порта.

  • Измените значение директивы + root +, указав + / var / www / html +, где мы будем хранить наши файлы WordPress.

  • Измените параметр + index, чтобы искать файл` + index.php` перед другими индексными файлами.

  • Измените значение директивы + server_name +, указав * IP-адрес или домен хост-сервера *

  • Настройте последнее значение для директивы + try_files, чтобы передавать запросы в файл` + index.php`, когда они не найдены в виде файлов или каталогов. Он находится внутри блока + location / +.

  • Раскомментируйте все директивы страницы ошибок, чтобы разрешить страницы ошибок.

  • Раскомментируйте блок + location ~ \ .php $ +, включенную директиву + fastcgi_split_path_info +, строку + fastcgi_pass + * socket *, + fastgci_index + и + включайте директивы fastcgi_params + и добавьте `+ директива try_files + `, которая пробует запрос как заданный и возвращает 404 в противном случае.

Когда вы закончите вносить изменения выше, файл должен выглядеть примерно так, как показано ниже (для краткости комментарии были удалены):

server {
   listen 80;
   root ;
   index  index.html index.htm;
   server_name ;
   location / {
       try_files $uri $uri/ ;
   }
   location /doc/ {
       alias /usr/share/doc/;
       autoindex on;
       allow 127.0.0.1;
       allow ::1;
       deny all;
   }
   error_page 404 /404.html;
   error_page 500 502 503 504 /50x.html;
   location = /50x.html {
       root /usr/share/nginx/www;
   }
   location ~ \.php$ {

       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_pass unix:/var/run/php5-fpm.sock;
       fastcgi_index index.php;
       include fastcgi_params;
   }
}

Вы можете вставить все содержимое, показанное здесь, если это проще. Вам нужно всего лишь изменить директиву + server_name, чтобы она ссылалась на публичный IP-адрес или имя домена вашей хост-системы.

Сохраните и закройте файл, когда вы закончите.

Загрузка и настройка файлов WordPress

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

Начните с перехода в домашний каталог пользователя root и загрузите последнюю версию пакета WordPress:

cd ~
wget http://wordpress.org/latest.tar.gz

Распакуйте содержимое архива, создав каталог + ~ / wordpress +:

tar xzvf latest.tar.gz

Скопируйте пример файла конфигурации в допустимое имя файла конфигурации, которое будет проверено:

cd ~/wordpress
cp wp-config-sample.php wp-config.php

Теперь откройте новый файл конфигурации в вашем текстовом редакторе:

nano wp-config.php

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

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

/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'wordpressuser');

/** MySQL database password */
define('DB_PASSWORD', '');

/** MySQL hostname */
define('DB_HOST', '10.10.20.20');

Когда вы закончите, сохраните и закройте файл.

Затем нам нужно создать каталог + / var / www / html, на который мы ссылаемся в нашем конфигурационном файле Nginx, в качестве корня документа. Затем мы скопируем все ваши файлы WordPress в этот каталог:

mkdir -p /var/www/html
cp -r ~/wordpress/* /var/www/html

Теперь мы можем передать право собственности на файлы веб-пользователю:

cd /var/www/html
chown -R www-data:www-data /var/www/html/*

Тюрьма вашего веб-сервера полностью настроена. Мы можем корректно завершить работу нашего веб-сервера и PHP-процессов, набрав:

service nginx stop
service php5-fpm stop

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

exit

Начиная тюрьмы

Теперь у нас полностью настроены наши тюрьмы. Мы можем запустить их индивидуально с помощью нашего интерфейса сетевого моста.

Сначала мы запустим сервер базы данных, поскольку он проще. Нам нужно указать корневое местоположение chroot, как и раньше. На этот раз мы также будем использовать параметр + - net + для указания интерфейса моста. Мы будем использовать это вместе с параметром + - ip +, чтобы указать точный адрес, который мы хотели бы дать этой тюрьме (+ 10.10.20.20 +, если вы помните из нашей конфигурации).

Мы также передадим флаг + - private + для монтирования новых каталогов + / tmp,` + / root` и + / home / user внутри тюрьмы. Затем нам нужно указать процессы, которые мы хотим запустить в тюрьме, и поместить их на задний план с окончанием «&».

Процессы, которые мы должны запустить, это процесс сервера MySQL, а также процесс + sleep inf +. Это будет держать джейл бесконечно долго, а не выходить из него после завершения предыдущих процессов. В целом команда выглядит так:

firejail --chroot=/jails/db --private --net=br0 --ip=10.10.20.20 \
   "/etc/init.d/mysql start; \
   sleep inf" &

Тюрьма запустится, и указанные процессы начнут выполняться последовательно. Вы можете увидеть результаты этого процесса, используя опцию + - list для` + firejail`:

firejail --list
21913:root:firejail --chroot=/jails/db --private --net=br0 --ip=10.10.20.20 /etc/init.d/mysql
 21916:root:bash -c /etc/init.d/mysql start; sleep inf
   21970:root:/bin/sh /usr/bin/mysqld_safe
     22322:syslog:/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/
     22323:root:logger -t mysqld -p daemon.error
   22409:root:sleep inf

Как видите, дерево процессов доступно в нашей хост-системе. Поскольку мы видим, как работает + sleep inf +, а процессы MySQL по-прежнему работают, мы видим, что джейл завершил загрузку.

Для тюрьмы веб-сервера требуется та же базовая настройка. Нам нужно будет указать корневое местоположение chroot, мостовой интерфейс и фактический назначаемый IP-адрес (+ 10.10.20.10 +) и флаг + - private +.

Что касается списка процессов, у нас есть немало дополнительных соображений. Начнем с того, что каталог + / var / log + в тюрьме динамически создается при каждом запуске. Из-за этого директивы log в наших файлах Nginx указывают на несуществующие местоположения. Мы можем создать эти локации, прежде чем пытаться загрузить Nginx.

Кроме того, процесс Nginx использует системный регистратор. Мы также запустим процесс + rsyslog + до Nginx. После запуска Nginx нам также нужно помнить о том, чтобы запустить наш процессор PHP, который будет при необходимости передавать запросы в тюрьму базы данных. Опять же, мы хотим закончить с + sleep inf +, чтобы тюрьма сохранялась после точки, в которой запущены сервисы.

В конце наша команда для запуска нашего джейла веб-сервера будет выглядеть так:

firejail --chroot=/jails/www --private --net=br0 --ip=10.10.20.10 \
   "mkdir -p /var/log/nginx; \
   touch /var/log/nginx/error.log; \
   touch /var/log/nginx/access.log; \
   /etc/init.d/rsyslog start; \
   /etc/init.d/nginx start; \
   /etc/init.d/php5-fpm start; \
   sleep inf" &

Для загрузки джейла веб-сервера может потребоваться некоторое время, продолжайте проверять с помощью + firejail --list +, чтобы убедиться, что процесс достигает состояния + sleep inf +.

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

http://

изображение: https: //assets.digitalocean.com/articles/firejail/wp_install.png [экран начальной установки WordPress]

Заполните соответствующие значения и нажмите «Установить WordPress» внизу, когда будете готовы. Вам нужно будет войти в систему с помощью только что созданной учетной записи администратора. После этого вы попадете на панель управления WordPress:

изображение: https: //assets.digitalocean.com/articles/firejail/wp_dashboard.png [Панель управления WordPress]

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

Создание служб экземпляров Firejail

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

  • Настройка сети хост-тюрьма и тюрьма-тюрьма для загрузки при загрузке.

  • Делать ваши изменения + iptables постоянными.

  • Настройка нашей тюрьмы на автоматический запуск при загрузке хост-сервера.

Мы можем начать с этих трех сразу.

Настройка сети для джейлов при загрузке

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

Нам нужно настроить фактическое мостовое соединение. Чтобы установить и запустить это соединение при загрузке, нам нужно изменить файлы + / etc / network / interfaces +. Откройте этот файл сейчас:

nano /etc/network/interfaces

Внутри вы увидите некоторые разделы, которые определяют, какие интерфейсы запускаются при загрузке, и другие строки, которые описывают каждый интерфейс. Начните с добавления сети + br0 + в конец второй строки + auto +, чтобы запустить интерфейс, который мы определим при загрузке:

auto eth0 eth1

Далее нам нужно настроить раздел, который будет определять интерфейс. Поскольку это мостовой интерфейс, и он не функционирует как обычный мост для объединения двух сетей, мы определим наш интерфейс вручную, то есть мы дадим точные команды, которые следует использовать для настройки сети.

Начните с заголовка раздела:

iface br0 inet manual

При этом мы будем использовать директивы + pre-up +, + up +, + post-down + и + down + для определения команд, которые должны выполняться на каждом этапе. Для команд + pre-up + и + up + мы хотим создать мост, а затем запустить интерфейс так же, как мы делали это ранее вручную. + $ IFACE + будет динамически заменяться на + br0 + при запуске команд, поэтому вам не следует изменять их здесь:

iface br0 inet manual
   pre-up brctl addbr $IFACE
   up ifconfig $IFACE 10.10.20.1/24

Для команд + post-down + и + down + мы просто хотим изменить эти команды. Мы вернем интерфейс вниз, а затем удалим мост:

iface br0 inet manual
   pre-up brctl addbr $IFACE
   up ifconfig $IFACE 10.10.20.1/24
   down ifconfig $IFACE down
   post-down brctl delbr $IFACE

Наш интерфейс + br0 + теперь определен, и мы настроили его на автоматический запуск при загрузке. Сохраните и закройте файл, когда вы закончите.

Настройте IPTables, чтобы разрешить ограниченную пересылку в тюрьмы

Далее нам нужно настроить iptables с правилами, которые мы добавили ранее. К счастью, это просто с помощью пакета + iptables-persistent +.

Установите пакет, набрав:

apt-get install iptables-persistent

В процессе установки вас спросят, хотите ли вы сохранить текущий набор правил IPv4 и IPv6. Выберите * yes * в этих подсказках, чтобы автоматически сохранить текущие наборы правил. Они будут автоматически повторно применены при загрузке.

Если вам когда-либо понадобится изменить правила, применяемые при загрузке, внесите необходимые изменения, а затем введите:

/etc/init.d/iptables-persistent save

Текущий набор правил будет обновлен.

Наши правила iptables теперь возвращаются при загрузке сервера. Однако есть еще один момент, который мы еще не рассмотрели: нам нужно убедиться, что наше ядро ​​позволяет пересылать.

Ранее мы включали «1» в файл в псевдофайловой системе + / proc +, чтобы включить эту возможность. Чтобы это изменение произошло автоматически при следующей загрузке, отредактируйте файл + sysctl.conf +:

nano /etc/sysctl.conf

Раскомментируйте следующую строку:

net.ipv4.ip_forward=1

Сохраните и закройте файл, когда вы закончите.

Создать сценарий Upstart для запуска WordPress Jails

Чтобы настроить наши тюрьмы для запуска при загрузке, нам нужно создать сценарий upstart. Мы назовем наш скрипт + firejail_wp.conf +.

Откройте файл с этим именем в каталоге + / etc / init + в вашем текстовом редакторе:

nano /etc/init/firejail_wp.conf

Внутри мы сначала заполняем краткое описание того, для чего предназначен этот сервис:

description "WordPress jail"

Затем мы настраиваем обстоятельства, которые должны быть истинными, чтобы эта служба автоматически запускалась. Мы хотим убедиться, что файловая система доступна, и мы также должны убедиться, что сеть + br0 + 'была создана. Если сеть `+ br0 + не работает, обе наши команды firejail завершатся неудачно.

Для этого мы будем использовать директиву + start on + и спецификаторы + local-filesystems + и + net-device-up + для построения наших начальных условий. Мы также настроим наш скрипт так, чтобы он останавливался всякий раз, когда машина переходит в режим перезагрузки или выключения (на что указывает любой уровень выполнения, отличный от 1-5):

description "WordPress jail"

start on (local-filesystems and net-device-up IFACE=br0)
stop on runlevel [!12345]

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

description "WordPress jail"

start on (local-filesystems and net-device-up IFACE=br0)
stop on runlevel [!12345]

exec /startjails.sh

Когда вы закончите, сохраните и закройте файл.

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

nano /startjails.sh

Поскольку это скрипт bash, начните со стандартного вызова shebang для bash:

#!/bin/bash

Далее мы добавим две наши команды firejail с одной небольшой модификацией. По неизвестной причине существует проблема с запуском сценария инициализации Nginx в окруженной тюрьме среде при запуске upstart. Эта проблема отсутствует при вызове любым другим методом.

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

#!/bin/bash

firejail --chroot=/jails/db --private --net=br0 --ip=10.10.20.20 "/etc/init.d/mysql start; sleep inf" &

firejail --chroot=/jails/www --private --net=br0 --ip=10.10.20.10 "mkdir -p /var/log/nginx; touch /var/log/nginx/error.log; touch /var/log/nginx/access.log; /etc/init.d/rsyslog start; /usr/sbin/nginx; /etc/init.d/php5-fpm start; sleep inf" &

Еще одна команда необходима, чтобы убедиться, что это постоянная служба, а не задача, которая завершится сразу после запуска джейла. Нам нужно добавить + sleep inf + в качестве последней строки в скрипте. Это позволит upstart правильно управлять сервисом:

#!/bin/bash

firejail --chroot=/jails/db --private --net=br0 --ip=10.10.20.20 "/etc/init.d/mysql start; sleep inf" &

firejail --chroot=/jails/www --private --net=br0 --ip=10.10.20.10 "mkdir -p /var/log/nginx; touch /var/log/nginx/error.log; touch /var/log/nginx/access.log; /etc/init.d/rsyslog start; /usr/sbin/nginx; /etc/init.d/php5-fpm start; sleep inf" &

sleep inf

Когда вы закончите, сохраните и закройте файл.

Теперь нам просто нужно сделать этот файл исполняемым, чтобы его мог запустить сценарий upstart:

chmod +x /startjails.sh

На этом этапе среда WordPress в тюрьме полностью настроена для запуска во время загрузки.

Вы можете перезагрузить хост-сервер, чтобы попробовать это:

shutdown -r now

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

Заключение

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

Related