AEBC Руководство

  1. Быстрый старт
  2. Системные требования.
  3. Принцип работы.
  4. Шаблоны использования.
  5. Установка и настройка.
  6. Рекомендации по настройке с использованием NGINX.
  7. Телеграм.
  8. Тестирование работы скрипта.
  9. Настройка cron.
  10. Настройка через внешний онлайн планировщик.
  11. config.php.
  12. Проблемы и их решения.

Системные требования

Обязательно:
  • Unix/Linux like OS only;
  • PHP 5.3 cli.
Желательно:
  • Директория с публичным http доступом (Apache/NGINX вебсерверы);
  • sendmail - для отправки почты;
  • Возможность настраивать крон на сервере;
  • ssh доступ на сервер или администрируемый сервер.

Принцип работы

Назначение и принцип работы Abusive Experience изложен тут.

AEBC по запросу в браузере или по запросу внутреннего(cron) или внешнего планировщика получает подготовленную, максимально полную базу данных санкционных сайтов. Проверяет список доменов из файла domains.txt на наличие в этой базе и при необходимости, если хотябы один или более домен обнаружены в ней, отправляет отчёт на экран или на емейл.

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

Можно выделить три основных шага при каждом запуске:

  1. Загрузка базы (при необходимости);
  2. Поиск в ней доменов из списка;
  3. Отправка почтового \ телеграм сообщения или вывод данных в окно браузера.

Данные можно получать в форматированном виде или в виде дампа:
reviewedSite | SourceDB | abusiveStatus/betterAdsStatus | filterStatus

      reviewedSite:string
      Имя/домен рассматриваемого сайта.

      SourceDB:string
      Enum: AbusiveExperienceDb, ExperienceDb - Mobile, ExperienceDb - Desktop
      Метка базы, где обнаружен.

      abusiveStatus:string
      Enum: UNKNOWN, PASSING, FAILING
      Статус сайта в базе о злоупотреблениях.

      betterAdsStatus:string
      Enum: UNKNOWN, PASSING, WARNING, FAILING
      Статус сайта в базе стандартов качества рекламы.

      filterStatus:string
      Enum: UNKNOWN, ON, OFF, PAUSED, PENDING
      Статус фильтрации сайта в той базе, в которой сайт рассматривается по контексту.

      enforcementTime:string
      Дата, с которой начинается принудительное исполнение.

      lastChangeTime:string
      Последний раз, когда сайт менял статус.
            

Список доменов элементарно прост. Берёте список ваших доменов, например, прямо с админ панели регистратора и в любом текстовом редакторе приводим к виду:

domain1.com
domain2.com
#domain4.com  Пропускать пока
domain5.com
# Отдельный список
domain6.com
domain7.com    # Не мой домен
domain8.com

Где строки после символа "#" являются комментариями и игнорируются при проверке. Пробелы и табы также игнорируются.

Шаблоны использования

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

  • Только через веб в браузере или другим http клиентом (без расписания): Скрипт в первую очередь предназначен для рассылки результатов работы на емейл или телеграм вебмастера. Но если по каким-то причинам вам нужны результаты исключительно по запросу, то возможен и такой шаблон использования. Например, вы можете брать сырые данные по http запросу для ещё какой-то обработки. В таком случае вам обязательно нужен сервер с публичным доступом. Это может быть либо уже работающий сайт со своим доменом или просто торчащий наружу IP. Крон в данном случае не нужен. Вы просто заливаете скрипт на сервер и обращаетесь по URL к его фронт скрипту, который отдаёт вам результаты.
  • Только по расписанию (когда нет доступа по http): Редкий случай, если вам всё же нужно получать отчёты по расписанию на емейл или телегу при этом по какой-то причине у вас не установлен вебсервер, вы можете залить скрипт на сервер таким образом, что ему не будет необходимости использовать внешний http доступ. Для данного способа доступ к настройке крона или хороший админ обязательны.
  • Смешанный режим (объединяющий два предыдущих способа): Самый распространённый способ использования скрипта, который включает в себя два вышеописанных метода, когда вы просто заливаете скрипты в доступную по http директорию (например рабочий сайт) и у вас есть возможность получать отчёты по расписанию и в вебе. AEBC не мешает работе сайта, работает независимо. При этом не обязательно уметь настраивать крон, его можно использовать на удалённых бесплатных сервисах. При наличии веб доступа отладка скрипта упрощается. Наконец, веб доступ всегда можно закрыть средствами вебсервера или логин формой.

Установка и настройка

