Поздравляем наших партнеров!


10 февраля нашему главному поставщику ПО для автоматизации работы хостинга исполнилось 11 лет.
Несомненно, если бы не существовало ISPsystem, нам было бы очень тяжело, ведь только они стоят в одному ряду с ведущими западными разработчиками ПО для предоставления услуг хостинга.
Мы очень любим ISPsystem и от всей души поздравляем их с 11-и летием!
Спасибо Вам за замечательное и полезное ПО, которое позволяет развивать Российский сегмент хостинга!
#ispsystem

Внимание! Изменение цен на услуги.

Уважаемые пользователи хостинга!
Информируем вас о повышении цен на выделенные IP-адреса с 9-го февраля 2015 года.
В связи с инфляцией, мы вынуждены повысить цены на выделенные IP-адреса.
Мы прилагаем все возможные усилия, чтобы не повышать цены на услуги и рады сообщить, что цены на виртуальный хостинг и VDS хостинг остаются без изменений.

С наступающим Новым годом!

Уважаемые пользователи хостинга!

Коллектив хостинга CISHost поздравляет Вас с наступающим Новым 2015 годом и Рождеством!

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

Всегда рады сотрудничать с Вами!




Подробнее

Технические работы 16.09.2014

Уважаемые пользователи хостинга! Уведомляем Вас, что 16.09.2014 в период с 03:00 до 05:00 будут проходить плановые работы на сетевом оборудовании в Москве. Во время проведения работ будет отсутствовать доступ к сайтам, расположенным в данном сегменте сети. Ожидаемый перерыв составит 20 минут. Работы направлены на повышение отказоустойчивости сервисов во время сетевых атак.

Замена роутера

Роутер

Уважаемые пользователи хостинга!
Наш роутер Mikrotik Cloud Core не выдержал последнего SYN-флуда или на него негативно повлияло суперлуние. Нам пришлось произвести экстренную замену на новый. Перебои с сайтами на российских серверах наблюдались с 21:35 по 01:40 по московскому времени. На данный момент все сервисы восстановлены и работают в полном объеме.
Приносим свои извинения за доставленные неудобства.

Базы данных InnoDB vs MyISAM

Наш опыт подсказывает, что лучше использовать таблицы InnoDB. Таблицы MyISAM часто блокируются при нагруженном одновременном чтении и записи. Ну если на сайт Joomla одновременно зашли примерно 1000 пользователей, то ситуация выглядит так:

Вывод mytop:

Id      User    Host    db      Command Time    State   Info    Progress
108751  user_main  localhost       user_j15   Query   146980  closing tables  SELECT * FROM jos_session WHERE session_id = 'dfeodu7tv41tbgg4pts44s2kk6'       0.000
108753  user_main  localhost       user_j15   Query   146980  updating        DELETE FROM jos_session WHERE ( time < '1405526121' )   0.000
108774  user_main  localhost       user_j15   Query   146978  Waiting for table level lock    SELECT * FROM jos_session WHERE session_id = 'g2j9kt3stbtkg75tct5r2dvkb6'       0.000
108829  user_main  localhost       user_j15   Query   146977  Waiting for table level lock    SELECT * FROM jos_session WHERE session_id = 'et6833daba2v5t6hptk4e72jr4'       0.000
108834  user_main  localhost       user_j15   Query   146976  Waiting for table level lock    SELECT * FROM jos_session WHERE session_id = 'r35kp3balnt1kt9qnrdclf1k30'       0.000
108930  user_main  localhost       user_j15   Query   146975  Waiting for table level lock    SELECT * FROM jos_session WHERE session_id = '8fssht7k44uiq5kdellgtfe6o7'       0.000
108936  user_main  localhost       user_j15   Query   146969  Waiting for table level lock    SELECT * FROM jos_session WHERE session_id = 'qfvubpisihl1p10k3gkd6tg1v4'       0.000
109030  user_main  localhost       user_j15   Query   146964  Waiting for table level lock    SELECT * FROM jos_session WHERE session_id = '250oati4c74eac3fth5lcpf696'       0.000
109038  user_main  localhost       user_j15   Query   146964  Waiting for table level lock    SELECT * FROM jos_session WHERE session_id = 'f910sn4upaijefoehb546b66h7'       0.000
109121  user_main  localhost       user_j15   Query   146959  Waiting for table level lock    SELECT * FROM jos_session WHERE session_id = 'mo6c9pg63l7m693bpeomas7j60'       0.000


