6: Настройка политики SELinux
Политика SELinux позволит всем нодам обмениваться данными и выполнять операции кластера.
SELinux – это модуль ядра Linux, который повышает безопасность операционных систем благодаря поддержке обязательных политик контроля доступа. Он включен в CentOS 7 по умолчанию и запрещает демону MariaDB выполнять множество потенциально опасных действий.
Чтобы создать политику, нужно выполнить в кластере ряд действий с разрешающим режимом SELinux для MySQL. Затем вы создадите политику из зарегистрированных событий и, наконец, установите принудительное выполнение SELinux после установки политики.
Сначала разрешите доступ к соответствующим портам, выполнив на всех трех серверах следующие команды:
Примечание: Вы можете получить ошибку ValueError при разрешении доступа к некоторым из этих портов. Это означает, что состояние SELinux для этого порта уже установлено, что в этом случае не повлияет на работу.
В этих командах используется инструмент управления semanage с флагом –a, он добавит порты и будет игнорировать сервер базы данных.
Затем выполните следующую команду на всех трех серверах. Она временно переводит домен MySQL SELinux в разрешительный режим.
Обработка этой команды может занять минуту и не выведет никаких выходных данных.
Затем остановите сервер БД на всех нодах, чтобы загрузить кластер базы данных с общими политиками SELinux. Для этого выполните на всех трех нодах следующую команду:
Запустите кластер для генерации событий взаимодействия между нодами, которые будут добавлены в политику SELinux. На первой ноде загрузите кластер, выполнив:
Создайте базу данных и таблицу для регистрации событий SST, выполнив на первой ноде такую команду:
Теперь запустите сервер на второй ноде:
Затем сделайте то же самое на третьей ноде:
Вы не увидите вывод от предыдущих команд. Чтобы сгенерировать события IST, выполните следующее на всех трех серверах:
Теперь создайте и включите политику SELinux, выполнив следующие команды на всех трех серверах:
Первая команда ищет сгенерированные события в файле audit.log и передает их в модуль Galera.pp, созданный инструментом audit2allow. Это приведет к следующему выводу:
Далее следуйте инструкциям в выходных данных и используйте следующую команду для установки сгенерированного модуля:
Теперь, когда политика активна, отключите разрешающий режим для сервера MariaDB:
Вы успешно создали и включили политику SELinux.
Установка PHP на CentOS 7 / RHEL 7
Для установки PHP и модулей, такие как GD / mysql введите следующую комманду
Shell
yum install php php-mysql php-gd php-pear
1 | yum install php php-mysql php-gd php-pear |
Необходимо перезагрузить HTTPD (Apache) сервер, введите:
Shell
systemctl restart httpd.service
1 | systemctl restart httpd.service |
Для поиска всех других PHP модулей:
Shell
yum search php-
1 | yum search php- |
Чтобы получить более подробную информацию о модуле:
Shell
yum info php-pgsql
1 | yum info php-pgsql |
Проверка PHP на сервере
Создайте файл с именем /var/www/html/test.php следующим образом:
Shell
vi /var/www/html/test.php
1 | vi/var/www/html/test.php |
Добавьте следующий код:
LAMP сервер установлен, если у вас есть проблемы с настройкой сервера, мы производим разовые работы по установке и настройке web сервера LAMP.
CentOS 8 netinstall
Рассмотрим теперь установку centos 8 по сети с boot образа. Она ничем не отличается от обычной, кроме одного момента — вам нужно сначала настроить сеть с выходом в интернет или с доступом к локальному репозиторию и указать этот репозиторий в качестве источника для установки системы.
В качестве источника для установки я буду использовать упомянутое ранее . CentOS 8 netinstall url — https://mirror.yandex.ru/centos/8/BaseOS/x86_64/os/
Указываем путь, сохраняем настройки и ждем, когда установщик подключиться к репозиторию и заберет у него информацию о пакетах. После этого в разделе Software Selection можно выбрать необходимый для установки набор софта, как и при локальной установке. Все остальное настраиваем точно так же, как мы сделали выше.
Web сервер на CentOS 7
Итак, наш веб сервер centos будет состоять из трех основных компонентов — http сервера apache, интерпретатора языка программирования php и сервера баз данных mysql. Познакомимся немного с каждым из них:
- Apache — http сервер или просто веб сервер апач. Является кросплатформенным ПО, поддерживающим практически все популярные операционные системы, в том числе и Windows. Ценится прежде всего за свою надежность и гибкость конфигурации, которую можно существенно расширить благодаря подключаемым модулям, которых существует великое множество. Из недостатков отмечают большую требовательность к ресурсам, по сравнению с другими серверами. Держать такую же нагрузку, как, к примеру, nginx, apache не сможет при схожих параметрах железа.
- PHP — язык программирования общего назначения, который чаще всего применяется в веб разработке. На сегодняшний день это самый популярный язык в этой области применения. Поддерживается практически всеми хостинг-провайдерами.
- Mysql — система управления базами данных. Завоевала свою популярность в среде малых и средних приложений, которых очень много в вебе. Так что, как и php, на сегодняшний день является самой популярной бд, использующейся на веб сайтах. Поддерживается большинством хостингов. В CentOS вместо mysql устанавливается mariadb — ответвление mysql. Они полностью совместимы, возможен в любой момент переход с одной субд на другую и обратно. Последнее время я встречал информацию, что mariadb пошустрее работает mysql и люди потихоньку перебираются на нее. На практике мне не довелось это наблюдать, так как никогда не работал с нагруженными базами данных. А в обычных условиях разница не заметна.
Подопытным сервером будет выступать виртуальная машина от ihor, характеристики следующие:
Процессор | 2 ядра |
Память | 8 Gb |
Диск | 150 Gb SSD |
Хочу сразу уточнить, что разбираю базовую дефолтную настройку. Для улучшения быстродействия, повышения надежности и удобства пользования нужно установить еще несколько инструментов, о чем я расскажу отдельно. В общем случае для организации веб сервера будет достаточно того, что есть в этой статье.
Если у вас еще нет сервера, то вам надо выполнить установку CentOS 7. А если сервер уже установлен, то не забудьте его настроить
Рекомендую обратить внимание именно на настройку, так как там много полезной информации, которую в рамках этой статьи я не даю — обновление системы, настройка фаервола, установка редактора и многое другое
Шаг 3
Тестирование сборки
Для того, чтобы использовать команды администратора, нам необходимо понадобится инструмент mysqladmin. Используем следующую команду для того, чтобы подключиться к MariaDB в качестве суперпользователя с запросом пароля и показом версии:
$ mysqladmin -u root -p version
На экране высветится информация, похожая на эту:
mysqladmin Ver 9.0 Distrib 5.5.50-MariaDB, for Linux on x86_64 Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Server version 5.5.50-MariaDB Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/lib/mysql/mysql.sock Uptime: 5 min 9 sec Threads: 1 Questions: 42 Slow queries: 0 Opens: 1 Flush tables: 2 Open tables: 27 Queries per second avg: 0.172
Это доказывает, что установка прошла успешно.
Install MariaDB Yum Repository in CentOS 8:
MariaDB Server 10.5.3 is the latest release therefore it is not available in CentOS 8 yum repositories.
MariaDB provides an official yum repository, that we can use to install MariaDB Server 10.5 on CentOS 8.
Create a yum repository file as follows.
# vi /etc/yum.repos.d/MariaDB.repo
Add following directives in this file.
# MariaDB 10.5 CentOS repository list - created 2020-05-29 08:37 UTC # http://downloads.mariadb.org/mariadb/repositories/ name = MariaDB baseurl = http://yum.mariadb.org/10.5/centos8-amd64 module_hotfixes=1 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Build cache for MariaDB yum repository.
# dnf makecache CentOS-8 - AppStream 7.8 kB/s | 4.3 kB 00:00 CentOS-8 - Base 292 B/s | 3.9 kB 00:13 CentOS-8 - Extras 3.7 kB/s | 1.5 kB 00:00 MariaDB 164 kB/s | 512 kB 00:03 Metadata cache created.
Step 3 – Secure MariaDB Install
You also need to secure your MariaDB installation using passwords and do some other changes. To do this run secure installation script from the command line.
sudo /usr/bin/mysql_secure_installation
The secure installation script will ask for user input as some points, follow the installation as per below output showing, All user inputs are highlighted with red color.
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! Enter current password for root (enter for none): OK, successfully used password, moving on... Set root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! Remove anonymous users? [Y/n] y ... Success! Disallow root login remotely? [Y/n] y ... Success! Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reload privilege tables now? [Y/n] y ... Success! Cleaning up... Thanks for using MariaDB!
Шаг 1 — Установка веб-сервера Apache
Установите пакет с помощью следующей команды:
При получении запроса введите для подтверждения того, что вы хотите установить Apache.
После завершения установки запустите следующую команду, чтобы активировать и запустить сервер:
Если вы активировали брандмауэр в соответствии с руководством по начальной настройке сервера, вам нужно будет разрешить подключение к Apache. Следующая команда будет постоянно активировать подключения по HTTP, запущенные на порту по умолчанию:
Чтобы подтвердить применение изменений, вы можете использовать следующую команду:
Вывод будет выглядеть следующим образом:
Выполните перезапуск конфигурации брандмауэра, чтобы изменения вступили в силу:
После добавления нового правила брандмауэра вы можете проверить, запущен ли сервер, запросив доступ к публичному IP-адресу или доменному имени сервера из вашего веб-браузера.
Примечание. Если вы используете DigitalOcean в качестве провайдера хостинга DNS, вы можете изучить нашу для получения подробных инструкций по настройке нового доменного имени и указать ваш сервер.
Если у вас нет доменного имени, указывающего на ваш сервер, и вы не знаете публичный IP-адрес вашего сервера, вы можете найти его, введя следующую команду:
Команда выведет несколько IP-адресов. Вы можете попробовать каждый из них в своем браузере.
Также вы можете проверить доступность IP-адреса из других мест в Интернете:
Введите полученный адрес в браузере, после чего вы попадете на страницу Apache по умолчанию:
Если вы увидите эту страницу, это значит, что ваш веб-сервер установлен корректно.
Cкачать CentOS 8
Загрузить CentOS 8 можно как с официального сайта так и со сторонних репозиториев. Я обычно использую зеркало Яндекса для загрузки — https://mirror.yandex.ru/centos/ И его же для сетевой установки. Чтобы вам долго не искать, сразу скажу, что установочные образы лежат тут. Структура репозитория не очевидная. Я первое время после знакомства с центос путался в ее репозиториях, особенно когда искал url для netinstall.
Напоминаю, что 32 bit или i386 редакции CentOS 8 не существует. Все дистрибутивы только x86_64, то есть 64 bit.
В качестве альтернативных зеркал для загрузки centos 8 можно использовать следующие:
- http://mirror.corbina.net/pub/Linux/centos/
- http://mirror.docker.ru/centos/
- http://mirror.logol.ru/centos/
Это актуально для тех, у кого Яндекс по каким-то причинам заблокирован. Жаль, что приходится сталкиваться с повсеместными блокировками в интернете. Плохая тенденция, которая осложняет многие моменты.
Шаг #6: Установка и настройка php-fpm
В отличии, например от Apache, Nginx самостоятельно работает только со статикой, если в запросе к нему попадается php код, то Nginx сам его не обрабатывает, а проксирует (передает) на специальный php-обработчик, в роли которого выступает один из php модулей — php-fpm (fastCGI process manager).
На момент написания статьи php-fpm последней версии 7.1 нельзя установить из стандартных репозиториев, поэтому в наш список репозиториев () нужно добавить два дополнительных репозитория: EPEL-release и remirepo, а затем уже установить пакет , а также несколько других нужных модулей. Так установка EPEL-release описана ранее в шаге по установке Nginx, то сейчас коснемся только установки remirepo.
Установим репозиторий от remirepo.com:
Установим дополнительные инструменты для активации дополнительного репозитория remi-php71:
Теперь, из уже подключенного репозитория установим необходимые php-пакеты:
- php-fpm — обработчик php кода для Nginx
- php-mysqlnd — содержит функции для работы с БД
- php-mbstring — содержит функции для работы со строками
- php-cli — позволяет запускать php код прямо в консоли
Запустим php-fpm.
Настройка файла конфигурации php-fpm
Откроем главный конфиг php — :
На данный момент нас интересует одна директива — , которая «говорит» php, чтобы он выполнил любой ближайший файл, если изначально запрашиваемый файл не был найден.
Существует опасность в том, что пользователь может создавать вредоносные запросы на сервер, которые будут беспрепятственно выполнены, чего допустить никак нельзя. Чтобы этого не случилось, найдем директиву , раскоментируем и отключим, установив ее параметр в значение — 0.
Также откройте для редактирования файл конфигурации php-fpm — и измените в нем имя пользователя и группы (по умолчанию установлен пользователь apache). Это позволит избежать проблем с правами на запись файлов сайта.
Если вы используете тестовый сервер и вам необходимо выводить ошибки PHP когда они случаются, то также укажите следующие директивы.
После правки всех конфигов, перезапустим php-fpm.
Проверка работы php-скриптов
Создайте тестовый файл для сайта, например , и вставьте в него следующий код:
Далее в браузере перейдите по адресу example.ru/test.php, если на полученной странице отобразится результат выполнения функции , то это значит, что php-код успешно обрабатывается и на этом установка LEMP-стека завершена.
Проверка работы PHP
Теперь файл нужно удалить.
Установка Asterisk
Скачиваем архив последней версии Asterisk с официального сайта.
# cd ~ && wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
Распаковываем исходники.
# tar zxvf asterisk-*.tar.gz
Переходим в директорию с исходниками.
# cd asterisk*
Выполняем скрипт для установки пакетов с зависимостями для asterisk.
# contrib/scripts/install_prereq install
Запускаем скрипт для скачивания исходников для работы с mp3.
# contrib/scripts/get_mp3_source.sh
Настраиваем конфигурацию:
# ./configure --with-pjproject-bundled --with-jansson-bundled --with-crypto --with-ssl=ssl --with-srtp
Запускаем меню для выбора параметров:
make menuselect
В целом, можно оставить дефолтную настройку, если вы не очень разбираетесь, что тут выбирать. Более подробно можете посмотреть в моей статье про подробную настройку asterisk.
Можно запускать установку asterisk.
# make && make install && make config && make samples && ldconfig
Настроим запуск астериск от системного пользователя asterisk. Для этого редактируем скрипт запуска /usr/sbin/safe_asterisk, установив параметр.
ASTARGS="-U asterisk"
Можете то же самое сделать автоматически.
# sed -i 's/ASTARGS=""/ASTARGS="-U asterisk"/g' /usr/sbin/safe_asterisk
Создадим этого пользователя и назначим нужные права на каталоги.
# useradd -m asterisk # chown asterisk.asterisk /var/run/asterisk # chown -R asterisk.asterisk /etc/asterisk # chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk # chown -R asterisk.asterisk /usr/lib/asterisk
Запускаем Asterisk.
# systemctl start asterisk
Проверьте сразу, что он запустился.
# systemctl status asterisk
Если у вас будут ошибки:
radcli: rc_read_config: rc_read_config: can't open /etc/radiusclient-ng/radiusclient.conf: No such file or directory
То отредактируйте конфигурационные файлы asterisk, заменив в некоторых строках пути на правильные.
# sed -i 's";\"\"g' /etc/asterisk/cdr.conf # sed -i 's";radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf"radiuscfg => /etc/radcli/radiusclient.conf"g' /etc/asterisk/cdr.conf # sed -i 's";radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf"radiuscfg => /etc/radcli/radiusclient.conf"g' /etc/asterisk/cel.conf
После этого перезапустите asterisk, ошибок быть не должно.
5: Настройка брандмауэра
Примечание: Данный раздел нужно выполнить на каждой ноде кластера.
На этом этапе мы настроим брандмауэр и откроем порты, необходимые для связи между нодами.
Проверьте состояние брандмауэра firewall:
Команда вернула:
В данном случае он поддерживает SSH, DHCP, HTTP и HTTPS. Если вы попытаетесь запустить кластер, вы не сможете этого сделать, потому что брандмауэр его заблокирует. Чтобы исправить это, нужно добавить правила, которые откроют трафик между MariaDB и Galera.
Galera может использовать четыре порта:
- 3306: для соединения с клиентами MySQL и для State Snapshot Transfer (работает через метод mysqldump).
- 4567: для репликации Galera Cluster и для многоадресной репликации по UDP и TCP.
- 4568: Incremental State Transfer.
- 4444: остальные операции State Snapshot Transfer.
Откройте эти порты в брандмауэре. Убедившись, что репликация работает, вы сможете закрыть все ненужные порты и ограничить трафик только серверами кластера.
Чтобы открыть порты, используйте такие команды:
Используя –zone = public и –add-port =, firewall-cmd открывает эти порты для публичного трафика. Флаг –permanent сохраняет эти правила для дальнейших сессий.
Теперь добавьте каждый сервер в зону public, выполнив следующие команды. Замените условные адреса соответствующими внутренними IP-адресами ваших нод.
Перезапустите брандмауэр:
После того, как вы настроили брандмауэр на первой ноде, создайте те же настройки на второй и третьей ноде.
Теперь можно создать политику SELinux.
Установка Mariadb
В своей работе FreePBX использует базу данных Mysql. В качестве mysql сервера будем использовать mariadb. Подключаем репозиторий со свежей версией MariaDB. Для этого создаем файл /etc/yum.repos.d/MariaDB.repo следующего содержания.
# MariaDB 10.3 CentOS repository list - created 2019-04-01 09:11 UTC # http://downloads.mariadb.org/mariadb/repositories/ name = MariaDB baseurl = http://yum.mariadb.org/10.3/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Устанавливаем MariaDB.
# yum install MariaDB-server MariaDB-client MariaDB-shared
Запускаем mariadb и добавляем в автозагрузку.
# systemctl start mariadb # systemctl enable mariadb