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

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

Ошибка при установке фряхи через bsdinstall

При установке freebsd на сторонний носитель с помощью bsdinstall после разметки диска и скачивания архива получаем ошибку

Error while fetching file:///usr/freebsd-dist/MANIFEST" - no such file or directory

идем на ftp://ftp.freebsd.org/pub/FreeBSD/releases/
Выбираем платформу, затем версию фряхи, в общем идем по каталогам. И получаем ссылку на файл, например для freebsd 11.0 amd64:
ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/11.0-RELEASE/MANIFEST

Скачиваем файл в /usr/freebsd-dist на текущей системе и снова запускаем bsdinstall.

2016   bsdinstall   Freebsd

Добавление кучи ip в vestacp

Создаем скрипт со следующим содержимым

#!/bin/bash
export VESTA=/usr/local/vesta/
file="/root/ip.txt"
while read line
do
/usr/local/vesta/bin/v-add-sys-ip $line 255.255.255.255 eth0
done < $file

В /root/ip.txt кладем список ip построчно.
Делаем скрипт исполняемым и запускаем. IP добавлены на сервер в весте.

Защита от 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 клиентом к хост-машине по порту указанному в настройках удаленного дисплея и продолжить установку как обычно. Также можно подключится прямо через веб-интерфейс, просто кликнув «Консоль» справа сверху.
Ранее Ctrl + ↓