Была попытка одновременного удаления строк из таблицы с сессиями Joomla 1.5 и чтения записей. Такое происходит нечасто, но бывает.
Можно обратить внимание, что запросы исполняются уже 146980 секунд, что препятствует нормальной работе сайта. Если бы таблица jos_session была не MyISAM, а InnoDB, такого бы не произошло. Находя при помощи диагностики подобные ситуации мы конвертируем таблицу MyISAM -> InnoDB самостоятельно, после этого сайт работает без проблем.

Об отправке почты

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

Рекомендуем следующие скрипты для отправки почты:

Библиотека smtp-func.php

<?php

function smtpmail($mail_to, $subject, $message, $headers='') {

        //Настройки почты
        $config['smtp_username'] = '[email protected]';  //Смените на имя своего почтового ящика из ISPManager.
        $config['smtp_password'] = 'Пароль от почтового ящика из панели ISPManager';  //Измените пароль.
        $config['smtp_from']     = 'Test Mailbox'; //Ваше имя - или имя Вашего сайта. Будет показывать при прочтении в поле "От кого".
        //Обычно эти настройки менять не стоит
        $config['smtp_host']     = 'localhost';  //Сервер для отправки почты (для наших клиентов менять не требуется).
        $config['smtp_port']     = '25'; // Порт работы. Не меняйте, если не уверены.
        $config['smtp_debug']    = false;  //Если Вы хотите видеть сообщения ошибок, укажите true вместо false.
        $config['smtp_charset']  = 'UTF-8';   //Кодировка сообщений.

        $SEND =   "Date: ".date("D, d M Y H:i:s") . " +0300\r\n";
        $SEND .=   'Subject: =?'.$config['smtp_charset'].'?B?'.base64_encode($subject)."=?=\r\n";
        if ($headers) $SEND .= $headers."\r\n\r\n";
        else
        {
                $SEND .= "Reply-To: ".$config['smtp_username']."\r\n";
                $SEND .= "MIME-Version: 1.0\r\n";
                $SEND .= "Content-Type: text/plain; charset=\"".$config['smtp_charset']."\"\r\n";
                $SEND .= "Content-Transfer-Encoding: 8bit\r\n";
                $SEND .= "From: \"".$config['smtp_from']."\" <".$config['smtp_username'].">\r\n";
                $SEND .= "To: $mail_to <$mail_to>\r\n";
                $SEND .= "X-Priority: 3\r\n\r\n";
        }
        $SEND .=  $message."\r\n";
         if( !$socket = fsockopen($config['smtp_host'], $config['smtp_port'], $errno, $errstr, 30) ) {
            if ($config['smtp_debug']) echo $errno."<br>".$errstr;
            return false;
         }

            if (!server_parse($socket, "220", __LINE__)) return false;

            fputs($socket, "EHLO " . $config['smtp_host'] . "\r\n");
            if (!server_parse($socket, "250", __LINE__)) {
               if ($config['smtp_debug']) echo '<p>Не могу отправить EHLO!</p>';
               fclose($socket);
               return false;
            }
            fputs($socket, "AUTH LOGIN\r\n");
            if (!server_parse($socket, "334", __LINE__)) {
               if ($config['smtp_debug']) echo '<p>Не могу найти ответ на запрос авторизации!</p>';
               fclose($socket);
               return false;
            }
            fputs($socket, base64_encode($config['smtp_username']) . "\r\n");
            if (!server_parse($socket, "334", __LINE__)) {
               if ($config['smtp_debug']) echo '<p>Логин авторизации не был принят сервером!</p>';
               fclose($socket);
               return false;
            }
            fputs($socket, base64_encode($config['smtp_password']) . "\r\n");
            if (!server_parse($socket, "235", __LINE__)) {
               if ($config['smtp_debug']) echo '<p>Пароль не был принят сервером как верный! Ошибка авторизации!</p>';
               fclose($socket);
               return false;
            }
            fputs($socket, "MAIL FROM: <".$config['smtp_username'].">\r\n");
            if (!server_parse($socket, "250", __LINE__)) {
               if ($config['smtp_debug']) echo '<p>Не могу отправить команду MAIL FROM:</p>';
               fclose($socket);
               return false;
            }
            fputs($socket, "RCPT TO: <" . $mail_to . ">\r\n");

            if (!server_parse($socket, "250", __LINE__)) {
               if ($config['smtp_debug']) echo '<p>Не могу отправить команду RCPT TO:</p>';
               fclose($socket);
               return false;
            }
            fputs($socket, "DATA\r\n");

            if (!server_parse($socket, "354", __LINE__)) {
               if ($config['smtp_debug']) echo '<p>Не могу отправить команду DATA!</p>';
               fclose($socket);
               return false;
            }
            fputs($socket, $SEND."\r\n.\r\n");

            if (!server_parse($socket, "250", __LINE__)) {
               if ($config['smtp_debug']) echo '<p>Не могу отправить тело письма. Письмо не было отправлено!</p>';
               fclose($socket);
               return false;
            }
            fputs($socket, "QUIT\r\n");
            fclose($socket);
            return TRUE;
}
function server_parse($socket, $response, $line = __LINE__) {
        global $config;
        $server_response="";
    while (substr($server_response, 3, 1) != ' ') {
        if (!($server_response = fgets($socket, 256))) {
                   if ($config['smtp_debug']) echo "<p>Проблемы с отправкой почты!</p>$response
$line
";
                   return false;
                }
    }
    if (!(substr($server_response, 0, 3) == $response)) {
           if ($config['smtp_debug']) echo "<p>Проблемы с отправкой почты!</p>$response
$line
";
           return false;
        }
    return true;
}

