Bezpieczny Proxmox — firewall, dostęp po kluczu i whitelist zarządzania
Host Proxmox z publicznym IP jest skanowany przez boty w ciągu minut od wystawienia. Panel na porcie 8006 i SSH na 22 to główne cele. Dobra wiadomość: Proxmox ma wbudowany firewall, a kilka rozsądnych ustawień zamyka temat.
Zasada: domyślnie blokuj, wpuszczaj wyjątki
Firewall konfiguruje się na trzech poziomach: datacenter, host i maszyna. Ustaw domyślną politykę wejścia na DROP i dopuszczaj tylko to, co potrzebne. W /etc/pve/firewall/cluster.fw:
[OPTIONS]
enable: 1
policy_in: DROP
Od tej chwili nic nie wejdzie, dopóki jawnie nie zezwolisz — dlatego najpierw dodaj regułę na SSH i panel, żeby się nie odciąć.
Whitelist zarządzania przez IPSet
Zamiast wystawiać SSH i panel na cały świat, ogranicz je do zaufanych adresów (biuro, VPN). Zdefiniuj IPSet i wpuść na nim tylko porty zarządzania:
[IPSET mgmt]
203.0.113.10 # biuro
198.51.100.5 # VPN
[RULES]
IN SSH(ACCEPT) -source +mgmt
IN ACCEPT -source +mgmt -p tcp -dport 8006
IN ACCEPT -p icmp
Reszta ruchu do SSH i panelu jest odrzucana. Bot, który nawet nie jest na liście, dostaje ciszę.
SSH tylko po kluczu
Hasła to najsłabsze ogniwo. Wgraj swój klucz publiczny na konto root i wyłącz logowanie hasłem. W pliku /etc/ssh/sshd_config.d/99-hardening.conf:
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
X11Forwarding no
Przed przeładowaniem zawsze waliduj konfigurację, żeby literówka nie odcięła dostępu:
sshd -t && systemctl reload ssh
Sprawdź z zewnątrz, że hasło jest odrzucane — próba logowania hasłem powinna zwrócić Permission denied (publickey).
fail2ban jako druga linia
Nawet z whitelistą warto mieć fail2ban — banuje adresy po serii nieudanych prób. Minimalny jail dla SSH w /etc/fail2ban/jail.d/ssh.local:
[sshd]
enabled = true
maxretry = 3
findtime = 600
bantime = 3600
[recidive]
enabled = true
bantime = 604800
Jail recidive łapie powracających i banuje ich na tydzień. Sprawdzenie stanu:
fail2ban-client status sshd
Co jeszcze warto zamknąć
- Usługi, które muszą działać lokalnie (baza, cache), wiąż na
127.0.0.1, nie na0.0.0.0. - Wyłącz to, czego nie używasz (np. LLMNR).
- Panel trzymaj za certyfikatem Let's Encrypt, nie na samopodpisanym.
- Aktualizacje bezpieczeństwa włącz automatycznie, ale bez auto-restartu produkcji.
Weryfikuj efekt z zewnątrz. „U mnie działa" na hoście nie znaczy, że port jest zamknięty dla świata — przetestuj z innej sieci, że tylko właściwe porty odpowiadają.