Hoe verhuis je een Xen instantie naar een andere server?

Om een Xen instantie naar een andere server te verhuizen welke niet in het cluster zit en/of van dezelfde storage gebruik maakt doe je het volgende:

  1. Kijk naar de omvang van het Logical Volume:
    [root@oudeserver ~]# lvdisplay
    
     --- Logical volume ---
      LV Name                /dev/VG_oudeserver/virtual_img
      VG Name                VG_oudeserver
      LV Write Access        read/write
      LV Status              available
      # open                 0
      LV Size                26.00 GB
      Current LE             832
      Segments               2
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     256
      Block device           253:4

    Zoals je ziet is het Logical Volume 26 GB.

  2. Maak op de nieuwe server een Logical Volume aan die iets groter is (bijvoorbeeld 27 GB)
    [root@nieuweserver ~]# lvcreate -L 27G -n virtual_img  VG_nieuweserver
    
  3. Kopieer de inhoud van het Logical Volume over van de oude naar de nieuwe server:
    [root@oudeserver ~]# dd if=/dev/VG_oudeserver/virtual_img | gzip -1 - | ssh root@nieuweserver 'gzip -d | dd of=/dev/VG_nieuweserver/virtual_img'
  4. Kopieer het configuratie bestand van de oude naar de nieuwe server
    [root@oudeserver /]# scp /etc/xen/virtual.cfg root@nieuweserver:/etc/xen/
  5. Pas op de nieuwe server de configuratie aan en zorg ervoor dat de ‘disk’ overeenkomt met je nieuwe Logical Volume:
    disk = ['phy:/dev/VG_nieuweserver/virtual_img,hda,w','phy:/dev/VG_nieuweserver/virtual_swap,hdb,w']
    
  6. Starten maar!
    [root@nieuweserver /]# xm create /etc/xen/virtual.cfg 
    

     

Share

Mount LVM guest schijven op een hypervisor met LVM

Proxmox maakt gebruikt van LVM, als je dus een guest aanmaakt krijgt deze netjes zijn eigen logical volume.
Als je vervolgens een OS installeert en je geeft aan LVM te gebruiken, heb je dus LVM binnen LVM.

Als je vervolgens partities van je guest wil mounten op je hypervisor om bijvoorbeeld een fsck uit te voeren, doe je het volgende:

root@hypervisor:~# lvdisplay 

--- Logical volume ---
  LV Path                /dev/pve/vm-100-disk-1
  LV Name                vm-100-disk-1
  VG Name                pve
  LV UUID                b6iKwA-iE9n-rfI4-bFU3-Kyrl-wixM-1BZb4e
  LV Write Access        read/write
  LV Creation host, time hypervisor, 2017-05-15 13:00:19 +0200
  LV Pool name           data
  LV Status              available
  # open                 1
  LV Size                60.00 GiB
  Mapped size            90.73%
  Current LE             15360
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           251:6

Het gaat dus om: /dev/pve/vm-100-disk-1

root@hypervisor:~# ls -alh /dev/pve/vm-100-disk-1 
lrwxrwxrwx 1 root root 7 Jun 16 11:43 /dev/pve/vm-100-disk-1 -> ../dm-6
root@hypervisor:~# fdisk -l /dev/dm-6

Disk /dev/dm-6: 60 GiB, 64424509440 bytes, 125829120 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 131072 bytes / 262144 bytes
Disklabel type: dos
Disk identifier: 0x134f441b

Device      Boot   Start       End   Sectors  Size Id Type
/dev/dm-6p1 *       2048    999423    997376  487M 83 Linux
/dev/dm-6p2      1001470 125827071 124825602 59.5G  5 Extended
/dev/dm-6p5      1001472 125827071 124825600 59.5G 8e Linux LVM

Je ziet dat er 3 partities zijn, deze kun je mappen met kpartx:

root@hypervisor:~# kpartx -av /dev/mapper/pve-vm--100--disk--1 
add map pve-vm--100--disk--1p1 (251:10): 0 997376 linear /dev/mapper/pve-vm--100--disk--1 2048
add map pve-vm--100--disk--1p2 (251:11): 0 2 linear /dev/mapper/pve-vm--100--disk--1 1001470
add map pve-vm--100--disk--1p5 : 0 124825600 linear /dev/mapper/pve-vm--100--disk--1 1001472

Kijk met lvscan welke logical volumes er nu zijn:

root@hypervisor:/dev/mapper# lvscan
  inactive          '/dev/guest-vg/root' [55.51 GiB] inherit
  inactive          '/dev/guest-vg/swap_1' [4.00 GiB] inherit

Activeer de volume group:

root@hyervisor:/dev/mapper# vgchange -a y guest-vg
  2 logical volume(s) in volume group "guest-vg" now active
root@hypervisor:/dev/mapper# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/guest-vg/root
  LV Name                root
  VG Name                guest-vg
  LV UUID                d0kREf-4oEy-HkP1-0eif-EJGw-3wOr-aeDBJG
  LV Write Access        read/write
  LV Creation host, time guest, 2017-05-15 13:08:25 +0200
  LV Status              available
  # open                 0
  LV Size                55.51 GiB
  Current LE             14211
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           251:13

Nu kun je doen wat je wil, in mijn geval een e2fsck :)

root@hypervisor:~# e2fsck /dev/guest-vg/root
e2fsck 1.42.12 (29-Aug-2014)
/dev/guest-vg/root: recovering journal
/dev/guest-vg/root contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (13275876, counted=9402797).
Fix<y>? yes
Free inodes count wrong (3522133, counted=1037469).
Fix<y>? yes

/dev/guest-vg/root: ***** FILE SYSTEM WAS MODIFIED *****
/dev/guest-vg/root: 2600851/3638320 files (0.0% non-contiguous), 5149267/14552064 blocks

Als je klaar bent maak je de volume group weer inactief:

root@hypervisor:~# vgchange -a n guest-vg

En wis je de mapping weer:

root@hypervisor:~# kpartx -dv /dev/mapper/pve-vm--100--disk--1 
del devmap : pve-vm--100--disk--1p5
del devmap : pve-vm--100--disk--1p2
del devmap : pve-vm--100--disk--1p1

 

 

Share

Hoe kun je de oorzaak van een trage server achterhalen?

Iedere systeembeheerder heeft er wel eens mee te maken gehad, je server reageert niet lekker snel meer. De klant belt je op met de melding dat de laadtijden van zijn website langer dan 5 seconden bedragen, terwijl er slecht 10 gebruikers actief zijn.

Lees hieronder hoe je snel de oorzaak van deze traagheid kunt achterhalen.

Nadat je via SSH op je server inlogt, zal je eerst het commando ‘top’ willen uitvoeren. Op een server die weinig te doen heeft, is dit uiteraard geen probleem. Echter wil het in de praktijk nog wel een voorkomen dat het starten van ´top´ zo traag gaat, dat dit alleen maar ongemak geeft.
Om snel de ‘load‘ van de processor te zien, kun je ook het commando ‘uptime’ uitvoeren. Deze laat niet alleen het aantal dagen zien dat je server draait, maar ook de load!

marsmanic@server02:~$ uptime 
 21:31:19 up 569 days,  4:59,  3 users,  load average: 1.27, 0.32, 0.32

Zoals hier te zien, is de load niet erg hoog, de oorzaak van de traagheid ligt dus niet bij het CPU-gebruik.

Als volgende mogelijkheid controleren we het geheugenverbruik. Het is namelijk goed mogelijk dat één proces te veel geheugen gebruikt of werkt in het swap-geheugen.

marsmanic@server02:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          7946       3990       3955          0        328       1583
-/+ buffers/cache:       2078       5867
Swap:        16339          0      16339

Je ziet in bovenstaande dat er nog genoeg geheugen vrij is en dat er geen swap-geheugen wordt gebruikt. Dat is goed.

