Аникин

Блог об администрировании Linux, BSD и не только.

Связаться со мной:
Ctrl + ↑ Позднее

Защита от DDoS атаки ботнета взломанных Wordpress сайтов

Столкнулся с атакой взломанных wordpress говносайтов на один из клиентских серверов. Клиент пожаловался на недоступность сайта, сайт отдавал ошибку gateway timeout. Зашёл на сервер, вижу

load average: 145.44, 114.78, 78.83

Странно что сервер ещё отвечал при такой нагрузке. Смотрю лог недоступного виртуалхоста и вижу кучу запростов типа

GET /index.php HTTP/1.0" 200 37648 "-" "WordPress/4.5.2; http://52.39.213.67; verifying pingback from 191.96.249.54"

Блокируем ботов по ключевому слову WordPress

# iptables -A INPUT -p tcp --dport 80 -m string --string 'WordPress' --algo kmp -j DROP

Проблема решена.

Простая установка OpenVPN сервера с помощью QuickOpenVPN.

QuickOpenvpn тулза для быстрого разворачивания OpenVPN сервера и генерации клиентских конфигов, сертификатов и ключей. Адрес на github https://github.com/shmulya/quickopenvpn

Рассмотрим установку на Ubuntu 14.04.
Заходим на сервер по ssh и устанавливаем нужные пакеты

# apt-get install python-pip openssl openvpn git
# pip install pyyaml

Скачаем установщик тулзы

# git clone https://github.com/shmulya/quickopenvpn.git

Переходим в каталог установщика и запускаем установку

# cd quickopenvpn
# python install.py

Установщик задаст несколько вопросов(email, где разместить ключи, пароль для веб-морды и т.д), отвечаем на них и дожидаемся генерации всех ключей и завершения установки. Также если вы используете именно Ubuntu 14.04 тулза спросит переместить ли конфиг в /etc/openvpn и запустить ли vpn-сервер. На других дистрах эта функция не реализована и придется все делать вручную, поэтому рекомендую именно Ubuntu 14.04. Также спросит разрешить ли форвардинг пакетов и добавить ли правило натирования в iptables. Отвечаем на все «y», и по окончанию работы тулзы мы получим полностью настроенный и работающий OpenVPN сервер.
Для старта веб-морды выполняем

./start

И заходим на https://ip_сервера:4443/ там логинимся с паролем который мы указали при установке

Жмакаем «Add» для добавления клиентского сертификата, указываем имя сертификаты. И после генерации мы сможем скачать архив со всем необходимым для подключения к серверу.

Жмакаем «Download» и получаем архив. На клиенте устанавливаем OpenVPN, распаковываем архив в /etc/openvpn. Не забываем в конфиге клиента поправить пути к ключам и сертификату. И стартуем сервис.
Видим что появился новый интерфейс и сервер пингуется. Значит все работает.

2016   openvpn   quickopenvpn   ubuntu

Мультиверсионность php на CentOS с VestaCP.

В комментариях к статье Мультиверсионность php на сервере с VestaCP один из читателей попросил написать статью как сделать тоже самое на CentOS. Я уже приготовился писать статью про компиляцию php из исходников, но почитав форум весты увидел что все уже сделано за меня.

На официальном форуме VestaCP есть скрипт, который добавляет репозиторий с уже собранными версиями php 5.5, 5.6 и 7.0. По умолчанию в CentOS 6.8 установлен php 5.4. В итоге после установки скрипта мы имеем все версии php начиная от 5.4.

Установка супер простая

# wget http://mirror.skamasle.com/vestacp/PHP/sk-phpinstaller_beta02_3.sh
# bash sk-phpinstaller_beta02_3.sh

Вывод установщика не очень многословен

После установки при редактировании виртуального хоста в web-шаблонах мы видим что появились новые пункты с новыми версиями php.

Пробуем переключится и смотрим phpinfo

Как видим, все работает. За скрипт спасибо пользователю с ником skamasle.

Установка ispmanager 4 на Ubuntu 14.04

Существует ПО которое работает только под определенной ОС. Так вот понадобилось одному клиенту такое ПО, которое работает только под ubuntu 14.04, но при всем при этом клиенту необходимо чтобы на сервере был установлен ispmanager 4. Как мы знаем ispmanager 4 не поддерживает 14 убунту. Придется выкручиваться.
Итак. Стандартно начинаем установку испы

wget "http://download.ispsystem.com/install.4.sh"
sh install.sh

Отвечаем на вопросы установщика и практически сразу получаем ошибку

