Proxmox ist eine Virtualisierung-Management Umgebung die es einem erlaubt auf einfache Weise KVM und OpenVZ Container zu verwalten. Die Installation gestaltet sich recht einfach mit der angebotenen Iso.
Proxmox läuft problemlos auch selbst in einer virtuellen Umgebung (zB: VirtualBox).
Einzig die Netzwerkeinstellungen sind für mich etwas gewöhnungsbedürftig gewesen, warum ich auch diesen Thread hier schreibe. Vielleicht hilft es dem ein oder anderen tagelanges ausprobieren zu vermeiden ....
Im folgenden werde ich beschreiben, wie man ein Proxmox mit einer externen IP und einem 10.1.1.0/24 internem Netz betreibt.
Alle Clients sollen auf das Internet zugreifen können, sowie untereinander kommunizieren können.
Es ist kein Zugriff vom Internet auf die internen Clients möglich.
Proxmox läuft auf einem Debian System, welches gleich mit installiert wird. Wir werden die Änderungen auf der Konsole durchführen.
Bei der Erstinstallation wurde eth0 durch vmbr0 bebrückt und dies wollen wir im ersten Schritt rückgängig machen. Zukünftig soll eth0 die externe IP bekommen und die Brücke vmbr0 soll das interne Netz repräsentieren.
Code: Alles auswählen
# vim /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 178.xxx.xxx.xxx
netmask 255.255.255.0
gateway 178.xxx.xxx.xxx
auto vmbr0
iface vmbr0 inet static
address 10.1.1.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
Nun können wir uns wie gewohnt auf der externen IP mit der WebUI verbinden,die auf Port 8006 liegt. Nachdem wir ein paar Templates heruntergeladen haben können wir einen OpenVZ Container installieren. Wichtig hierbei ist das wir veth und nicht vethnet benutzen. Zwar wird empfohlen darauf zu verzichten, aber hiermit habe ich es nicht zum laufen bringen können.
Ich gehe mal davon aus das Ihr ein Debian Squeeze Template benutzt.
Dem Container geben wir also veth [eth0] mit auf den Weg und übernehmen die Einstellung vmbr0 als Brücke für die neue Schnittstelle zu verwenden.
Danach starten wir den Container und betreten Ihn um die neue Schnittstelle zu initialisieren.
Code: Alles auswählen
host-node]# vzctl enter 100
[ve-100]# ifconfig eth0 0
[ve-100]# ip addr add 10.1.1.100 dev eth0
[ve-100]# ip route add default dev eth0
Nun begeben wir uns wieder auf den Host und installieren die folgende Firewall. Leider bringt Proxmox keine eigene Lösung mit und ohne Firewall möchten wir das nicht betreiben

