Root Server bei Hetzner mit Proxmox virtualisieren.

Da ich nur 1 offizielle IP-Adresse hab (ok, man kann weitere bestellen, brauch ich aber nicht!) möchte ich hinter dem Hostsystem mehrere interne Netzwerke aufbauen, die untereinander nicht/oder schon miteinander "sprechen" können. Dafür würde ich gerne pfSense verwenden, denn damit hab ich schon ein wenig Erfahrung sammeln können.

So soll das dann aussehen:

Internet <-> Hostsystem (Proxmox und Shorewall) <-> (DMZ) pfSense <-> Net1
                                                                   <-> Net2...

 und so hab ich es gemacht:

 Installation von Proxmox

 über Hetzner Robot eine Rescue Session starten und mittels

 installimage Proxmox installieren

 reboot

 passwd

 dazu noch folgende Links:
http://wiki.hetzner.de/index.php/Proxmox_VE

Einstellungen für die Proxmox Installation

DRIVE1 /dev/sda
DRIVE2 /dev/sdb
SWRAID 1
SWRAIDLEVEL 1
BOOTLOADER grub
HOSTNAME xxxx
PART /boot ext3 512M
PART lvm vg0 all
LV vg0 root / ext4 128G
# für swap doppelter Speicherplatz zu RAM
LV vg0 swap swap swap 32G
LV vg0 vz /var/lib/vz ext4 2560G
IMAGE /root/.oldroot/nfs/install/../images/Debian-60-squeeze-64-minimal.tar.gz

seit zumindest Oktober 2013 kann man das jetzt auch mit wheezy installieren! -> somit IMAGE wheezy

seit Version 2 findet man dann unter https://myip:8006 und vorher unter Port 443 die AdminOberfläche
und dann passe ich noch die source.list an
deb http://download.proxmox.com/debian wheezy pve-non-subscription
und in /etc/apt/sources.list.d/pve-enterprise.list kommentiere ich alles aus (ich hab kein enterprise)


mittels pveversion -v prüfe ich noch ob die richtige version vorhanden ist, dabei fällt mir auf:
vzprocps: not correctly installed
ksm-control-daemon: not correctly installed

daher apt-get install vzprocps ksm-control-daemon

jetzt noch, weil bei apt-get update ich mich dumm und dämlich warte (siehe auch hier)
nano /etc/gai.conf

precedence ::ffff:0:0/96  100
 
 

Netzwerkkonfiguration

/etc/network/interfaces

### Hetzner Online AG - installimage
# Loopback device:
auto lo
iface lo inet loopback

 # device: eth0
auto  eth0
iface eth0 inet static
address   xxx.yyy.zzz.239
netmask   255.255.255.224
broadcast xxx.yyy.zzz.255
gateway   xxx.yyy.zzz.225
#folgender Eintrag brauchte EQ6
#post-up mii-tool -F 100baseTx-FD eth0

 auto vmbr0
iface vmbr0 inet static
address 192.168.50.1
netmask 255.255.255.252
broadcast 192.168.50.3
bridge_ports none
bridge_stp off
bridge_fd 0

 auto vmbr1
iface vmbr1 inet static
address 192.168.51.254
netmask 255.255.255.0
broadcast 192.168.51.255
bridge_ports none
bridge_stp off
bridge_fd 0

#für Testzwecke mache ich mir noch folgende Bridges
auto vmbr2
iface vmbr2 inet static
address 192.168.52.1
netmask 255.255.255.0
broadcast 192.168.52.255
brdige_ports none
brdige_stp off
bridge_fd 0

auto vmbr3
iface vmbr3 inet static
address 192.168.53.1
netmask 255.255.255.0
broadcast 192.168.53.255
brdige_ports none
brdige_stp off
bridge_fd 0

# default route to access subnet
up route add -net xxx.yy.zzz.96 netmask 255.255.255.224 gw xxx.yyy.zzz.97 eth0

 

Firewall Konfiguration

 dann muss noch dafür gesorgt werden, dass die Pakete richtig geforwardet werden - einstweilen hab ich diese Beschreibung verwendet (mittels Shorewall)

 apt-get install shorewall

 /etc/shorewall/shorewall.conf

 

