Kategorie-Archiv: Virtualisierung

pf – Firewall / jails die erste

Da ich vorhabe, nginx in einer jail zu betreiben, musste ich mich notgedrungen erst einmal mit pf bschäftigen. Dies scheint die bevorzugte Firewall unter FreeBSD zu sein.

Die jail soll unter der IP 10.0.0.1 erreichbar sein, so daß alle Anfragen Port 80 auf die externe IP  per redirect geleitet werden müssen.

Einrichten der (virtuellen) IP 10.0.0.1 (in /etc/rc.local)

ifconfig_lo0_alias0=”inet 10.0.0.1/32″

In der Konfigurationsdatei pf.conf muss dann der redirect eingetragen werden:

if = em0
ip = xxx.xxx.xxx.xxx
web = 10.0.0.1

rdr on $if proto {tcp udp} from any to $if port 80 -> $web

Anm: Redirect von der extern erreichbaren IP für die Dienste tcp / udp von überall auf das Interface (bei mir em0) Port 80 soll auf die 10.0.0.1 erfolgen.

Weiterhin muss eine Regel her, welche die Daten der internen IP 10.0.0.1 über das externe Netzwerk transportier:

nat on $if proto {tcp udp icmp} from $web to any -> $ip

JAILS:
Zur Einrichtung und Administration von jails empfiehlt sich das Programm ezjails, welches mit

cd /usr/ports/sysutils/ezjail
make clean install

installiert wird.

 

Damit eine Verbindung aus einer jail heraus funktioniert, muss folgendes eingetragen werden:

sysctl security.jail.allow_raw_sockets=1

Alles auf Anfang: lxc statt openvz

Bei der Recherche nach Openvz bin ich auf dieses Youtube-Video gestossen, welches sich mit LXC beschäftigt. Ähnlich wie Zones unter Opensolaris oder Jails unter BSD ermöglicht lxc das Erstellen von Containern (nett beschrieben mit “chroot on steroids”)

Für mich die bessere Alternative zu Openvz, da lxc direkt im Kernel implementiert ist. Also aktuellste Ubuntu-Serverversion ziehen, aptitude install lxc und fertig.

Ein neuer Container ist schnell angelegt: Wollen wir z.B. einen Ubuntu-basierten Container bauen, hilft lxc-create -n NAMEDERVM -t ubuntu.

 

 

OpenVZ Virtualisierung

Nachdem ich jahrelang XEN und Virtualbox als Virtualisierungsplattform benutzt hatte, teste ich momentan OpenVZ.

Ähnlich wie z.B. jails unter BSD oder Container in Opensolaris stellt OpenVZ isolierte Container für Betriebssysteme / Prozesse zur Verfügung.

Installation:

- als erstes bereiten wir das Repository vor (hier unter Centos 6.2)

cd /etc/yum.repos.d/
curl -OL http://download.openvz.org/openvz.repo
rpm –import http://download.openvz.org/RPM-GPG-Key-OpenVZ
yum update

- jetzt installieren wir den Kernel

yum install ovzkernel.x86_64

 

- jetzt schauen wir, ob in /etc/sysctl.conf folgendes steht (oder tragen es ein)

net.ipv4.ip_forward = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.all.rp_filter = 1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

 

- nach einem reboot installieren wir noch ein paar nützliche Pakete

yum install vzctl.x86_64 vzquota.x86_64

 

 

  • die Distributionsvorlagen (templates) liegen in /vz/template/cache, neue können per wget von http://download.openvz.org/template/precreated/ heruntergeladen werden
  • die Konfigurationsdateien der einzelnen Maschinen liegen unter /etc/sysconfig/vz-scripts/
  • das Filesystem (ja, es kann direkt vom Host aus zugegriffen werden :-) ) der VM liegt standardmässig unter /vz/root/VPS_ID

Nützliche Befehle

  • vzctl create 101 –ostemplate ubuntu-12.04-x86_64 –config basic // erstellt eine Ubuntu-VE mit der ID 101
  • vzctl set 101 –ipadd 192.168.7.203 –save  // weist dem virtuellen Server eine IP zu und speichert diese in der config
  • vzctl set 101 –nameserver 192.168.7.1 –save // weist der VE einen Nameserver zu
  • vzctl set 101 –onboot yes –save // startet VM beim booten des Hosts
  • vzctl exec 101 Befehl // führt Befehl auf Maschine 101 aus
  • vzctl set 101 –ram 512M –save // Maschine 101 erhält 512 MB RAM
  • vzctl start / restart / shutdown / destroy / stop
  • vzctl chkpnt 101 –dumpfile /tank/vz/102dump.dump // erstellt einen snapshot der VM und speichert diese im dumpfile
  • vzpid PID // zeigt an, in welcher VM eine bestimmte PID läuft
  • vzlist // zeigt laufende VM`s mit deren ID’s

Dieses kleine script führt einen Befehl auf allen laufenden VM`s aus

  • for i in `vzlist -o veid -H`; do echo “VPS $i”; vzctl exec BEFEHL; done
  •  Beispiel: for i in `vzlist -o veid -H`; do echo “VPS $i”; vzctl exec $i uptime; done