Can’t get information about available packages

Видим в логе что произошел segmentation fault. Ищем какая либа его вызвала.

cat /usr/local/ispmgr/var/pkgctl.log|grep LoadModule

В последней строчке мы увидим эту либу.

Переименовываем её

mv /usr/local/ispmgr/lib/xxx.so /usr/local/ispmgr/lib/_xxx.so

Затем снова запускаем установку.

/usr/local/ispmgr/sbin/ISPmanager-install.sh

Теперь установка идет относительно нормально, ошибки мы получим только при проверке установленного ПО, т.к панель не умеет работать с апачем 2.4. Ну и ладно, главное панель установилась. Теперь нам нужно установить апач 2.2 вместо 2.4 для корректной работы панели.
Апач 2.2 мы возьмем в репозиториях 12 убунты.
Создаем файлы с содержимым
/etc/apt/sources.list.d/ubuntu1204.list

deb http://ru.archive.ubuntu.com/ubuntu/ precise main

/etc/apt/preferences.d/apache22

Package: apache*
Pin: release a=precise
Pin-Priority: 500

/etc/apt/preferences.d/libapache

Package: libapache*
Pin: release a=precise
Pin-Priority: 500

Выполняем

apt-get update

Затем идем в меню Возможности isp панели и удаляем апач. После удаления нужно подчистить оставшееся за панелью. Выполняем

apt-get purge apache2*

Все. Теперь идем в меню Возможности и жмакаем установить веб-сервер Apache. Установится apache 2.2. Далее доустанавливаем необходимое ПО, такое как php, phpmyadmin, webmail. Все это ПО не установилось по умолчанию, т.к оно не может работать без апача 2.2. Лучше также сразу установить nginx.

Есть ещё один ньюанс, не установится модуль апач для php, соответственно сразу после установки нужно удалить старые конфиги для webmail и phpmyadmin. Создать пользователя default-user и у него домен default.domain, которому разрешён php как cgi. И соответсвенно создать симлинки в каталог виртуалхоста юзера.

ln -s /usr/share/squirrelmail/ /home/default-user/data/www/default.domain/webmail
ln -s /usr/share/phpmyadmin /home/default-user/data/www/default.domain/myadmin

Придется смирится что myadmin и webmail будут работать по http, а не по https.
Также возможно придется поправить некоторые ошибки в конфигах squirrelmail и phpmyadmin, что выходит за пределы этой статьи.

А вообще лучше не использовать все эти пляски с бубном, и отказаться от устаревшей продукции isp. Например в пользу панели VestaCP.

2016   isp   isp-manager   ispmanager   ispmgr   ubuntu

Мультиверсионность php на сервере с VestaCP.

Можно использовать скрипт который упрощает установку разных версий php
Сделаем возможность использовать несколько разных версий php на одном сервере c Ubuntu 14.04 и VestaCP. Возможность переключать версию php будет для каждого сайта отдельно. По умолчанию в ubuntu 14.04.4 с вестой установился php 5.5.

Все действия производятся под root’ом.
Соберем старый php 5.4.
Установим необходимые пакеты.

apt-get build-dep -y php5
apt-get install libt1-dev libonig-dev libmcrypt-dev libreadline-dev

Создаем каталог для исходников

mkdir /php/
mkdir /php/src

Скачиваем туда сорцы с http://php.net.

wget -O /php/src/php-5.4.45.tar.bz2 http://de1.php.net/get/php-5.4.45.tar.bz2/from/this/mirror
cd /php/src/
tar -xjf php-5.4.45.tar.bz2
cd php-5.4.45

И создаем каталог куда будем собирать php

mkdir /php/php54

Конфигурим(обратите внимание на переменную —prefix=, она указывает на каталог куда собираем php)

./configure \
--prefix=/php/php54 \
--with-config-file-path=/etc \
--with-regex=php \
--disable-rpath \
--disable-static \
--with-pic \
--with-layout=GNU \
--enable-calendar \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-bcmath \
--with-bz2 \
--enable-ctype \
--with-cdb \
--with-iconv \
--enable-exif \
--enable-ftp \
--with-gettext \
--enable-mbstring \
--with-onig=/usr \
--with-pcre-regex=/usr \
--enable-shmop \
--enable-sockets \
--enable-wddx \
--with-libxml-dir=/usr \
--with-zlib \
--with-kerberos=/usr \
--with-openssl=/usr \
--enable-soap \
--enable-zip \
--with-mhash=yes \
--with-mysql-sock=/var/run/mysqld/mysqld.sock \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--enable-pdo \
--with-pdo-mysql=mysqlnd \
--enable-exif \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-freetype-dir=/usr \
--with-t1lib \
--with-zlib-dir=/usr \
--with-mcrypt=/usr \
--with-mhash \
--with-xsl=/usr \
--enable-zip \
--enable-cgi \
--with-curl \
--with-gd \
--enable-pcntl \
--enable-mbregex \
--enable-gd-native-ttf \
--with-libdir=lib64 \
--enable-dba=shared \
--enable-intl \
--with-readline=/usr \
--enable-simplexml \
--with-libdir=/lib/x86_64-linux-gnu \
--with-config-file-scan-dir="$instdir"/etc \
--with-pspell