DISABLE_IPV6=Yes  # ich verwende das nicht
IP_FORWARDING=On

 

 

 

/etc/shorewall/zones

 

#ZONE   Type            Options         IN              Out
#                                       Options         Options
fw      firewall
net     ipv4
dmz     ipv4

 

 

 

 

 

/etc/shorewall/interfaces

 

 

 

#Zone   Interface       Broadcast       Options
net     eth0            detect          blacklist,nosmurfs
dmz     venet0          detect          routeback
dmz     vmbr0           detect          routeback,bridge

 

 

 

/etc/shorewall/policy

 

#SOURCE DEST    POLICY          LOG     LIMIT:          CONNLIMIT:
#                               LEVEL   BURST           MASK

 

# From Firewall Policy
fw      fw      ACCEPT
fw      net     ACCEPT
fw      dmz     ACCEPT

 

# From DMZ Policy
dmz     dmz     ACCEPT
dmz     net     ACCEPT
dmz     fw      DROP            info

 

# From Net Policy
net     fw      DROP            info
net     dmz     DROP            info

 

# THE FOLLOWING POLICY MUST BE LAST
#
all     all     REJECT          info

 

 

 



 

/etc/shorewall/rules

 


#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE
SSH/ACCEPT      net     fw      -       -       -       -       6/min:5
# Permit acces to Proxmox Manager and Consol
ACCEPT          net     fw      tcp     22,443,8006,5900:5999

#Ping Rules
Ping/ACCEPT     all     all

#incoming traffic
#alles was rein kommt an die DMZ weiterleiten 1:1
DNAT            net     dmz:192.168.50.2        tcp     1:21
DNAT            net     dmz:192.168.50.2        tcp     23:442
DNAT            net     dmz:192.168.50.2        tcp     444:5899
DNAT            net     dmz:192.168.50.2        tcp     6000:8005
DNAT            net     dmz:192.168.50.2        tcp     8007:65535
DNAT            net     dmz:192.168.50.2        udp     1:65535

 

# LAST LINE -- DO NOT REMOVE

 

 

 

 

 

shorewall try /etc/shorewall 60

 

auf anderer Konsole mittels SSH versuchen sich anzumelden - wenn das geht, dann ist vorerst alles in Ordnung

 

 

 

/etc/default/shorewall

 

 

 

startup=1

 

 

 

 

 

 

 

shorewall start

 

 

 

bzw. shorewall restart

 

 

 

/etc/shorewall/masq

 

 

 

#INTERFACE      SOURCE          ADDRESS         PROTO   PORT(S) IPSEC   MARK

 

# alles von 192.168.50.0/24 wird an eth0 gereicht und bekommt ip von eth0
eth0            192.168.50.0/24
# LAST LINE -- DO NOT REMOVE

 

 

 

 

 

Dann pfSense in einer virtuellen Maschine installieren, wobei hier folgende Netzwerkeinstellungen gemacht werden müssen:

 



 

auto eth0

 

iface eth0 inet static
address 192.168.50.2
netmask 255.255.255.252
gateway 192.168.50.1

 



 

Ich stelle dann im Proxmox noch ein, dass diese virtuelle Maschine auch autom. mitgestartet wird.
Bootreihenfolge = 1 (bedeutet, diese VM wird als 1. gestartet).

 

 

 

Und weiter geht's

 

Was noch zu machen ist (via ssh am Hostsystem) - unter Anlehnung an diesen oder diesen Link:

 

aptitude update && aptitude full-upgrade
dpkg-reconfigure tzdata
reboot

 

 

 

SSH-Login als root unterbinden und nur mittels Key

 

 

 

damit man vom unpriviligierten User zum root wechseln kann benötige ich noch sudo, also nachinstallieren

 

aptitude install sudo

 

 

 

und jetzt lege ich meinen unpriviligierten User an:

 

adduser xyz
adduser xyz sudo
su xyz
sudo -s
exit

 