//Отправить почту сразу нескольким получателям, ящики получателей пишем через запятую.

function smtpmassmail($mail_to, $subject, $message, $headers='')
{
$mailaddresses=explode(",",$mail_to);
foreach ($mailaddresses as $mailaddress) smtpmail($mailaddress,$subject,$message,$headers);
}

?>


и сам файл отправки mailer.php

<?php
//Замените настройки на нужные.
$mail_to = '[email protected]'; //Вам потребуется указать здесь Ваш настоящий почтовый ящик, куда должно будет прийти письмо.
$type = 'plain'; //Можно поменять на html; plain означает: будет присылаться чистый текст.
$charset = 'UTF-8';

include('smtp-func.php');
if ($_REQUEST['message'])
{
   $name = $_REQUEST['name'];
   $phone = $_REQUEST['phone'];
   $message = $_REQUEST['message'];
   $replyto = '[email protected]';
   $headers = "To: \"Administrator\" <$mail_to>\r\n".
              "From: \"$replyto\" <$mail_from>\r\n".
              "Reply-To: $replyto\r\n".
              "Content-Type: text/$type; charset=\"$charset\"\r\n";
   $sended = smtpmail($mail_to, $name, $message, $headers);
   
   echo '<html>
        <head>
        <meta http-equiv="content-type" content="text/html; charset='.$charset.'">
        </head>
              <body>';
   if (!$sended) echo 'Письмо не удалось отправить. Пожалуйста свяжитесь с администратором сайта по адресу: '.$mail_to;
   else echo 'Письмо было успешно отправлено.';
   echo '</body>';
   exit;
}
?>

Критическая уязвимость в OpenSSL 1.0.1 и 1.0.2-beta

08.04.2014 сотрудники The OpenSSL Project выпустили бюллетень безопасности, в котором сообщается о критической уязвимости CVE-2014-0160 в популярной криптографической библиотеке OpenSSL.

Уязвимость связана с отсутствием необходимой проверки границ в одной из процедур расширения Heartbeat (RFC6520) для протокола TLS/DTLS. Из-за этой маленькой ошибки одного программиста кто угодно получает прямой доступ к оперативной памяти компьютеров, чьи коммуникации «защищены» уязвимой версией OpenSSL. В том числе, злоумышленник получает доступ к секретным ключам, именам и паролям пользователей и всему контенту, который должен передаваться в зашифрованном виде. При этом не остается никаких следов проникновения в систему.

Некто, знавший об уязвимости, мог прослушивать «зашифрованный» трафик почти во всем интернете с марта 2012 года, когда вышла версия OpenSSL 1.0.1. В то время была продемонстрирована успешная атака на TLS (BEAST), и многие перешли на защищенную версию TLS 1.2, появление которой совпало с выходом OpenSSL 1.0.1.

Уязвимая версия OpenSSL используется в популярных веб-серверах Nginx и Apache, на почтовых серверах, IM-серверах, VPN, а также во множестве других программ. Ущерб от этого бага исключительно велик.

Некоторые дистрибутивы операционных систем с уязвимой версией OpenSSL:
  • Debian Wheezy (стабильная), OpenSSL 1.0.1e-2+deb7u4)
  • Ubuntu 12.04.4 LTS, OpenSSL 1.0.1-4ubuntu5.11)
  • CentOS 6.5, OpenSSL 1.0.1e-15)
  • Fedora 18, OpenSSL 1.0.1e-4
  • OpenBSD 5.3 (OpenSSL 1.0.1c) и 5.4 (OpenSSL 1.0.1c)
  • FreeBSD 8.4 (OpenSSL 1.0.1e) и 9.1 (OpenSSL 1.0.1c)
  • NetBSD 5.0.2 (OpenSSL 1.0.1e)
  • OpenSUSE 12.2 (OpenSSL 1.0.1c)

