Webinterface Zugriff absichern

philip-17

New Member
Dec 10, 2021
9
1
3
30
Guten Abend zusammen,
ich bin aktuell dabei mein neuen Proxmox Host einzurichten. Der Host steht bei einem Anbieter im Rechenzentrum.
Ich habe leider aktuell keine Möglichkeit den Host hinter eine Firewall etc. zu hängen, und versuche den Zugriff auf den Host so gut wie möglich abzusichern.

Aktuell greife ich folgendermaßen auf den Host zu:
-> SSH Root Login gesperrt und Login nur mit SSH Key eingerichtet
-> 2ten Benutzer angelegt mit "nobash", da er nicht die Möglichkeit haben soll Befehle in der SSH Shell zu tätigen.
-> SSH Key mit einem 20< Zeichen langen Passphrase gesichert
-> SSH Port geändert
-> SSH Zugang dient nur zum Tunneln auf den Port 8006 für das Proxmox Webinterface
-> Proxmox Webinterface hat noch einmal ein eigenständiges über 30 Zeichen langes Kennwort mit aktivierter 2FA
-> SSH Key liegt bei mir auf einem verschlüsselten USB Stick
-> Auf dem Host ist über die Proxmox Firewall nur der SSH Port freigegeben


Habt ihr eventuell noch Verbesserungsvorschläge oder Tipps zum Absichern vom Host?
Ich hatte noch gelesen das es möglich wäre eine OPNsense als VM auf dem Proxmox aufzusetzen und den Host hinter diese VM zu hängen.
Da ist mir aber die Gefahr zu hoch das mal etwas mit der OPNsense sein könnte, und der Host offline ist.
 
Klingt für mich erstmal gesund paranoid..... Vielleicht noch Festplatten-Vollverschlüsseung in betracht ziehen?
 
-> SSH Root Login gesperrt und Login nur mit SSH Key eingerichtet
Ich weiß gerade nicht mehr was genau nur als root geht, aber irgendwas kann man nur als root im WebUI machen und ein anderer User, dem man alle root rechte gibt, reicht nicht.
-> Auf dem Host ist über die Proxmox Firewall nur der SSH Port freigegeben
Nicht vergessen das PVE einige versteckte Anti-Aussperr-Regeln hat, welche dir nicht im WebUI angezeigt werden. Die bekommst du nur ausgehebelt, wenn du die manuell die Ports nochmal extra blockst.
Habt ihr eventuell noch Verbesserungsvorschläge oder Tipps zum Absichern vom Host?
Fail2ban könnte man noch einrichten, dass da das WebUI/SSH nach z.B. 3 falschen Anmeldeversuchen die IP für 1 Tag gesperrt wird.
Ich hatte noch gelesen das es möglich wäre eine OPNsense als VM auf dem Proxmox aufzusetzen und den Host hinter diese VM zu hängen.
Da ist mir aber die Gefahr zu hoch das mal etwas mit der OPNsense sein könnte, und der Host offline ist.
Ja, das ist schon ungünstig, wenn du kein WebKVM hast, um zur Not wenigstens noch irgendwie per Konsole an den Server zu kommen.
 
Last edited:
  • Like
Reactions: itNGO
Nicht vergessen das PVE einige versteckte Anti-Aussperr-Regeln hat, welche dir nicht im WebUI angezeigt werden. Die bekommst du nur ausgehebelt, wenn du die manuell die Ports nochmal extra blockst.
Weißt du zufällig welche Ports das sind? Aktuell ist mir nur der Port 3128 bekannt.

Fail2ban könnte man noch einrichten, dass da das WebUI/SSH nach z.B. 3 falschen Anmeldeversuchen die IP für 1 Tag gesperrt wird.
Stimmt das mache ich auch gleich noch.
 
  • Like
Reactions: philip-17
Ich habe meinen Test-Server aktuell nur per VPN erreichbar aufgesetzt - also SSH und WebUI erreicht man nur über den VPN-Tunnel.
D.h. nach außen ist da alles zu. Zugriff im Falle eines VPN Disconnects dann aber auch nur über die Web-Shell des Anbieters :)

https://serverfault.com/questions/774569/how-can-allow-an-ssh-connection-only-over-vpn

Code:
# /etc/sshd_config
Port 1234
AddressFamily inet
ListenAddress 172.31.0.2

Code:
# create systemd override.conf for sshd
systemctl edit sshd
[Unit]
After=network.target auditd.service wg-quick@wg0.service
Requires=wg-quick@wg0.service sys-devices-virtual-net-wg0.device

Code:
iptables -A INPUT -p tcp --dport 8007 -s 172.31.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 8007 -j DROP
iptables-save > /etc/iptables/rules.v4
 
Last edited:
Ich habe ebenfalls über meinen Hosting-Provider Zugang auf eine VNC-Konsole des Servers, was mir folgendes Szenario ermöglicht:

  • Zugriff auf Webinterface, SSH und Sonstiges wird mittels nftables komplett deaktiviert (Im Notfall kann ich das über die VNC-Konsole wieder aktivieren)
  • LXC-Container mit OpenVPN
    • Port 1194 wird über den Host in den Container geschleift (nftables NAT)
    • Der Container wird für einen Zugriff auf das Webinterface von Proxmox freigeschaltet
  • Übliche Vorkehrungen wie SSH nur über Zertifikate, etc.