Компиляем

make
make install

Включаем модуль cgi для апача

a2enmod cgi

Переключать будем шаблонами apache. Скопируем существующий шаблон phpcgi

cp /usr/local/vesta/data/templates/web/apache2/phpcgi.sh /usr/local/vesta/data/templates/web/apache2/php54.sh
cp /usr/local/vesta/data/templates/web/apache2/phpcgi.stpl /usr/local/vesta/data/templates/web/apache2/php54.stpl
cp /usr/local/vesta/data/templates/web/apache2/phpcgi.tpl /usr/local/vesta/data/templates/web/apache2/php54.tpl

Открываем файл /usr/local/vesta/data/templates/web/apache2/php54.sh и находим там строку

wrapper_script='#!/usr/bin/php-cgi -cphp5-cgi.ini'

заменяем на

wrapper_script='#!/php/php54/bin/php-cgi -cphp5-cgi.ini'

И перезапускаем весту

service vesta restart

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

Аналогично собираем php 5.6 и php 7.0, в каталоги /php/php56 и /php/php70 соответсвенно. И создаем для них шаблоны php56 и php70. Конфигурирование для php7 несколько отличается от php5. Мои параметры для конфигурирования есть в этой статье.

В результате этих манипуляций у нас появятся новые шаблоны php54, php56 и php70, с соответсвующими версиями php. Теперь для каждого домена мы можем выбрать любую версию php от 5.4 до 7.0. С выходом новых версий их можно добавлять к текущим таким же способом.

Дампы всех баз mysql

Сделать дампы всех баз данных пользователя, каждую базу в отдельный дамп:

for i in `mysql -u $USER -p$PASSWORD -e'show databases;' | \
 grep -v performance_schema | grep -v information_schema | grep -v mysql | \
 grep -v Database`; do mysqldump -u $USER -p$PASSWORD $i > /backup/mysql/$i.sql;done
$USER - пользователь mysql
$PASSWORD - пароль пользователя mysql
2015   mysql   mysqldump

Установка Debian 8 на OrangePI PC.

На днях мне пришла эта платка. Плата достаточно новая и информации по ней в русскоязычном сегменте интернета крайне мало. Расскажу как я усстанавливал на неё Debian 8.
Для любителей первоисточника, оригинальный мануал здесь
В общем вот отсюда нам понадобится 2 файла, собственно образ нужного дистрибутива(Я выбрал OrangePI_Jessie_Xfce.img.xz) и scriptbin_kernel.tar.gz.
Распаковываем образ дистрибутива и заливаем на нашу microsd с помощью dd

$ sudo dd if=OrangePI_Jessie_Xfce.img of=/dev/sdX bs=1M oflag=direct

Прогресс заливки можно глядеть выполнив в соседней консоли

$ sudo killall -USR1 dd

После записи нужно примонтировать первый раздел на нашей microsd, который с меткой BOOT.
Теперь нужно взять файл uImage_OPI-2 из архива scriptbin_kernel.tar.gz, переименовать его в ulimage и положить в раздел BOOT. Затем так же из архива взять один из файлов script.bin.OPI-PC_*****(я взял, например, script.bin.OPI-PC_720p60), переименовать его в script.bin и тоже положить в BOOT. Можно отмонтировать раздел.
Затем нужно второй раздел, который будет корнем нашей будущей ОС, увеличить до конца нашей флешки. С увеличением по оригинальному мануалу у меня ничего не получилось, были ошибки. Я делал по своему.
Выполняем

$ sudo fdisk /dev/sdX

В fdisk вводим p и нажимаем enter. Запоминаем цифру обведенную на картинке.

Жмем d, удаляем второй раздел