Het zou kunnen dat er veel activiteit op je schijven plaatsvindt, op oudere distributies kun je controleren met iostat (bijvoorbeeld: iostat -xtk 1) of dit het geval is. Bij nieuwere distributies gebruik je iotop:

Total DISK READ:       0.00 B/s | Total DISK WRITE:      11.71 K/s

 PID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND 
15474 be/4 www-data    0.00 B/s    3.90 K/s  0.00 %  0.00 % apache2 -k start
15518 be/4 www-data    0.00 B/s    3.90 K/s  0.00 %  0.00 % [apache2]
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]

Tot slot bekijk je het netwerkverkeer van en naar je server. Hier zijn verschillende tools voor, bijvoorbeeld:

Als je zeker wilt weten of je server wel de netwerksnelheden haalt die je verwacht, is het handig om een keer speedtest op de command line te gebruiken.

Dit zijn enkele tools en tips die ik gebruik om snel een probleem te achterhalen. Het dekt niet alles, maar hiermee zul je vaak al snel de vertragende boosdoener vinden.

Mocht je er niet uitkomen of wil je mij (Marsman ICT Consultancy) je server laten onderzoeken, kun je altijd contact opnemen.

–Martijn

Share

Houd hackers buiten de deur met Fail2ban

Beveiliging is een zeer breed begrip, er is niet één tool die ervoor zorgt dat hackers geen kans hebben om in te breken op je servers.  Optimale veiligheid bereik je door een een juiste verhouding na te streven tussen beleid en techniek.

Één van de tools die bijdraagt aan veiligheid door middel van techniek is Fail2ban. Fail2ban houdt realtime de logbestanden van je server in de gaten. Het blokkeert i.p.-adressen die kwaadaardige handelingen uit proberen te voeren, zoals veel authenticatiefouten of zoeken naar bekende exploits in software.

Optioneel kun je Fail2ban een e-mail laten sturen als er een i.p.-adres wordt geblokkeerd. Er worden, door middel van een WHOIS worden er ook ook gegevens achterhaald van een i.p.-adres. Bijvoorbeeld:

-------- Original Message --------
Subject: [Fail2Ban] SSH: banned 116.10.191.222
Date:	Wed, 18 Jun 2014 19:05:54 +0000
From:	Fail2Ban <fail2ban@mijnserver.nl>
To:	beheer@marsman-ic.nl

Hi,

The IP 116.10.191.222 has just been banned by Fail2Ban after
5 attempts against SSH.

Here are more information about 116.10.191.222:

[Querying whois.arin.net]
[Redirected to whois.apnic.net]
[Querying whois.apnic.net]
[whois.apnic.net]
% [whois.apnic.net]
% Whois data copyright terms    http://www.apnic.net/db/dbcopyright.html

% Information related to '116.8.0.0 - 116.11.255.255'

inetnum:        116.8.0.0 - 116.11.255.255
netname:        CHINANET-GX
descr:          CHINANET Guangxi province network
descr:          Data Communication Division
descr:          China Telecom
country:        CN
admin-c:        CR76-AP
tech-c:         BD37-AP
status:         ALLOCATED PORTABLE
remarks:        service provider
mnt-by:         APNIC-HM
mnt-lower:      MAINT-CHINANET
mnt-lower:      MAINT-CHINANET-GX
<knip>
......
</knip>
% This query was served by the APNIC Whois Service version 1.69.1-APNICv1r0 (WHOIS1)

Regards,

Marsman ICT Consultancy - Fail2Ban

In bovenstaande e-mail zie je dat i.p.-adres 116.10.191.222 is geblokkeerd omdat er 5 maal vanaf dit i.p.-adres met een verkeerde login is geprobeerd in te loggen via SSH. Dit is ook te zien in het log op de server (/var/log/secure):

Jun 18 19:04:00 mijnserver sshd[7059]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.10.191.222  user=root

Tijd voor de installatie