Um auf das Webinterface zuzugreifen muss also zwingend eine VPN-Verbindung hergestellt werden und die wiederum terminiert in einem Container. Fehlgeschlagene SSH-Loginversuche auf dem Host gibt es dadurch nicht mehr. Und sollte der OpenVPN-Container nicht mehr funktionieren, kann ich jederzeit über die VNC-Konsole SSH wieder aktivieren und das System reparieren.
 
  • Like
Reactions: darkiop
  • Zugriff auf Webinterface, SSH und Sonstiges wird mittels nftables komplett deaktiviert (Im Notfall kann ich das über die VNC-Konsole wieder aktivieren)
  • LXC-Container mit OpenVPN
    • Port 1194 wird über den Host in den Container geschleift (nftables NAT)
    • Der Container wird für einen Zugriff auf das Webinterface von Proxmox freigeschaltet
  • Übliche Vorkehrungen wie SSH nur über Zertifikate, etc.
Könntest du deine nftables hier posten? Klingt Interessant den VPN auch nochmals in einen LXC zu packen. Ich habe aktuell Wireguard direkt auf dem Host laufen.
 
Last edited:
Könntest du deine nftables hier posten? Klingt Interessant den VPN auch nochmals in einen LXC zu packen. Ich habe aktuell Wireguard direkt auf dem Host laufen.
Ich frage mich ob der Zugang auf den Host per VPN z.b. wie bei dir mit Wireguard auf dem Host.
Oder per SSH und Port Tunneling wie bei mir "sicherer" ist.
 
Ich frage mich ob der Zugang auf den Host per VPN z.b. wie bei dir mit Wireguard auf dem Host.
Oder per SSH und Port Tunneling wie bei mir "sicherer" ist.
Kommt glaub ich auch drauf an, welchem "Quellcode" man mehr Vertrauen schenkt. Wireguard steckt ja mittlerweile direkt im Kernel, kann man gut finden... ich persönlich halte das für sehr Riskant....

Aber auch SSH ist ja nicht frei von "Böcken" gewesen in seiner langen, langen, langen... Geschichte...

Mein Gefühl sagt mir, stick with SSH Port Tunneling....
 
Könntest du deine nftables hier posten? Klingt Interessant den VPN auch nochmals in einen LXC zu packen. Ich habe aktuell Wireguard direkt auf dem Host laufen.

Hier die Config für IPv4 (IPv6 wird bei mir gedroppt, passiert aber nicht automatisch!) und den Fall, dass masquerading auf dem Host genutzt wird (sprich eine Public-IP und ein internes Netzwerk für die Container/VMs).

Anmerkung: Ich nutze nur nftables und nicht die PVE-Firewall! Die Gefahr sich auszusperren ist dadurch recht hoch.

Code:
#!/usr/sbin/nft -f
flush ruleset
# vmbr0 = WAN
# vmbr2 = Containernetz mit Internetzugriff (10.10.0.0/24)
############################
# NAT TABLE
############################
table ip nat {
    
        #eingehende Pakete routen
        chain prerouting {
            type nat hook prerouting priority dstnat; policy accept;
        
            #NAT OpenVPN
            iifname vmbr0 udp dport 1194 dnat to 10.10.0.104:1194
        }

        #ausgehende Pakete routen
        chain postrouting {
            type nat hook postrouting priority srcnat; policy accept;
        
            oifname vmbr0 ip saddr 10.10.0.0/24 masquerade
        }
    
}

############################
# FILTER TABLE
############################

table ip filter {
 
    #Temporäre Portfreigaben
    chain temp {
        tcp dport 22 accept
        tcp dport 8006 accept
        icmp type echo-request limit rate 5/second accept
    }
 
    #INPUT-Chain
    chain INPUT {
        type filter hook input priority 0; policy drop;

        ct state {established, related} counter accept
        ct state invalid drop
        iifname lo accept

        jump temp
        drop
    }
 
    #Hauptchain für FORWARD
    chain FORWARD {
        type filter hook forward priority 0; policy drop;
        iifname vmbr0 ct state {established, related} counter accept

        ip saddr 10.10.0.0/24 iifname vmbr2 accept
        ip daddr 10.10.0.0/24 iifname vmbr0 accept

        log flags all prefix "FORWARD-Chain: "
        drop
    
    }
 
    chain OUTPUT {
        type filter hook output priority 0; policy accept;
        counter
    }
}

Die temporären Portfreigaben werden beim Start von nftables (bspw. reboot) angelegt und können mit
Code:
nft flush chain filter temp
entfernt werden. Anlegen wieder durch einen Neustart von nftables (oder entsprechenden Kommandos).

Zur Installation von OpenVPN im Container empfehle ich folgende Links:
- https://pve.proxmox.com/wiki/OpenVPN_in_LXC
- https://github.com/Nyr/openvpn-install
 
Last edited:

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!