Жмем n для создания на его месте нового раздела с началом там же где был старый раздел. На все вопросы можно ответить по умолчанию, кроме начала раздела. В качестве начала введите запомненное вами число. После создания нового раздела нажмите w для применения изменений.

Теперь нужно увеличить старую файловую систему на весь новый раздел
Выполним

sudo e2fsck -f /dev/sdc2

потом

sudo resize2fs /dev/sdc2

Теперь можно примонтировать раздел и убедится что он расширен до конца флешки.
Все отмонтируем, берем microsd, вставляем в orangepi и загружаемся. Можно не подключать монитор и клавиатуру, в образе сразу настроен ssh. Подключится можно рутом или юзером opengepi, пароль у обоих orangepi. Я сразу после установки поднял vnc.

2015   debian   orangepi   orangepipc

Установка virtualbox с web-интерфейсом на сервер.

Имеем сервер на ubuntu 14.04. Нужно установить virtualbox с веб интерфейсом, чтобы установить несколько виртуальных машин на сервер.

Установка virtualbox.

Для начала установим сам virtualbox последней версии с репозиториев oracle.
Добавляем репозиторий и импортируем ключ

# echo "deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" | sudo tee -a /etc/apt/sources.list
# wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -

Устанавливаем virtualbox и модули ядра

# apt-get update
# apt-get install dkms virtualbox-5.0

Установим пакет дополнений гостевой ОС. Смотрим версию virtualbox

# vboxwebsrv -V
Oracle VM VirtualBox web service Version 5.0.2
(C) 2007-2015 Oracle Corporation
All rights reserved.
5.0.2r102096

И на этой странице берем ссылку для дополнений для нужной нам версии.
Скачиваем

# wget http://download.virtualbox.org/virtualbox/5.0.2/Oracle_VM_VirtualBox_Extension_Pack-5.0.2-102096.vbox-extpack

И устанавливаем

# VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.0.2-102096.vbox-extpack

Теперь создадим юзера, под которым будут работать наши виртуальные машины и добавим его в группу vboxusers

# adduser vbox
# usermod -a -G vboxusers 'vbox'

Не забываем пароль, который мы назначили пользователю vbox. Он нам ещё потребуется.
Настраиваем веб-сервис virtualbox

# nano /etc/default/virtualbox
VBOXWEB_USER=vbox #пользователь под которым работает virtualbox
VBOXWEB_HOST=xxx.xxx.xxx.xxx #ip
VBOXWEB_PORT=18083 #порт для веб-сервиса

Запускаем веб-сервис

# service vboxweb-service stop
# service vboxweb-service start

Установка web-интервейса.

Для работы веб интерфейса нам потребуется веб-сервер(мы будем использовать nginx) и php. Установим их.

# apt-get install nginx php5-common php5-fpm php-pear


Для ubuntu 16.04 кликнуть сюда

# apt-get install nginx php-common php-fpm php-pear php-soap


Создадим каталог для виртуального хоста.

# mkdir /var/www && mkdir /var/www/phpvirtualbox

На этой странице мы можем получить ссылки на архивы веб-интерфейса phpvirtualbox для разных версий virtualbox. В данном случае скачиваем и распаковываем в каталог виртуального хоста phpvirtualbox для нашей версии.

# cd /var/www/phpvirtualbox/ && wget http://sourceforge.net/projects/phpvirtualbox/files/phpvirtualbox-5.0-2.zip/download && mv download phpvirtualbox-5.0-2.zip
# unzip phpvirtualbox-5.0-2.zip && mv ./phpvirtualbox-5.0-2/* /var/www/phpvirtualbox

Копируем пример конфига

# cp /var/www/phpvirtualbox/config.php-example /var/www/phpvirtualbox/config.php

И редактируем

# nano /var/www/phpvirtualbox/config.php
# Пользователь и пароль под которым работает virtualbox
var $username = 'vbox';
var $password = 'PaS$w0rd';

# Адрес веб-сервиса
var $location = 'http://xxx.xxx.xxx.xxx:18083/';

# Диапазон rdp портов
var $vrdeports = '9000-9100';

# IP сервера
var $consoleHost = 'xxx.xxx.xxx.xxx';

Создаем файл виртуального хоста в nginx

# nano /etc/nginx/conf.d/phpvirtualbox.conf
server {
        listen   xxx.xxx.xxx.xxx:80;
 
        root /var/www/phpvirtualbox/;
        index index.php index.html index.htm;
 
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                try_files $uri $uri/ /index.html;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }
 
 
        # pass the PHP scripts to FastCGI server listening on 1$
        #
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+.php)(.*)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
 
}