wenn das klappt, dann bin ich eine Schritt weiter; jetzt geht es darum, dass der private key auf den Server kommt (siehe dazu diesen Link):

 

cd
mkdir .ssh
nano .ssh/authorized_keys2

 

jetzt hier den private key hineinkopieren

 

chmod -R og-rwx .ssh
exit

 

wichtig! es muss sichergestellt sein, dass die Anmeldung mit dem neuen User und sudo funktioniert, sonst ist man ausgesperrt!

 

So jetzt schalte ich den Login als root ab:

 

sudo -s
nano /etc/ssh/sshd_config

 

ändern von PermitRootLogin yes auf

 

PermitRootLogin no

 

speichern

 

/etc/init.d/ssh restart

 

jetzt kann man sich mittels ssh root@localhost nicht mehr anmelden. - Und nun noch Einstellung, dass man sich nur mehr mittels key anmelden kann:

 

sudo -s
nano /etc/ssh/sshd_config
PasswordAuthentication no

 

 

 

nachdem ich mich ziemlich verstiegen hab, hat mir dieser Link sehr geholfen:

You can also disable filtering entirely from the command line with a 'pfctl -d'.  Alternately, we leave the loaded ruleset in /tmp/rules.debug, feel free to edit it to fix your connectivity issue and reload with pfctl -f /tmp/rules.debug, then do whatever work you need to do in the UI to make the fix permanent.

und noch dieser Link

 

Nach einer Weile suchen im Internet hab ich es endlich geschafft. 2 Netzwerke (über VDSL bzw. ADSL) mit dem Internet verbunden werden über OpenVPN (Peer to Peer - shared Key) miteinander über einen Root Server verbunden.

 

Mein Ziel war es, dass ich von überall auf alles zugreifen kann.

 

 

 

So hab ich es gemacht:

 

auf der Serverseite einen OpenVPN Server eingerichtet

 

ServerMode: Peer to Peer (Shared Key)

 

Protocol: UDP

 

DeviceMode tun

 

Interface WAN

 

Localport: 1194

 

Description:  xyz.dyndns.org

 

Shared Key  automatic generate

 

Encryption algorithm AES-128-CBC (128-bit) - da ich Alix verwende und anscheinend unterstützt der das besser

 

Hardware Crypto: no

 

tunnel Network: 10.0.8.0/30

 

Local Network: 192.168.51.0/24

 

Remote Network: 192.168.100.0/24

 

Concurrent connections empty

 

Compression not checked

 

Type-of-Service not checked

 

Duplicate Connections not checked

 

Advanced (weil ich dahinter mehrere Netze hab)

 

route 192.168.101.0 255.255.255.0

 

route 192.168.102.0 255.255.255.0

 

 

 

und dann noch einen 2. OpenVPN Server:

 

wie 1. nur

 

Local Port: 1195

 

Tunnel Network: 10.0.9.0/30

 

Remote Network: 192.168.1.0/24

 

Advanced: route 192.168.2.0 255.255.255.0

 

 

 

 

 

auf der Client Seite:

 

Client:

 

ServerMode Peer to Peer (Shared Key)

 

Protocol: UDP

 

Device Mode TUN

 

Interface WAN

 

Local Port: empty

 

Server host or address: hostname von root-server

 

Server Port: 1194

 

Proxy host or address leer

 

Proxy port leer

 

Proxy authentication extra options none

 

Server host name resolution none

 

Shared Key (Key vom Server hineinkopieren)

 

Encryption algorithm: AES-128-CBC (128-bit)

 

Hardware Crypto: BSD cryptodev engine (weil Alix)

 

Tunnel Network: 10.0.8.0/30

 

Remote Network 192.168.51.0/24

 

Limit outgoing bandwith (leer)

 

Compression not checked

 

Type-of_Service not checked

 

Advanced: hier werden zusätzlich die anderen Netze bekannt gemacht

 

route 192.168.1.0 255.255.255.0

 

route 192.168.2.0 255.255.255.0

 

 

 

2. Client äquivalent

 

 

 

jetzt noch eine Firewall Regel

 