Кратко процесс установки изложен на странице быстрый старт и его в 90% случаев достаточно! Сейчас рассмотрим немного более подробно.

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

  1. Скачиваем архив со скриптом и распаковываем. Открываем в текстовом редакторе файл
    aebc/back/config.php
    и заменяем в нём YOUR@EMAIL на ваш емейл, на который вам выдан ключ и могут приходить отчёты, а YOURKEY заменяем на ключ, который можно получить тут.
  2. Заливаем на ваш сервер в удобное для вас место. Например, это корневая веб-директория: /home/web/yourdomain.com/ сайта вашего домена yourdomain.com. У нас получится: /home/web/yourdomain.com/aebc/
  3. Ставим права 0777 (drwxrwxrwx) на директорию back, в нашем примере это /home/web/yourdomain.com/aebc/back/. Как установить права на файл или директорию с помощью FTP клиента ↬ или с помощью SSH соединения ↬ к серверу.
  4. Добавляем домены для проверки в файл aebc/back/domains.txt о одному в строке. (Этот шаг можно пропустить, если используется веб версия. Там есть онлайн оедактор доменов.)
  5. Тестируем скрипт.
  6. На этом можно уже было и закончить, но мы хотим получать оповещение на емейл.
    Для этого у нас есть 2 пути:
    a) С использованием cron (более надёжный): мы знаем что такое ssh, cronjob или у нас есть админ для этого:
    0 9 * * * /PHP_BIN_PATH/php -q /FULL_PATH_TO_AEBC_DIR/back/email_cron.php
    b) Без использования cron (более простой): мы не хотим связываться с настройками сервера и доверимся стороннему сервису, который будет извне дёргать по http наш файл на нашем домене. Рекомендации по внешнему планировщику ниже.
  7. На этом можно уже было и закончить, но мы хотим получать оповещение на телеграм.
    Для этого у нас так же есть 2 пути:
    a) С использованием cron (более надёжный): мы знаем что такое ssh, cronjob или у нас есть админ для этого:
    0 11 * * * /PHP_BIN_PATH/php -q /FULL_PATH_TO_AEBC_DIR/back/telegram_cron.php
    b) Без использования cron (более простой): мы не хотим связываться с настройками сервера и доверимся стороннему сервису, который будет извне дёргать по http наш файл на нашем домене. Рекомендации по внешнему планировщику ниже.

    * С телеграмом чуть сложнее чем с почтой, только по причине, что нужно прокликать пару раз для создания своего собственного телеграм бота. Ничего сложного, там пару кликов. Зато, это будет ваш личный бот и все данные в нём будут проходить только через вас и сервис телеграма, без участия ещё какой-то стороны. Это отступление о сохранении приватности в случае телеграм, как средства получения репортов. Настройка телеграма тут, чуть ниже в отдельном параграфе.
  8. Всё готово!

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

Рекомендации по настройке с использованием NGINX или Apache+NGINX

Хочется заметить, что скрипт не заточен под какой-то определённый сервер, ему без разници. Без особых проблем запускается под Apache. Есть некоторые особенности работы под NGINX. Директория aebc/back/ может оказаться открытой для чтения. Для Apache сервера эту директорию закрывает файл aebc/back/.htaccess, но NGINX-сервер без специальной надстроек игнорирует этот файл. Свои настройки NGINX держит в специальном файле, доступ к которому обычно возможен только по ssh. Для этого нужно либо самостоятельно, либо с помощью админа закрыть доступ из веб ко всему содержимому директории aebc/back/. При желании можно после отладки в браузере закрыть или установить пароль на доступ к aebc директории.

Настройка работы с телеграм ботом

  1. Переходим по урлу официального отца всех телеграм ботов BotFather (@botfather) ↬.
  2. Приветствуем его "/start".
  3. Запрашиваем создание личного нового бота "/newbot". И дальше отвечаем на вопросы самого BotFather.
    a) Придумываем ему формальное имя (То, которое будет отображаться у нас в списке контаков телеги).
    a) Придумываем уникальный username.
    c) Бот Отец даст нам ссылку на нашего новоиспечённого бота и секретный API Token.
    Telgram Bot Setup Telgram Bot Setup 2
  4. Первым делом после необходимо открыть по ссылке вашего бота и нажать "/start" для старта чата внутри бота.
  5. Затем возращаемся в чат BotFather, копируем API Token и заменяем для TELEGRAM_API_TOKEN и, желательно, TELEGRAM_USERNAME в config.php.
  6. Готово! Больше информации о телеграм ботах тут. ↬
  7. В вебе или в косоле запускаем тест aebc/telegram_test.php скрипт запомнит ID чата и продолжит общаться через него. Смысл чату иметь ID именно в том, что бот не рассылает репорты всем подряд, кто его найдёт и подпишется, а только вам.

