среда, 13 декабря 2017 г.

How to move virtuozzo 7 on packet.net to software raid1

After installation Type 1 node on packet.net we have same scheme block device:
lsblk 
NAME              MAJ:MIN    RM   SIZE RO TYPE  MOUNTPOINT
sda                 8:0       0 223.6G  0 disk  
├─sda1              8:1       0     2M  0 part  
├─sda2              8:2       0   256M  0 part  /boot
├─sda3              8:3       0     8G  0 part  [SWAP]
└─sda4              8:4       0 215.3G  0 part  /
sdb                 8:16      0 223.6G  0 disk  
└─mpathb          253:0       0 223.6G  0 mpath 
ploop17991        182:287856  0    10G  0 disk  
└─ploop17991p1    182:287857  0    10G  0 part  /vz/pfcache

Check disk labels:

fdisk -l /dev/sda
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sda: 240.1 GB, 240057409536 bytes, 468862128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: C63AA19D-6E91-4A1E-976D-899D800EC489


#         Start          End    Size  Type            Name
 1         2048         6143      2M  BIOS boot parti BIOS
 2         6144       530431    256M  Linux filesyste BOOT
 3       530432     17307647      8G  Linux filesyste SWAP
 4     17307648    468862094  215.3G  Linux filesyste ROOT
fdisk -l /dev/sdb

Disk /dev/sdb: 240.1 GB, 240057409536 bytes, 468862128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

and create gpt label on /dev/sdb:

parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt                                                      
(parted) q                                                                
Information: You may need to update /etc/fstab.

fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Disk /dev/sdb: 240.1 GB, 240057409536 bytes, 468862128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: 2F21C828-C60E-4DBD-AC6B-DDA2B119B92D
#         Start          End    Size  Type            Name


Now create partitions on /dev/sdb like /dev/sda but need set Type RAID for all partitions except BIOS boot  partiotions:

fdisk -l /dev/sda
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Disk /dev/sda: 240.1 GB, 240057409536 bytes, 468862128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: C63AA19D-6E91-4A1E-976D-899D800EC489


#         Start          End    Size  Type            Name
 1         2048         6143      2M  BIOS boot parti BIOS
 2         6144       530431    256M  Linux filesyste BOOT
 3       530432     17307647      8G  Linux filesyste SWAP
 4     17307648    468862094  215.3G  Linux filesyste ROOT
fdisk /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p

Disk /dev/sdb: 240.1 GB, 240057409536 bytes, 468862128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: 2F21C828-C60E-4DBD-AC6B-DDA2B119B92D


#         Start          End    Size  Type            Name

Command (m for help): n
Partition number (1-128, default 1): 1
First sector (34-468862094, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-468862094, default 468862094): 6143
Created partition 1


Command (m for help): n
Partition number (2-128, default 2): 2
First sector (34-468862094, default 6144): 
Last sector, +sectors or +size{K,M,G,T,P} (6144-468862094, default 468862094): 530431
Created partition 2


Command (m for help): n
Partition number (3-128, default 3): 3
First sector (34-468862094, default 530432): 
Last sector, +sectors or +size{K,M,G,T,P} (530432-468862094, default 468862094): 17307647
Created partition 3


Command (m for help): n
Partition number (4-128, default 4): 4
First sector (34-468862094, default 17307648): 
Last sector, +sectors or +size{K,M,G,T,P} (17307648-468862094, default 468862094): 468862094
Created partition 4


Command (m for help): t
Partition number (1-4, default 4): 1
Partition type (type L to list all types): 3
Changed type of partition 'Linux filesystem' to 'BIOS boot partition'

Command (m for help): t
Partition number (1-4, default 4): 2
Partition type (type L to list all types): 13
Changed type of partition 'Linux filesystem' to 'Linux RAID'

Command (m for help): t
Partition number (1-4, default 4): 3
Partition type (type L to list all types): 13
Changed type of partition 'Linux filesystem' to 'Linux RAID'

Command (m for help): t
Partition number (1-4, default 4): 4
Partition type (type L to list all types): 13
Changed type of partition 'Linux filesystem' to 'Linux RAID'

Command (m for help): p