für OpenVPN auf den Clients + Server:  allow all  (sollte natürlich abgeändert werden)

 

WAN  Server  UDP any any Destination:WAN Port 1194-1195

 

 

 

und voilá es funkt

 



 

 

im Cert Manager eine neue CA erstellen:

 

import an existing Certificate Authority

 

Certificate data: ca.crt hineinkopieren

 

Rest empty lassen

 

 

 

im PfSense unter VPN/OpenVPN einen neuen Client anlegen

 

ServerMode: Peer to Peer (SSL/TLS)

 

Protocol: UDP

 

Device mode: tun

 

Interface: WAN

 

Local Port: empty

 

Server host or address: vpn.speeddrive.de

 

Server port: 1194

 

Proxy host or address: empty

 

Proxy port: empty

 

Proxy authentication: none

 

 

 

TLS Authentication: enable authentication of TLS packets

 

ta.key hineinkopieren

 

 

 

Peer Certificate: speeddrive.de

 

Client Certificate: default (wird nicht verwendet)

 

Encryption: none

 

Hardware Crypto: no

 

 

 

Advanced:

 

auth-user-pass /var/etc/openvpn/clientx.pw

 

ns-cert-type server

 

 

Nachdem ich ich meine beiden Standorte mittels VPN (tun) verbunden hatte, freute ich mich sehr, dass alles super funktioniert - aber alles? - Nein, denn Multicast und Broadcast funktionieren nicht (zumindest soweit ich es verstehe sind das die Probleme, dass ich z.B. den Media Player an meinem anderen Standort nicht sehe).

 

Daher hab ich mich auf die Suche gemacht, wie ich meine pfSense Alix Boxen mittels OpenVPN tap verbinden kann.

 

Weiters wollte ich in diesem Zusammenhang auch endlich mit dem WLAN im gleichen Netz sein, wie mit dem verkabelten Netz, denn durch die physische Trennung der beiden hatte ich ja das gleiche Problem mit allen Diensten, die via Broadcast von sich aufmerksam machen.

 