Voor de installatie maak ik gebruik van een Debian-based besturingssysteem (LInux mint). Fail2ban is opgenomen in veel distributies of anders te installeren vanaf source.

    • Gebruik de package manager van je distributie om Fail2ban te installeren:
      mijnserver ~ # sudo apt-get install fail2ban
      Reading package lists... Done
      Building dependency tree       
      Reading state information... Done
      Suggested packages:
        python-gamin
      The following NEW packages will be installed:
        fail2ban
      0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
      Need to get 108 kB of archives.
      After this operation, 501 kB of additional disk space will be used.
      Get:1 http://archive.ubuntu.com/ubuntu/ saucy/universe fail2ban all 0.8.10-3 [108 kB]
      Fetched 108 kB in 0s (164 kB/s)    
      Selecting previously unselected package fail2ban.
      (Reading database ... 226197 files and directories currently installed.)
      Unpacking fail2ban (from .../fail2ban_0.8.10-3_all.deb) ...
      Processing triggers for man-db ...
      Processing triggers for ureadahead ...
      ureadahead will be reprofiled on next reboot
      Setting up fail2ban (0.8.10-3) ...
       * Starting authentication failure monitor fail2ban                          [ OK ]
      

      Zoals je ziet wordt Fail2ban netjes geïnstalleerd en gestart als daemon met de standaard instellingen.

  • Stel de configuratie in naar wens: In /etc/fail2ban/ vind je de bestanden om Fail2ban in te stellen. fail2ban.conf hoeft niet te worden aangepast. In dit voorbeeld zal ik in het bestand jail.conf een aantal parameters toelichten en de jail doornemen voor SSH.
    mijnserver /etc/fail2ban # vim jail.conf
    [DEFAULT] # Standaard instellingen die per jail kunnen worden over overruled.
    ignoreip = 127.0.0.1/8 # Zet hier vooral je eigen I.P.-adres in!>
    bantime&nbsp; = 600 # Aantal seconden dat een I.P.-adres geblokkeerd wordt.
    findtime = 600 # Tijd waarbinnen het aantal 'maxretry's' moet plaatsvinden.
    maxretry = 3 # Hoeveel foute pogingen er worden toegestaan binnen de 'findtime'
    backend = auto # Welke techniek er moet worden gebruikt.
    destemail = beheer@marsmanic.nl # Waar de mail heen moet gaan (zie hierboven).
    banaction = iptables-multiport # Wat te gebruiken om te bannen?
    mta = sendmail # Welke MTA moet er worden gebruikt om te mailen?
    protocol = tcp # Standaard protocol
    chain = INPUT # Als bij banaction iptables wordt gebruikt, in welke chain?

    De SSH Jail:

    [ssh] # De jail
    
    enabled  = true # Is de jail actief?
    port     = ssh # Welke poort? In dit geval 22
    filter   = sshd # Waar moet fail2ban op fileren in het log?
    logpath  = /var/log/auth.log # welk logbestand moet er worden gebruikt?
    maxretry = 3 # hoeveel foute inlogpogingen worden er toegestaan?
  • Herstart en wacht af!
    mijnserver # sudo /etc/init.d/fail2ban restart
     * Restarting authentication failure monitor fail2ban                         [ OK ]

 

Je kunt nu vanaf een andere machine proberen 3x achter elkaar in te loggen met een fout wachtwoord. De vierde keer zal er een timeout optreden en zul je een mail ontvangen van je ‘inbraakpoging’.

Mocht je er niet uitkomen of wil je de installatie door Marsman ICT Consultancy laten uitvoeren, kun je altijd contact opnemen.

–Martijn

Share

Makkelijk alle domeinnamen laten verwijzen naar je website met Apache

Het is niet ongebruikelijk dat je meerdere domeinnamen registreert voor je website. Soms omdat je ook namen vastlegt die op je hoofd-domeinnaam lijken, maar ook omdat je veel voorkomende extensies van je domeinnaam in je bezit hebt.