Дистрибутивы с более ранними версиями OpenSSL: Debian Squeeze (oldstable), OpenSSL 0.9.8o-4squeeze14, SUSE Linux Enterprise Server.

Баг присутствует во всех версиях веток OpenSSL 1.0.1 и 1.0.2-beta, включая 1.0.1f и 1.0.2-beta1. Исправленная версия — 1.0.1g, которую всем пострадавшим необходимо установить немедленно, после чего сгенерировать новые ключи и сертификаты и предпринять прочие меры безопасности. Пользователей следует предупредить о возможной утечке их паролей. В случае невозможности немедленного апдейта на исправленную версию следует перекомпилировать OpenSSL с флагом -DOPENSSL_NO_HEARTBEATS.

Уязвимость обнаружили специалисты по информационной безопасности из компании Codenomicon, а также, независимо от них, Нил Мехта (Neel Mehta) из подразделения Google Security. Именно последний сообщил разработчикам The OpenSSL Project, что нужно срочно исправить код. Ребята из компании Codenomicon подготовили подробное описание бага и даже открыли для него отдельный сайт Heartbleed.com с изображением кровоточащего сердца.

Пользователям shared-хостинга нет повода для беспокойства. Утром OpenSSL был обновлен на всех серверах, где использовалась эта версия. Владельцев виртуальных выделенных серверов и физических серверов в дата центре просим обратить внимание на данную уязвимость и обновить OpenSSL.

possible.lv/tools/hb/ — этот сервис проверит наличие уязвимости.
  • 0

PHP Fatal error: Call-time pass-by-reference has been removed in /var/www/user

При обновлении PHP с 5.3 на 5.4 некоторые клиенты, использующие старые версии популярных CMS столкнулись с подобной ошибкой. Подобный вызов функции с версии PHP 5.3 вызывал предупреждение на странице, а в версии 5.4 передача переменной по ссылке стала невозможна. Рассмотрим решение данной проблемы на примере одного из сайтов клиента:

Смотрим в журнал ошибок:

[Thu Apr 03 10:48:17 2014] [error] [client XXX.XXX.XXX.XXX] PHP Fatal error:  Call-time pass-by-reference has been removed in /var/www/userXXXXX/data/www/xx-xxx.org/phpshop/class/core.class.php on line 541, referer: http://xx-xxx.org/


Или включаем вывод ошибок php в браузере:


Загружаем файл core.class.php на ПК, открываем текстовым редактором и находим в нем 541 строку:


537       function setHook($class_name, $function_name, $data = false, $rout = false) {
538       if ((phpversion() * 1) >= '5.0')
539       return $this->PHPShopModules->setHookHandler($class_name, $function_name, $this, $data, $rout);
540       else
541       return $this->PHPShopModules->setHookHandler($class_name, $function_name, &$this, $data, $rout);
542       }


Нам нужно убрать & из строки №541. Такой вызов функции более не поддерживается.

В итоге получается так:


537       function setHook($class_name, $function_name, $data = false, $rout = false) {
538       if ((phpversion() * 1) >= '5.0')
539       return $this->PHPShopModules->setHookHandler($class_name, $function_name, $this, $data, $rout);
540       else
541       return $this->PHPShopModules->setHookHandler($class_name, $function_name, $this, $data, $rout);
542       }


Сайт снова работает! :)

Изменение положения о регистрации доменов .RU и .РФ (Неделегированные домены)

Уважаемые господа!

Согласно документации координационного центра национального домена сети Интернет (http://www.cctld.ru/ru/docs/ Раздел — «Документы, вступающие в силу 21 апреля 2014 года»), необходимо делегировать доменные имена .RU и.РФ в течении 20 (двадцати) дней с момента регистрации.

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

В настоящее время у клиентов CISHost более 400 доменов в зоне .RU находятся в статусе «Не делегирован». Эти доменные имена могут перестать существовать с 21 апреля. Проверьте, в каком статусе Ваши домены. Рассылки из биллинговой системы приходят не всегда и не всем.

Если Вы не хотите в данный момент пользоваться доменом, но и не хотите его лишиться — мы предлагаем новую возможность «Паркинг доменов».
Чтобы воспользоваться бесплатной услугой установите в качестве DNS Вашего домена наши серверы:
  1. park1.cishost.ru
  2. park2.cishost.ru

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

Можете проверить работоспособность серверов при помощи команд:
  • nslookup ваш_домен.ru park1.cishost.ru
  • nslookup ваш_домен.ru park2.cishost.ru
Команды действуют аналогично в Windows и Linux системах.

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