Для ubuntu 16.04 конфиг такой

server {
        listen   XXX.XXX.XXX.XXX:80;

        root /var/www/phpvirtualbox/;
        index index.php index.html index.htm;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                try_files $uri $uri/ /index.html;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }


        # pass the PHP scripts to FastCGI server listening on 1$
        #
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+.php)(.*)$;
                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

}


Перезапускаем nginx

# service nginx restart

Теперь перейдя по адресу http://ip-сервера/ мы увидим форму логина. По умолчанию логин — admin и пароль — admin. Логинимся, открываем меню File, пункт Preferences и меняем пароль в графе Users. В графе Language можно поставить русский язык.

Установка виртуальной машины.

Скачиваем установочный образ нужной нам ОС(в данном случае debian 8) в домашний каталог юзера vbox

# cd /home/vbox/
# wget http://mirror.yandex.ru/debian-cd/8.1.0/amd64/iso-cd/debian-8.1.0-amd64-CD-1.iso

Затем в веб-интерфейсе, кликаем кнопку создать и создаем виртуальную машину с нужными нам характеристиками.

Переходим в настройки виртуальной машины — Дисплей. И во вкладке «Удаленный дисплей» включаем доступ по rdp с нужными нам данными авторизации и портом.

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

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

Установка i2p на удаленном сервере.

Нужно было поставить i2p на удаленный сервер c ubuntu 14.04, чтобы можно было ходить в i2p для всех vpn клиентов openvpn сервера установленного на нем. С момента написания моей предыдущей статьи на эту тему i2p заметно продвинулся вперед в плане юзабельности и установка стала гораздо проще. Поэтому пишу эту статью.
В первую очередь я поднял openvpn сервер, как это сделать написано в этой статье.
Затем устанавливаю i2p.

# apt-add-repository ppa:i2p-maintainers/i2p
# apt-get update
# apt-get install i2p

Следующей командой создаем и стартуем i2p-демон

# dpkg-reconfigure -plow i2p

Установка закончена.
Теперь прокидываем порт и настраиваем подписки и скорость подключения, это описано в предыдущей статье, повторятся не буду.
Раз мы используем vpn, то прокси нужно повесить на интерфейс openvpn. Для этого в управлении сервисами, для I2P HTTP Proxy нужно вместо 127.0.0.1 указать ip openvpn сервера, в моем случае это 10.8.0.1.

Все. Теперь чтобы ходить в i2p, нужно на клиентском компьютере в браузере указать прокси 10.8.0.1 порт 4444. У себя я делаю разграничение по шаблонам через foxyproxy в firefox. Т.е все сайты ходятся по умолчанию без прокси, а сайты с доменом .i2p foxyproxy заруливает на 10.8.0.1:4444.

До этого я использовал другую настройку, она более удобна но несколько сложна. На сервере поднимал bind, который заруливал все домены i2p на локальный ip сервера. Виртуалхост в nginx, заруливал все эти домены на прокси i2p-роутера. В итоге у vpn клиентов не надо было производить вообще никаких настроек, просто можно было ввести в любом браузере адрес i2p сайта и сервер сам его направлял на прокси. Но теперь у меня i2p обитает на достаточно слабом сервере и я не стал его напрягать ещё и bind’ом с nginx’ом. Поэтому использую foxyproxy.

2015   i2p   i2p-router   ubuntu

Переводим php движки с mysql на mysqli

Начиная с PHP 5.5.0 функции модуля mysql считаются устаревшими(deprecated), а в PHP 7 данный модуль вообще отсутствует, вместо него нужно использовать mysqli. Движки написаные с помощью функций модуля mysql не работают, т.к не могут подключится к базе данных и выдают в логе ошибки типа такой:

PHP Fatal error:  Uncaught Error: Call to undefined function mysql_connect() in...

К счастью, исправить все функции mysql на mysqli можно автоматически, скриптом на любом сайте.

Вот здесь скачиваете zip архив. Создаете в каталоге домена подкаталог например convert и кладете туда содержимое архива.
Потом переходите по ссылке вида
http://ваш_домен.ru/convert/GUI/index.php
И видите

Тут я выбирал «Convert a file», т.к в ошибке указан файл в котором присутствует эта функция. Указываем путь к файлу примерно как на картинке. И выбираем сразу заменить старый файл и забекапить.

Затем жмакаем «Start the conversion» и наслаждаемся результатом.

2015   mysql   mysqli   php   php7
Ctrl + ↓ Ранее