Het is niet goed voor je zoekmachine-ranking om voor iedere domeinnaam een ServerAlias aan te maken. Je bezoeker komt zo wel op dezelfde website, maar voor een zoekmachine-spider lijkt het alsof er meerdere websites bestaan met dezelfde content.

Dit gaan we dus redirecten met de status-code 301 vanuit een aparte Virtualhost op de volgende manier:

<VirtualHost *:80>
        ServerName mijnwebsite.nl
        ServerAlias mijnwebsite.de
        ServerAlias www.mijnwebsite.de
        ServerAlias mijnwhebsait.nl
        ServerAlias www.mijnwhebsait.nl

        Redirect permanent / http://www.mijnwebsite.nl/
</VirtualHost>

Alle domeinnamen worden nu afgevangen door deze Virtualhost en netjes met de instructie: “Redirect permanent” (status-code 301) doorgestuurd naar de website http://www.mijnwebsite.nl

Deze kun je gewoon aanmaken als een Virtualhost, bijvoorbeeld:

<Virtualhost *:80>
        ServerAdmin webmaster@mijnwebsite.nl
        ServerName  www.mijnwebsite.nl
        DocumentRoot /home/mijnwebsite.nl/public_html/

        <Directory /home/mijnwebsite.nl/public_html/>
                Options -Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog /home/mijnwebsite/logs/error.log
        LogLevel warn
        CustomLog /home/mijnwebsite.nl/logs/access.log combined
</VirtualHost>

 

Mocht je er niet uitkomen of wil je dit laten uitvoeren, kun je altijd contact opnemen.

–Martijn

Share

Beveilig /tmp op je Linux systeem

Om je systeem veilig te houden is het belangrijk om de /tmp map als een aparte partitie te mounten en ervoor te zorgen dat bestanden in deze map nooit uitvoerbaar kunnen zijn.

Een belangrijke reden hiervoor is dat veel applicaties en websites de map /tmp gebruiken om tijdelijke bestanden op te slaan, hier is /tmp ook voor bedoeld (Zie ook FHS op Wikipedia voor meer informatie over de mappen-structuur onder Linux). Veel exploits proberen om bestanden op te slaan en uit te voeren in /tmp omdat dit vaak de enige schrijfbare map is voor een applicatie of website. Om dit te voorkomen gaan we van /tmp een aparte partitie maken op en deze mounten met de opties: noexec (sta niet toe dat binaire bestanden uitvoerbaar zijn) en nosuid (sta niet toe dat de eigenaar van een bestand wordt aangepast) Zie ook de Linux Man Page over Mount.

De praktijk:

  • Maak een 2GB bestand voor je nieuwe /tmp partitie:
    root@srvprd05:~# dd if=/dev/zero  of=/dev/tmpfs  bs=1024   count=2000000
  • Voorzie /dev/tmpfs van de Ext3 indeling:
    root@srvprd05:~# /sbin/mkfs.ext3 /dev/tmpfs
  • Maak een backup van de bestaande map:
    root@srvprd05:~# cp -Rfp /tmp /tmpback
  • Mount de nieuwe /tmp partitie en zet de rechten goed:
    root@srvprd05:~# mount -o loop,noexec,nosuid,rw /dev/tmpfs /tmp
    root@srvprd05:~# chmod 1777 /tmp
  • Kopieer de data naar de nieuwe partitie:
    root@srvprd05:~# cp -Rfp /tmpback/.* /tmp/
  • Bewerk /etc/fstab en voeg het volgende toe:
    /dev/tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0
  • Test de regel die je aan hebt gemaakt:
    root@srvprd05:~# mount -o remount /tmp
  • Om bovenstaande te controleren kun je simpelweg een shell-script proberen uit te voeren in /tmp. Als je de melding krijgt: “permission denied” is het gelukt.

Mocht je er niet uitkomen of wil je dit laten uitvoeren, kun je altijd contact opnemen.

–Martijn

Share