Блог очередного разработчика

Sanasol

WordPress безопасность

Сайты на WP ломают много и постоянно(пытаются по крайней мере с помощью толпы сканеров)

 

>>Зачем это все загружают? Там нечего на обычных сайтах тырить особо, никаких ботов вроде не создается и часто это виртуальные хостинги, т.е. рута к системе у них нет точно.

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

Такие сайты ломают тысячами — получают большие фермы из которых можно много чего выжать. В основном всё такое говно идёт с китайцев(с их серверов)

 

>>Что можно поставить на сервере для отслеживания постфактум — через какую хрень взломали?

Начальную точку заражению почти нереально найти. Дыры новые регулярно появляются, старые закрываются и так по кругу.
Тут уже только расследование на живом сайте который ломают. Т.е. чистишь сайт, опять вирусню заливают, пытаешься понять откуда.
Разные варианты пробуешь: плагины,закрыть доступ на запись куда-либо и т.д.

 

>> Через что лучше сканировать на предмет наличия вирусов?

Cканеры особо не помогают, вирусы на рандоме в основном. Т.е. набор буквоцифр. Многое упускается из виду.
Но как вариант ClamAV — это серверный антивирус. Он находит, но не всё.

 

Как избежать взломов мой рецепт

  • использовать меньше плагинов по возможности
  • желательно все плагины из более менее популярных.
  • обновляться постоянно(WP ядро, Плагины, Темы)
  • ну пароль само собой сложный у админа😂

 

Как лечить взломы

Шаг 1: Ставим Wordfence — сканируем файлы, все что заражено очищаем.

Чистим руками все что видим сами и через Wordfence.

Wordfence игнорирует вирусные файлы которые лежат например в корне сайта и не являются стандартными для WP.

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

Поэтому проверяем сами вручную все папки стандартные на наличие аномалий. Вычищаем.

 

Шаг 2: Ждём какое-то время.

Если вирусня не появляется — значит все почистили хорошо.

Если появляется значит возвращаемся к Шагу 1. Чистим заново еще тщательнее.

 

Шаг 3: Снова ждём.

Если ничего нет — профит.

Если есть — начинаем подозревать плагины.

Тут уже подробнее особо не расписать, все индивидуально.

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

 

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

Отказоустойчивость use case

Схема серверов

VPS #1 — Франция

  • nginx+php
  • mysql-1
  • haproxy

VPS #2 — Канада

  • nginx+php
  • haproxy

VPS #3 — Нидерланды

  • nginx+php
  • mysql-2
  • haproxy

mysql — master-master репликация.

haproxy — балансирует запросы на два mysql мастера.

haproxy.cfg

На каждый сервер идёт свой поддомен.
Чтобы завалить сервис необходимо положить как минимум 2 хоста из 3.
Для этого надо знать какие хосты держат mysql сервера.
В противном случае класть придётся все хосты, дабы вывести из строя сервис.

Работает 🙂

How works deploy on my pet project

ea5e8eba38b1f022d4cc898bac48

Hello, %username%.

First english post here. Just for lulz 😀
Actually post related to gift i’ve got from DeployBot
Here some stickers and postcard with handwritten message.
Gift from DeployBot

So I decided to write little post about deploy on my pet project — vboro.de.
I also have work project on deploybot, but it works almost same. Only difference is servers amount.
I use DeployBot about 9 months totally and last 3 months with the paid account.

So my deploy script is not canonical and not safe, but it works 🙂
After commit on master — github send info to DeployBot.
Then it just pulling data from github and then run/install/update composer and depencies.

How it looks on DeployBot

And here full script:

Thats all!
At current moment a have about 2500 deploys passed.

История про регулярное выражение

Жил был один новостной сайт на вордпрессе.

Стал плохо жить и переехал к нам на хостинг на собственный выделенный сервер.

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

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

И нашли мы волшебную строчку в functions.php темы.

Какой-то добрый программист оставил там всего лишь одну строчку которая перед каждой новостью с помощью preg_replace добавляла блок адсенса в нужное место.

Всего лишь один preg_replace для всего контента перед выводом ставил дедик на колени и заставлял его молиться чтобы пронать gateway.

Надеюсь эта маленькая история научит вас любить и уважать функции и не использовать регулярки везде где только можно.

Конец.

Сказ о том как я провел свой хакатон [1/2]

Сказ о том как я провел свой хакатон или два «сломанных» хостинга за одну ночь: часть первая Locum.

Прошло уже более полугода, а я только сейчас решил об этом написать.

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

(далее…)

Снова обработка писем Postfix + Dovecot

В продолжении поста про ловлю почты postfix + dovecot. Так как предыдущий варинт оказался мне не по нраву, да и не подошел, потому что письма после фильтра теряются. Пришлось искать решение при котором письма попадают и в ящик, и на обработку php.

Добавляем эту строчку в /etc/postfix/recipient_bcc. После сохранения запускаем в консоли «postmap /etc/postfix/recipient_bcc«. Так мы учим Postfix отправлять копии письма которые содержат «@yourdomain.tld» на адрес [email protected]. Т.е. создаем catch-all адрес.

Добавляем эту строчку в /etc/postfix/transport. После сохранения запускаем в консоли  «postmap /etc/postfix/transport«. Теперь Postfix  знает что письма приходящие на адрес [email protected] больше никуда не передаются, а попадают сразу к нам.

Эти строки идут в  /etc/postfix/main.cf.

Проверьте чтобы параметр «mydestination» в /etc/postfix/main.cf содержал «localhost«.

Добавляем эту строчку в /etc/aliases. После сохранения запускаем в консоли «postalias /etc/aliases«. Теперь письма пришедшие на [email protected] отправляются прямиком на наш PHP обработчик. Скрипт получает данные через STDIN.

Перезапускаем Postfix, теперь письма обрабатываются php скриптом и при этом доходят до получателя.

Ловим почту php-скриптом [Postfix]

Задача: автоматическая обработка почты и запись данных в mysql базу.

Dovecot и Postfix

Для начала нужно установить Dovecot и Postfix (я ставил версию с mysql)

Установка сервера приема почты это долгое и неблагодарное занятие которое съело у меня 6 часов, поэтому описывать это я не буду, гайдов полно в гугле.

Затем через postfixadmin версии 2.3.6 добавил catch all(т.е. все письма отправленные на любой адрес(даже не существующий) попадающие на наш сервер идут на одну почту) адрес с которого собирается почта на уже другой локальный ящик(тоже созданный в админке)

Сам фильтр добавить не трудно, проблема скорее в разборе письма… Пытался установить mailparse в php, но он отказался компилироваться, пришлось изобретать велосипед.

(далее…)

Игровой хостинг под Minecraft [1]

На руках: Панель GPX, VPS 2gb ram(1gb swap) и cpu 2×3400

Устанавливаем софт

Настройка MySQL

Для удобства зальем PMA последней версии в /var/www/pma

Идем на http://server-ip/pma и там создадим базу и юзера для панели

(далее…)