Disk /dev/sdb: 240.1 GB, 240057409536 bytes, 468862128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: 2F21C828-C60E-4DBD-AC6B-DDA2B119B92D


#         Start          End    Size  Type            Name
 1         2048         6143      2M  BIOS boot parti 
 2         6144       530431    256M  Linux RAID      
 3       530432     17307647      8G  Linux RAID      
 4     17307648    468862094  215.3G  Linux RAID      

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


reboot hard node and list block devices:

lsblk 
NAME              MAJ:MIN    RM   SIZE RO TYPE  MOUNTPOINT
sda                 8:0       0 223.6G  0 disk  
├─sda1              8:1       0     2M  0 part  
├─sda2              8:2       0   256M  0 part  /boot
├─sda3              8:3       0     8G  0 part  [SWAP]
└─sda4              8:4       0 215.3G  0 part  /
sdb              8:16      0 223.6G  0 disk  
├─sdb1           8:17      0     2M  0 part  
├─sdb2           8:18      0   256M  0 part  
│ └─md0          9:0       0 255.7M  0 raid1 /boot
├─sdb3           8:19      0     8G  0 part  
│ └─md1          9:1       0     8G  0 raid1 [SWAP]
└─sdb4           8:20      0 215.3G  0 part  
  └─md2          9:2       0 215.2G  0 raid1 /
  

Now create raid :


mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb2 
mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb3 
mdadm --create /dev/md2 --level=1 --raid-devices=2 missing /dev/sdb4 


and make ext4 file system and swap:


mkfs.ext4 /dev/md0
mkfs.ext4 /dev/md2     
mkswap  /dev/md1

mount raid partitions and copy source and target :

mount /dev/md1 /mnt/
rsync -axu / /mnt/
mount /dev/md0 /mnt/boot/
rsync -axu /boot/ /mnt/boot/

Now mount and chroot :

mount --bind /proc/ /mnt/proc/
mount --bind /dev/ /mnt/dev/
mount --bind /sys/ /mnt/sys/
mount --bind /run/ /mnt/run/
 chroot /mnt/


Get blkid for md devices 

blkid | grep md
/dev/md1: UUID="68f122be-c9e3-4b55-ae59-140ba641ba57" TYPE="swap" 
/dev/md0: UUID="029cce04-6af9-49ac-b904-9c524e89af69" TYPE="ext4" 
/dev/md2: UUID="3f5bb96b-4803-49f8-aefc-f04f92586471" TYPE="ext4" 

and put it into /etc/fstab instead old's for / , /boot , swap


Create mdadm.conf :

mdadm --detail --scan > /etc/mdadm.conf


save current initrd and run dracut :

 mv /boot/initramfs-3.10.0-693.1.1.vz7.37.30.img /boot/initramfs-3.10.0-693.1.1.vz7.37.30.img.bak
 dracut /boot/initramfs-$(uname -r).img $(uname -r)

Add value  rd.auto=1 in /etc/default/grub to parameter GRUB_CMDLINE_LINUX:

GRUB_CMDLINE_LINUX="console=ttyS1,115200n8 crashkernel=auto console=ttyS1,115200n8,rd.auto=1"



Generate new grub.cfg 


grub2-mkconfig -o /boot/grub2/grub.cfg

and write new grub on both disks:

grub2-install /dev/sdb
grub2-install /dev/sda

exit from chroot and umount resources :

umount /mnt/run
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev
umount /mnt/boot
umount /mnt 

Reboot hard node and change type partitions for /dev/sda like /dev/sdb :

fdisk -l /dev/sda
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sda: 240.1 GB, 240057409536 bytes, 468862128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt

#         Start          End    Size  Type            Name
 1         2048         6143      2M  BIOS boot parti BIOS
 2         6144       530431    256M  Linux RAID      BOOT
 3       530432     17307647      8G  Linux RAID      SWAP
 4     17307648    468862094  215.3G  Linux RAID      ROOT

fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sdb: 240.1 GB, 240057409536 bytes, 468862128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt

#         Start          End    Size  Type            Name
 1         2048         6143      2M  BIOS boot parti 
 2         6144       530431    256M  Linux RAID      
 3       530432     17307647      8G  Linux RAID      
 4     17307648    468862094  215.3G  Linux RAID  