Тестирование работы скрипта

  1. Убедитесь, что в списке доменов файла domains.txt есть хотябы один не закомментированный домен. Нет ничего плохого, что список будет пуст, в таком случае тест просто можно приостановить на неопределённый срок без удаления или перенастройки скрипта. Но для полноценного теста необходим хотябы один домен в списке для теста. При этом не важен его статус с точки зрения наличия или отсутствия в проверяемой базе данных. Для большей надёжности подойдёт баненый домен, уже включённый в данную базу данных. Список баненых доменов можно найти тут.
  2. При наличии веб доступа запустите http://yourdomain.com/aebc/ и убедитесь, что на странице не выводятся сообщения об ошибке. В противном случае ошибка появится на странице в виде "[Error]: Error description".
  3. Если вы планируете использовать внешний онлайн планировщик, то откройте для теста его URL в браузере http://yourdomain.com/aebc/web_cron.php. Тут так же необходимо проверить отсутствие сообщений об ошибках.
  4. Проверьте нет ли доступа к любому из файлов в директории aebc/back/ извне. Например, http://yourdomain.com/aebc/back/domains.txt не должен показывать содержимое файла.
  5. Некоторые непредвиденные ошибки могут отображаться в теле емейлов. Но вам необходимо предварительно проверить настройки антиспама вашего емей ящика. Он может с большой вероятностью блокировать емейлы с вашего сервера. Так уж устроена современная почта. Современные сервисы из-за обилия спама в последние годы перестали напрочь пропускать емейлы с первой десятки извесных сервисов, коими стал, например Gmail. Тест емейлов можно инициировать набрав в браузере :
    http://yourdomain.com/aebc/web_cron.php?test=alarm
    или командной строке:
    php email_test.php

Настройка cron

Узнаём у админа или с использованием команды на сервере which php или whereis php, по каому пути на сервер находится бинарник php. В 90% случаев это будет либо /usr/bin/php или реже в /usr/local/bin/php.

Устанавливаем задание крона так чсто, как хотим (но не чаще чем раз в 4ре часа) по шаблону вида: 0 1 * * * /PHP_BIN_PATH/php -q /FULL_PATH_TO_AEBC_DIR/back/email_cron.php

Важно использовать пути от корня файловой системы, которые начинаются с символа "/". Для нашего примера это будет строка:
0 1 * * * /usr/bin/php -q /home/web/yourdomain.com/aebc/back/email_cron.php
В данном примере крон запускается раз в сутки в 1:00AM по серверному времени.

После этого, при желании доступ к директории aebc/ можно закрыть средствами вебсервера, но только если веб-морда скрипта более не нужна и скрипт отлажен. Можно установить пароль в aebc/back/config.php

Настройка через внешний онлайн планировщик

Для случая, если не хотим использовать cron, можно воспользоваться сервисом https://www.easycron.com/ ↬ или подобным.

Сервис по http должен обращаться к файлу aebc/web_cron.php. По сути это удалённый браузер, который открывает специальный URL по расписанию. Для нашего примера это будет URL: http://yourdomain.com/aebc/web_cron.php. Вы можете задать интервал внешнего планировщика так часто как он позволит и настроить минимальный интервал запуска проверки и рассылки внутри файла aebc/web_cron.php. В дефолтном виде файл уже готов к работе и настраивать его не требуется.

config.php

При желании в этом файле можно установить формат даты и времени, установить пароль на веб морду, а так же выбрать способ получения результата: форматированным(по умолчанию) или сырым дампом (меняем 0 на 1 в значении константы RESULT_AS_DUMP).

Некоторые Пользовательские параметры config.php:
  • define('EMAIL', 'YOUR@EMAIL'); -- емейл с лицензией и для рассылки
  • define('KEY', 'YOURKEY'); -- ключ лицензии
  • define('TELEGRAM_API_TOKEN', '1111111111:AAbbCCddFFgg'); -- токен, который нам даст BotFather (@botfather)
  • define('TELEGRAM_USERNAME', '@username'); -- можно оставить пустым, но желательно заполнить своим ником из телеги.
  • define('TELEGRAM_CHAT_ID', ''); -- можно оставить пустым, оперделяется автоматически. Но при желании можно захардкодить для безопасности. Код chat_id приходит телеграмм чат при запуске telegram_test.php.
  • define('RESULT_AS_DUMP', 0); -- в случае, если не 0, то отчёты как в вебе, так и на почту будут приходить сырым дампом
  • define('DATE_FORMAT', 'Y-m-d H:i:s'); -- формат даты и времени
  • define('SECRET', ''); -- установка пароля для веб морды, если не пустое
  • define('EMAIL_SUBJ_PREFIX', ''); -- бывает, что у вас несколько скриптов, или по какойто ещё причине вам нужно добавить отлилчительный префикс к теме писем с отчётом
  • define('SKIP_STATUSES', ''); -- не выводит предупреждения, если статус его в списке перечисленных в данной настройке (через запятую). Например, нам не нужно видеть репорты для доменов со статусами PAUSED и(или) PENDING, тогда вписываем в значение 'PAUSED,PENDING'.

Остальные параметры трогать не рекомендуется.

Проблемы и их решения

  1. Проблема: Не приходят емейлы.
    Решение: При первых запусках скрипта надо добавить домен \ ip сервера в не блокируемые. В случае с gmail вообще велика вероятность, что письма пойдут сразу в спам. Необходимо в папке спама отметь их, как НЕ спам. Тест емейлов можно инициировать открыв в браузере:
    http://yourdomain.com/aebc/email_test.php
    или командной строке:
    php email_test.php
  2. Проблема: Как сменить сервер с установкой скрипта?
    Решение: При смене сервера, нужно менять ключ лицензии. Необходимо связаться с поддержкой.