Und so hab ich es gemacht:

 

 

 

  1. pfSense installieren

  2. Installations Wizard
    DNS-Server:
    OpenDNS: 208.67.222.222, 208.67.220.220
    Goolgle: 8.8.8.8, 8.8.4.4
    Hetzner: 213.133.100.100, 213.133.98.98

    NTP: 0.pfsense.pool.ntp.org

    WAN einrichten (static IP, Gateway IP, block RFC1918, block bogon netwokrs)

    LAN einrichten 192.168.51.1/24

    Admin Passwort ändern

  3. Services/DHCP Server
    Range anpassen für diese Seite der künftigen VPN-Tap Verknüpften Seiten
    (Bei mir hat
    Standort1 192.168.51.101 bis 192.168.51.149 (100 für pfSense),
    Standort2 192.168.51.151 bis 192.168.51.199 (150 für pfSense),
    Standort3 192.168.51.201 bis 192.168.51.249 (200 für pfSense)

  4. Firewall/Alias
    Port 443,22, (und evtl. geplanter Zielport für SSH und HTTPS) als ManagementPorts

  5. Status/System Logs/Settings
    Show log entries in reverse order (newest entries on top)
    Log packets blocked by the default rule

  6. Firewall/Rules
    eine neue FilterRegel für WAN
    allow Proto TCP, Source any, Port any, Destination any, Port ManagementPorts
    diese soll verhindern, dass wir uns LAN-seitig komplett aussperren; zur Not kann man immer noch über die WAN Seite rein und die Einstellungen treffen

  7. System/User Manager
    neuen User anlegen mit Admin Rechten und sicheres Passwort
    disable admin  (das macht es schon ein bisschen schwerer für brute force)

  8. System/Firmware
    Updater Settings das richtige Repository wählen - damit funktioniert auch Dashborad das überprüfen der aktuellen Version

  9. System/Advanced
    Protocol: HTTPS
    TCP-Port: welchen man sich auch immer wünscht - (sollte unter Punkt 3 berücksichtigt werden)
    Enable Secure Shell
    SSH Port (wieder unter Punkt 3 berücksichtigen)
    Reiter Miscellaneous:
    Use glxsb (bei Alix sinnvoll, denn dann wird (anscheinnd) er interne crypto chip aktiviert)
    Reiter Noification
    SMTP Einsellungen für Benachrichtigungen

  10. Interfaces/(assign)
    beim Alix hab ich einen 2. EthernetAnschluss, den man z.B. für eine DMZ verwenden kann (so verwende ich es am Standort 1), oder als zusätzliches Subnetz, das vom einen getrennt werden soll (Standort 2), oder, oder...
    für alle Ports wird ein Interface assigned
    auch für das evtl. vorhandene WLAN

  11. Interfaces OPTx
    enable und einen eindeutigeren Namen vergben: zB. WLAN für das OPT3 oder DMZ für OPT2 ....
    ABER KEINE IP-Adresse zuweisen, sondern auf Type None belassen; ich setzte noch Block bogon networks

  12. Interfaces/(assign)/Bridges
    ich möchtedas Lan mit den WLAN in einem Subnetz haben, daher werde ich diese 2 über eine Bridge verbinden (das brauche ich dann später auch noch für die Verlinkung der OpenVPN Sites)
    also neu Bridge anlegen und Member Interfaces LAN, WLAN auswählen (STRG + Klick)

  13. Interfaces/(assign)/Interface assignments
    die soeben angelegte Bridge als weiteres Interface hinzufügen und wieder enable (None) und einen sprechenden Namn geben (bei mir BridgedLan)

  14. Interfaces/(assign)/Bridges
    das soeben erstellte Interface der Bridge als Member Interface hinzufügen

  15. jetzt wird es (zumindest hab ich es nicht geschafft) uns aus der aktuellen LAN-Verbindung rauswerfen, deshalb hab ich mich über die WAN Verbindung in die Admin-Oberfläche eingewählt.
    unter Interfaces/(assign)
    LAN auf BRIDGE0 und
    BridgedLan  dem vorher auf LAN zugewiesenem (in meinem Fall vr0) zuweisen.
    Somit hab ich dann:
    WAN vr1
    LAN BRIDGE0 (Lan Bridge)
    WLAN ath0
    BridgedLan vr0

  16. Firewall/Rules
    WLAN, BRIDGEDLAN, LAN eine allow any rule eintragen (sollte später genauer spezifiziert werden)

  17. Sysem/Advanced/System Tunables
    net.link.bridge.pfil_member  auf 0
    net.link.bridge.pfil_bridge auf 1

  18. ich musste jetzt nocheinmal unter interfaces alle betroffenen Interfaces einmal ankliken und saven (bei LAN interface hab ich auch noch extra die IP addresse geändert und wieder zurückgeändert)
    dann auch noch bei DHCP Server (Services/).
    Nach diesem Prozeder bekam ich den DHCP-Server wieder zum Laufen (Status/Services) und bekam auch eine IP-Adresse zugewiesen.

  19. WLAN noch konfigurieren:
    Interfaces/WLAN
    Standard 802.11g
    802.11g OFDM Protection Mode Protection mode off
    Transmit power 99
    Channel Auto
    Regulatory settings (mein Land und Indoor)
    Mode Access Point
    SSID  irgendwas
    802.11g only yes
    Allow intra-BSS communication yes (wobei ich nicht genau weiß, für was - konnte es auch noch nicht ausprobieren)
    WPA Enable  und PSK eingeben - irgendein sicheres Passwort
    WPA Mode: WPA2
    WPA Key Management Mode: Pre Shared Key
    Authentication OpenSystem Authentication
    WPA Pairwise AES
    Key Rotation 60
    Master Key Regeneration 3600

  20. jetzt noch mittels ARP herausfinden, welche MAC Adresse der Bridge vergeben wurde und diese unter Interfaces/LAN als MAC Adresse fix eintragen (sonst wird jedesmal eine neue generiert und z.B. Windows erkennt immer und immer wieder ein neues Netz und fragt die Vertrauenswürdigkeit ab (bei mir sind es dzt. 13 im prinzip gleiche)

  21. diese Schritte bei allen Standort pfSense machen



  22. OpenVPN (Server) am Standort-X einrichten
    Ich wähle dafür jenen Standort, an dem ich eine fixe IP-Adresse habe und der am schnellsten ans Internet angeschlossen ist (Root-Server mit Proxmox Virtualisierung)

  23. Für die OpenVPN installation benötige ich noch folgendes Paket:
    System/Packages/Available Packages  OpenVPN tap Bridging Fix
    und zusätzlich für die Zukunft OpenVPN Client Export Utility

  24. VPN/OpenVPN Server hinzufügen:
    Server Mode Peer to Peer (Shared Key)
    Protocol UDP
    Devce Mode tap
    Interface WAN
    Local Port 1194 (oder ein anderer)
    Shared Key automatisch generieren lassen (beim 2ten mal einsteigen kann man ihn dann sehen)
    Encryption algorithm AES-128-CBC (128-bit)
    Hardware Crypto (falls vorhanden auswählen)
    Tunnel Settings:
    Tunnel Network 172.16.1.0/29  (oder eine beliebige andere Adresse, die frei ist - SubnetMask mindestens 30 (2 Clients), ich brauch mehr als 2)
    Bridge Interface LAN (bei mir hat die Oberfläche anscheinend einen kleinen Fehler die Auswahlpunkte Bridge DHCP bis Server Bridge DHCP Start sind 3x vorhanden - ich wähle überall LAN aus, dann klappt es)
    Compression yes
    sonst alles leer lassen

  25. Firewall/Rules
    WAN Pass Proto UDP, Source *, Port *, Destination *, Port 1194 (oder entsprechend)
    OpenVPN Pass Proto *, Source *,Port *, Destination *, Port * (sollte sicherlich angepasst werden)

  26. Interfaces/(assign)
    neues Interface hinzufügen und ovpns1 (wenn es sich um den 1. OpenVPN Server handelt, sonst entsprechend 2,3,.... wählen)
    wieder unter Interfaces OPTx einen sprechenden Namen (OVPN) geben und Type None, Block bogon networks

  27. Interfaces/(assign)/Bridges als Member hinzufügen (STRG + Klick)

  28. Firewall/Rules/OVPN
    Block Proto UDP, Source *, Port *, Destination *, Port 67-68 (verhindert, dass der DHCP Server von der anderen Seite der Bridge hineinfunkt)
    Pass Proto *, Source *, Port *, Destination *, Port *  (sollte sicherlich angepasst werden)

  29. An den anderen Standorten System/Packages/Available Packages OpenVPN tap Bridging Fix installieren

  30. VPN/OpenVPN/Client add
    Server Mode Peer to Peer (Shared Key)
    Protocl UDP
    Device mode tap
    Interface WAN
    Server host or address:  server.domain.name  (oder IP-Adresse von pfsense mit OpenVPN Server installation)
    Server Port 1194 (wie Server!)
    Server host name resolution Infinitely resolve server yes
    Shared Key (Copy Paste von Server Shared Key)
    Encryption AES-128-CBC (128 bit) (gleich wie Server!)
    Hardware Crypto BSD cryptodev engine (wenn vorhanden)
    Tunnel Network 172.16.1.0/29 (gleich wie Server!)
    Compress yes

  31. wieder als Interface hinzufügen, sprechenden Namen geben, Type none, Block bogon networks;
    einer Bridge hinzufügen, Firewall Rules wie am Server (ausser die WAN, die kann man sich sparen)

  32. jetzt sollte man unter Status/OpenVPN sehen, dass eine Verbindung aufgebaut wurde
    und man kann die Clients auf der anderen Seite pingen (auch vom Server aus)

  33. der Zugriff auf die anderen Netze (wenn vorhanden) auf den jeweils anderen Standorten, funktioniert aber noch nicht. Dazu trage ich die anderen pfSense's als Gateway auf der LAN Schnittstelle ein und setze gleich eine Route.
    (System/Routing/Gateways bzw. Routes)