Then add sdaX partition to raid :
mdadm --manage /dev/md0 --add /dev/sda2
mdadm --manage /dev/md1 --add /dev/sda3
mdadm --manage /dev/md2 --add /dev/sda4


понедельник, 1 августа 2016 г.

Generate self-signed wildcard ssl certificate

 $ openssl genrsa 2048 > domain.key
Generating RSA private key, 2048 bit long modulus
........+++
..................................+++
e is 65537 (0x10001)
$ openssl req -new -x509 -nodes -sha1 -days 365 -key domain.key > domain.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:UA
State or Province Name (full name) [Some-State]:Kiev
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:company
Organizational Unit Name (eg, section) []:operations
Common Name (e.g. server FQDN or YOUR name) []:*.domain.name.com
Email Address []:operations@gmail.com
$ls -al
domain.crt
domain.key

Now you can put these files to your nginx/apache and configure servers.

воскресенье, 27 марта 2016 г.

How to configure fail2ban to defence Wordpress xmlrpc.php from DDOS attack



Install fail2ban package:

yum install -y fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vi /etc/fail2ban/jail.local

add to end of file next section:
[xmlrpc]
enabled = true
filter = xmlrpc
action = iptables[name=xmlrpc, port=http, protocol=tcp]
logpath = /var/log/{nginx,apache}/access.log
bantime = 3600
maxretry = 3

Then go to filter.d directory :

 cd /etc/fail2ban/filter.d/
and create  xmlrpc.conf file with next content:


[Definition]
failregex = ^<HOST> .*POST .*xmlrpc\.php.*
ignoreregex =


restart fail2ban service:

service fail2ban restart

and see fail2ban log :

tail -f /var/log/fail2ban.log

fail2ban.jail            : INFO    Jail 'xmlrpc' uses poller
fail2ban.filter         : INFO    Set jail log file encoding to UTF-8
fail2ban.jail            : INFO    Initiated 'polling' backend
fail2ban.filter         : INFO    Added logfile = /var/log/nginx/access.log
fail2ban.filter         : INFO    Set maxRetry = 2
fail2ban.filter         : INFO    Set jail log file encoding to UTF-8
fail2ban.actions     : INFO    Set banTime = 43600
fail2ban.filter         : INFO    Set findtime = 600
fail2ban.jail            : INFO    Jail 'xmlrpc' started
fail2ban.filter         : INFO    [xmlrpc] Found 208.67.y.xx
fail2ban.filter         : INFO    [xmlrpc] Found 46.161.y.xxx

fail2ban.actions     :WARNING [xmlrpc] Ban 5.39.88.106

среда, 30 июля 2014 г.

Проброс портов из хоста в гостевую систему (KVM)

Например в гостевой системе открыт ssh порт 22. Чтобы к нему пробиться из внешней сети изменяем конфигурацию виртуальной машины:

virsh edit vm_name
вначале меняем первую строку:
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
Затем находим строку , описывающую сетевую карту 
<interface type='network'>

и меняем на следующее: 
<interface type='user'>
И добавляем аргументы перед закрывающим тегом </domain>:
<qemu:commandline>
  <qemu:arg value='-redir'/>
  <qemu:arg value='tcp:2122::22'/>
</qemu:commandline>
 
Теперь обращаясь по адресу  хоста и указывая порт 2122, пакеты будут перенаправляться 
на порт 22 гостевой машины.
 
И на хосте, конечно, необходимо прописать что делать с поступающими пакетами:
 iptables -I FORWARD 1 -i eth0 -o virbr0 -d ip_vm -p tcp -m tcp --dport 2122 -j ACCEPT
 iptables -t nat -A POSTROUTING --dst ip_vm -p tcp --dport 2122 -j SNAT --to-source internal_ip_host
 

пятница, 9 мая 2014 г.

KVM сохраняем состояние гостевых машин при выключении хоста

