Оптимизация хостинга под битрикс, Требования сканера безопасности

Оптимизация хостинга под битрикс, Требования сканера безопасности

Сканер безопасности 1С-Битрикс достаточно требовательная к хостингу штука. Замечу, требования адекватные по большей части. Не все из них могут быть выполнены без вашего участия, в связи с относительностью путей к некоторым директивам и т. д. И не на все их них существует достаточное описание к устранению. А главное у вас должен быть достаточно широкий перечень доступов к серверу и понимание, что и куда следует писать. Давайте разберем некоторые из них:

  • Стартовая конфигурация сервера nginx(прокси)+apache сервер
  • Панель управления ispconfig3 дописанный под nginx
  • php 5.4.14 актуальная на данный момент в стабильном репозитории.
  • Представление php FastCGI/apache

Убрать все предупреждения по безопасности сайта, сдать все тесты полностью на 100%

Предварительно сервер уже подстроен под 1С-Битрикс и достаточно существенно, поскольку на нем уже не первый год лежат данные сайты. Однако нет места совершенству и мы задались мыслью отработать все предупреждения систем безопасности 1С-Битрикс. Вот некоторые из них:

Используется опасная/устаревшая версия php

Первое на что мы обратим внимание, как на критическое замечание «php опасная устаревшая версия». Тут после переписки со службой поддержки и просьбы понизить требуемый уровень php до реально существующих в стабильных ветках репозиториев ни к чему не привели;(

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

Разрешено чтение файлов по URL (URL wrappers)

allow_url_fopen = Off прописываем сразу в php.ini, поскольку ispconfig3 работает по умолчанию с представлением php FastCGI, и мы не сможем php_value прописать в .htaccess.

В случае php.ini, вид представления php не имеет значения. Если же вы используете другую панель управления, обратите внимание что в deb семействе 3 конфига php.ini, вписывайте директивы в соответствующей или можно сделать проще:

find /etc/php5 -name 'php.ini' -exec sed -i 's/allow_url_fopen = On/allow_url_fopen = Off/g' "{}" \;
/etc/init.d/apache2 restart

Включить веб-антивирус

Включение веб-антивируса в 1С-Битрикс auto_prepend_file. Поскольку мы редактируем php.ini то недурно будет сразу кинуть в него и веб-антивирус. В моем случае это:

  auto_prepend_file = /var/www/medver.ru/web/bitrix/modules/security/tools/start.php

Путь требуется изменить на ваш. Сами понимаете хостер за вас этого не сделает. Поскольку он не знает какой вы используете движок. В моем же случае, мы допишем в генератор php.ini

Разрешено отображение сайта во фрейме с произвольного домена

add_header X-Frame-Options SAMEORIGIN; — добавляем данную строчку в nginx, так как nginx стоит на выходе (для битрикса принципиален front-end). Если мы поставим его на apache толку не будет. По-хорошему, строку нужно закинуть в оба конфига. В админке ispconfig3, если вы ставили по моему мануалу, просто саму директиву. Если вы создавали конфиги руками (читай, сами), то вписываем строку в server, а не location.

server {
  add_header X-Frame-Options SAMEORIGIN;
}

Включен Automatic MME Type Detection

Аналогичная ситуация, поскольку директива Header set X-Content-Type-Options nosniff. C того же модуля можно вписать их вместе.

Для apache2:

<IfModule headers_module>
  Header set X-Content-Type-Options nosniff
  Header set X-Frame-Options SAMEORIGIN
</IfModule>

В Nginx просто вписываем рядом.

Server {
  add_header X-Content-Type-Options nosniff;
  add_header X-Frame-Options SAMEORIGIN;
}

htaccess файлы не должны обрабатываться Apache в директории хранения загружаемых файлов

Теперь чуть посложней. Исключив .htaccess в папке upload, мы автоматически получим дополнительную ошибку, исполняются php файлы, по сему нам придется перенести весь .htaccess из папки upload в apache, а для этого нам придется явно указать папку в которой будет работать это правило, поскольку в .htaccess этого не требовалось. В противном случае мы запретим исполнение php файлов на всем сайте.

<Directory /var/www/medver.ru/web/upload>
  AllowOverride none
  <IfModule mod_mime.c>
    <Files ~ \.(php|php3|php4|php5|php6|phtml|pl|asp|aspx|cgi|dll|exe|shtm|shtml|fcg|fcgi|fpl|asmx|pht|py|psp|rb|var)>
      SetHandler text/plain
      ForceType text/plain
    </Files>
  </IfModule>
</Directory>

PHP скрипты выполняются в директории хранения загружаемых файлов

Собственно, ошибка появляется когда вы отключили .htaccess в папке upload решение смотрим выше, поскольку оно решает две проблемы сразу. В результате у меня получилось следующее:

Теперь рассмотрим как это сделать для всех сайтов одновременно.

Добавим настройки для nginx

vim /usr/local/ispconfig/server/conf/nginx_reverse_proxy_plugin.vhost.conf.master

находим строчку include /etc/nginx/locations.d/*.conf; и вставляем перед ней код. Должно получиться так:

#для битрикс монитора
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
include /etc/nginx/locations.d/*.conf;

Далее добавляем apache2в генератор хостов

vim /usr/local/ispconfig/server/conf/vhost.conf.master

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

<IfModule headers_module>
  Header set X-Content-Type-Options nosniff
  Header set X-Frame-Options SAMEORIGIN
</IfModule>
<Directory {tmpl_var name='web_basedir'}/{tmpl_var name='domain'}/web/upload>
  AllowOverride none
  <IfModule mod_mime.c>
    <Files ~ \.(php|php3|php4|php5|php6|phtml|pl|asp|aspx|cgi|dll|exe|shtm|shtml|fcg|fcgi|fpl|asmx|pht|py|psp|rb|var)>
      SetHandler text/plain
      ForceType text/plain
    ;</Files>
  </IfModule>
  <IfModule mod_php5.c>
    php_flag engine off
  </IfModule>
</Directory>

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

session.entropy_file = /dev/urandom
session.entropy_length = 128


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