Code: Alles auswählen
#!/bin/bash
# +---------------------------------------------------+
# | Firewall Proxmox 3
# |
# | Host: eth0 --> Internet fixed IP
# | vmbr0 -> Intranet 10.1.1.0/24
# |
# | Script by Fisherman 2013
# | Hint:
# | Check iptables: watch -n 1 iptables -L -nv -x -Z
# +---------------------------------------------------+
EXTERN="eth0"
INTERN="vmbr0"
# Filterregeln löschen:
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Filterregeln auf 'DROP' setzen
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Kernelparameter setzen
echo "[-->] Aktiviere Kernel Schutzmechanismen..."
# IP Forwarding einschalten
echo 1 > /proc/sys/net/ipv4/ip_forward
# ICMP Echo-Broadcasts ignorieren
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 2> /dev/null
# Ungültige ICMP-Antworten ignorieren
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 2> /dev/null
# Zeit wie lange Sockets die geschlossen sind erhalten bleiben
echo 10 > /proc/sys/net/ipv4/tcp_fin_timeout
# max Antworten auf ein TCP-SYN
echo 3 > /proc/sys/net/ipv4/tcp_retries1
# max Wiederholungen fuer bekannte Verbindungen bevor abgebrochen wird
echo 5 > /proc/sys/net/ipv4/tcp_retries2
# Schutz vor SYN-flood
echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null
# max Speichergroesse fuer IP-Defragmentierung (max 256kb min 192kb)
echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
# max Zeit in s wie lange IP Fragmente im Speicher bleiben
echo 5 > /proc/sys/net/ipv4/ipfrag_time
# ARP Adressen werden nicht geaendert wenn ein existierender Eintrag juenger als
# Jiffie Wert ist (100 jiffie = 1 Sekunde)
echo 1000 > /proc/sys/net/ipv4/neigh/$EXTERN/locktime
# Proxy Arp auf vmbr0 aktivieren
echo 1 > /proc/sys/net/ipv4/conf/vmbr0/proxy_arp
# Ketten erstellen
# Kette fuer Spoofing Packete
iptables -N SPOOFING_DROP
#iptables -A SPOOFING_DROP -j LOG --log-tcp-options --log-prefix "[SPOOF] "
iptables -A SPOOFING_DROP -j DROP
# Kette fuer ungueltige Packete
iptables -N INVALID_DROP
#iptables -A INVALID_DROP -j LOG --log-tcp-options --log-prefix "[INVALID] "
iptables -A INVALID_DROP -j DROP
# Kette fuer Stealth Scans
iptables -N STEALTH_DROP
#iptables -A STEALTH_DROP -j LOG --log-tcp-options --log-prefix "[STEALTH] "
iptables -A STEALTH_DROP -j DROP
# Korrupte Pakete zurueckweisen
iptables -A INPUT -m state --state INVALID -j INVALID_DROP
iptables -A OUTPUT -m state --state INVALID -j INVALID_DROP
iptables -A FORWARD -m state --state INVALID -j INVALID_DROP
# Schutz vor IP Spoofing ( Senderadresse ist privat)
iptables -N PRIVAT
iptables -F PRIVAT
iptables -A PRIVAT -s 127.0.0.0/8 -j SPOOFING_DROP # Loopback
iptables -A PRIVAT -s 10.0.0.0/8 -j SPOOFING_DROP # privates Klasse A Netz
iptables -A PRIVAT -s 172.16.0.0/12 -j SPOOFING_DROP # privates Klasse B Netz
iptables -A PRIVAT -s 192.168.0.0/16 -j SPOOFING_DROP # privates Klasse C Netz
iptables -A PRIVAT -s 224.0.0.0/4 -j SPOOFING_DROP # reservierte Multicastadressen
iptables -A PRIVAT -s 240.0.0.0/4 -j SPOOFING_DROP # reservierte Adressen
# Schutz vor IP Stealth Scans
iptables -N STEALTH
iptables -F STEALTH
iptables -A STEALTH -p tcp --tcp-flags ALL NONE -j STEALTH_DROP # kein Flag gesetzt
iptables -A STEALTH -p tcp --tcp-flags SYN,FIN SYN,FIN -j STEALTH_DROP # SYN und FIN gesetzt
iptables -A STEALTH -p tcp --tcp-flags FIN,RST FIN,RST -j STEALTH_DROP # FIN und RST gesetzt
iptables -A STEALTH -p tcp --tcp-flags ACK,FIN FIN -j STEALTH_DROP # FIN ohne ACK
iptables -A STEALTH -p tcp --tcp-flags ACK,PSH PSH -j STEALTH_DROP # PSH ohne ACK
iptables -A STEALTH -p tcp --tcp-flags ACK,URG URG -j STEALTH_DROP # URG ohne ACK
# Letzte Regel zu Debug zwecken
iptables -N DROP_PCK
iptables -F DROP_PCK
#iptables -A DROP_PCK -j LOG --log-tcp-options --log-prefix "[DROP DEBUG] "
iptables -A DROP_PCK -j DROP
# Schutzketten aktivieren
# Weitergabe an Spoofing Regel
iptables -A INPUT -i $EXTERN -j PRIVAT
iptables -A FORWARD -i $EXTERN -j PRIVAT
# Weitergabe an Stealth Regel
iptables -A INPUT -i $EXTERN -j STEALTH
iptables -A FORWARD -i $EXTERN -j STEALTH
echo "[-->] Konfiguriere Interface Loopback..."
# Kommunikation Auf Loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
echo "[-->] Konfiguriere Interface $EXTERN..."
# Dienste die aus dem Internet abrufbar sind.
# TCP Dienste die auf dem Host System laufen - zulassen
# SSH: TCP 22
iptables -A INPUT -i $EXTERN -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o $EXTERN -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
# Proxmox WebUi: TCP 8006
iptables -A INPUT -i $EXTERN -p tcp --dport 8006 -j ACCEPT
iptables -A OUTPUT -o $EXTERN -p tcp --sport 8006 -m state --state ESTABLISHED -j ACCEPT
# ICMP Nachrichten zum Gateway
iptables -A INPUT -i $EXTERN -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -o $EXTERN -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT
# Dienste die das Gateway im Internet nutzt
# TCP Dienste die das System benoetigt
# HTTP: TCP 80 - Um Updates installieren zu koennen
iptables -A OUTPUT -o $EXTERN -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i $EXTERN -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
# UDP Dienste die das System benoetigt
# DNS: UDP 53
iptables -A OUTPUT -o $EXTERN -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i $EXTERN -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
# ICMP darf raus
iptables -A OUTPUT -o $EXTERN -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -i $EXTERN -p icmp --icmp-type 0 -j ACCEPT
echo "[-->] Konfiguriere Interface $INTERN..."
# Dienste FORWARD
# ICMP innerhalb des internen Netzes erlauben
iptables -A INPUT -p icmp --src 10.1.1.0/24 --dst 10.1.1.0/24 -j ACCEPT
iptables -A OUTPUT -p icmp --src 10.1.1.0/24 --dst 10.1.1.0/24 -j ACCEPT
# Clients duerfen beliebige Verbindungen nach aussen aufbauen
iptables -A FORWARD -i $INTERN -o $EXTERN -j ACCEPT
iptables -A FORWARD -i $EXTERN -o $INTERN -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o $EXTERN -j MASQUERADE
# Den Rest einfach verwerfen ...
iptables -A INPUT -i $EXTERN -j DROP_PCK
Wer möchte kann das das Script erweitern um einzelne Dienste der Container nach aussen hin sichtbar zu machen.
Viel Spaß mit Proxmox
Gruß Fisherman