Имеется сервер Ubuntu 12.04 с настроенной kvm. В виртуальной среде  работают несколько машин. Необходимо сохранять состояние виртуальных машин при выключении сервера. Когда-то давно я делал такую задачу и все отличненько работало, но, к сожадению , не записал - приходится вновь изобретать велосипед. Сразу скажу - в прошлый раз схема была намного изящней, но не могу вспомнить как было настроено. Если кто подскажет более правильное решение - буду благодарен.
Итак есть тфкой файлик на сервере /etc/init/libvirt-bin.conf 
В нём необходимо найти такие строки :

 for domain in $(run_virsh -c "$uri" list | awk '$3 == "running" {print $2}'); do
            log_msg "libvirt-bin: attempting clean shutdown of $domain at $(date)"
            run_virsh -c "$uri" shutdown "$domain" >/dev/null
        done


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

for domain in $(run_virsh -c "$uri" list | awk '$3 == "running" {print $2}'); do
            log_msg "libvirt-bin: attempting clean shutdown of $domain at $(date)"
            run_virsh -c "$uri" save "$domain" "/kvm-state/$domain.save">/dev/null
        done

Таким образом в каталоге /kvm-state/ сохранятся файлы имя_виртуалки.save

Восстановить состояние машин можно командой

virsh restore /kvm-state/domain_name.save

 При этом не забыть предварительно убрать автостартующие виртуалки из каталога /etc/libvirt/qemu/autostart



среда, 7 мая 2014 г.

Извлечение аудиодорожки в формате mp3 из avi

Для выполнения сабжа устанавливаем необходимые программы:

sudo apt-get install ffmpeg libavcodec-extra-53 libav-tools 

А для автоматизации  извлечения аудиодорожек из нескольких файлов нарисуем такой скрипт:

#!/bin/sh
 

for x in *.avi; do
    avconv -i "$fn"  "`basename "$fn" .avi`.mp3"
    rm $fn
done



среда, 16 апреля 2014 г.

Зеркалирование каталогов между серверами


Есть каталог /home/user1/filedata на server1 и каталог /home/user2/filedata на server2. В любой из этих каталов извне сохраняются данные. Задача стоит засинхронизировать содержимое этих каталогов.
В ядре linux есть механизм inotify - который позволяет отслеживать изменения в файловой системе. Для использования этого механизма установим пакет inotify-tools

Теперь для обработки событий , связанных с изменением в наших каталогах воспользуемся следующей конструкцией:
inotifywait -r -e create,attrib,delete,modify,move /home/user1/filedata/

где  -r  просматривать каталог рекурсивно
       -e  create,attrib,delete,modify,move  слушать следующие события

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

server1@root#mkdir .ssh
генерируем ключ без пароля
server1@root#ssh-keygen -t rsa
и отправим открытый  ключ пользователю другого сервера
server1@root#ssh-copy-id -i .ssh/id_rsa.pub user2@server2

и на втором сервере:
server2@root#mkdir .ssh

server2@root#ssh-keygen -t rsa

server2@root#ssh-copy-id -i .ssh/id_rsa.pub user1@server1

можем проверить как , как работет rsync через ssh:
server1@root#rsync -e 'ssh -p 22' -avzp --delete /home/user1/filedata/ user2@server2:/home/user2/filedata/

и в обратную сторону:
server2@root#rsync -e 'ssh -p 22' -avzp --delete /home/user2/filedata/ user1@server1:/home/user1/filedata/

Теперь оформим эту всю красоту в виде демонов

создадим в /etc/init.d/ файлик sshync следующего содержания:

#!/bin/sh
while inotifywait -r -e  create,attrib,delete,modify,move /home/user1/filedata/;do
 rsync -e 'ssh -p 22' -avzp --delete /home/user1/filedata/ user2@server2:/home/user2/filedata/
done

А в /etc/init создадим файл sshync.conf :

description "syncronisation filedata"
start on runlevel [2345]
stop on runlevel ![2345]
respawn
exec /etc/init.d/sshync

Теперь можем создать символические ссылки в скриптах запуска:
update-rc.d sshync start 70   2 3 4 5 . stop 20 0 1 6 .

Можем стартовать сервисы. Протокол работы сервиса в /var/log/upstart/sshync.log

Чтобы все работало корректно, внешние изменения в каталоги filedata должны осуществляться с правами user1 и user2 соответственно