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


