Language: cs
Zabezpečení VPS od začátku: klíče SSH, firewall a Fail2ban
Nový VPS nelze považovat za bezpečný hned po instalaci Ubuntu. Ještě před nastavením přístupu je server viditelný skenerům: zkoušejí hesla SSH, hledají vystavené ovládací panely a kontrolují běžné zranitelnosti. V tomto návodu projdeme základní kroky zabezpečení VPS od nuly: vytvoření samostatného uživatele, nastavení ověřování pomocí klíče SSH, omezení síťových portů pomocí UFW a přidání Fail2ban. Všechny kroky fungují s Ubuntu 22.04 a 24.04, pokud příkazy spouští uživatel s oprávněními sudo.
Než začnete: vytvořte si seznam portů
Neotvírejte porty „pro jistotu“. Typický webový server potřebuje:
22/tcp— SSH; ideálně ho omezte podle IP nebo ho přesuňte na jiný port pouze jako doplňkové opatření;80/tcp— HTTP; obvykle je potřeba pro přesměrování na HTTPS a ověření certifikátu;443/tcp— HTTPS.
Port aplikace, například 3000, 8080 nebo 9000, by neměl být dostupný z internetu, pokud před aplikací běží Nginx nebo Caddy. Navažte aplikaci na 127.0.0.1 nebo povolte její port pouze v interní síti. Nejprve zjistěte, co na serveru naslouchá:
sudo ss -tulpnPo instalaci Dockeru zkontrolujte jeho pravidla iptables samostatně: publikování pomocí -p 3000:3000 může zpřístupnit port mimo očekávané nastavení. U veřejné služby je bezpečnější použít HTTPS proxy a interní port ponechat skrytý.
Krok 1. Aktualizujte systém a vytvořte správce
Připojte se k VPS pomocí přihlašovacích údajů, které jste obdrželi, a nainstalujte aktualizace:
sudo apt update
sudo apt full-upgrade -y
sudo apt install -y ufw fail2ban unattended-upgradesVytvořte osobního uživatele. alex nahraďte vlastním jménem:
sudo adduser alex
sudo usermod -aG sudo alexPůvodní přístup neodstraňujte, dokud nový účet neotestujete v samostatném okně terminálu. Je to důležité pravidlo: chybu v SSH lze snadněji opravit, dokud je aktuální relace stále otevřená.
Krok 2. Vytvořte klíč SSH a nainstalujte ho na server
Na počítači s Linuxem, macOS nebo Windows PowerShell spusťte:
ssh-keygen -t ed25519 -C "alex@my-computer"Stisknutím Enteru uložte klíč do výchozího souboru a poté nastavte přístupovou frázi. Soukromý klíč nikdy neposílejte v chatu, nevkládejte ho do repozitáře ani ho nekopírujte na VPS. Na server se má přenést pouze soubor s příponou .pub:
ssh-copy-id alex@SERVER_IPPokud ssh-copy-id není k dispozici, zobrazte veřejný klíč pomocí Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub v PowerShellu a poté ho přidejte na server:
sudo install -d -m 700 -o alex -g alex /home/alex/.ssh
sudo nano /home/alex/.ssh/authorized_keys
sudo chown alex:alex /home/alex/.ssh/authorized_keys
sudo chmod 600 /home/alex/.ssh/authorized_keysVložte klíč na jeden řádek a před vypnutím hesel otestujte přihlášení:
ssh alex@SERVER_IP
sudo whoamiOčekávaným výsledkem posledního příkazu je root. Pokud klient SSH klíč nenajde, uveďte ho explicitně: ssh -i ~/.ssh/id_ed25519 alex@SERVER_IP.
Krok 3. Zakažte přihlášení root a ověřování heslem
Zálohujte konfiguraci SSH:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_configUjistěte se, že soubor obsahuje tyto parametry:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
MaxAuthTries 3V Ubuntu mohou být nastavení umístěna v /etc/ssh/sshd_config.d/*.conf, proto zkontrolujte efektivní konfiguraci:
sudo sshd -t
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries'Pokud sshd -t ohlásí chybu, nerestartujte službu, dokud neopravíte syntaxi. Po úspěšné kontrole nastavení použijte:
sudo systemctl reload sshStaré připojení SSH ponechte otevřené a přihlášení pomocí klíče otestujte v novém okně. Vypnutí hesel bez ověřeného klíče je nejčastější způsob, jak ztratit přístup k serveru.
Krok 4. Nakonfigurujte UFW, aniž byste zablokovali SSH
UFW je pohodlný obal nad síťovými pravidly Linuxu. Nejprve nastavte bezpečné výchozí hodnoty a potom povolte SSH a webové porty:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enableAktivaci potvrďte až po přidání pravidla pro SSH. Zkontrolujte výsledek:
sudo ufw status verbose
sudo ufw status numberedU trvalé kancelářské IP můžete SSH omezit na tuto adresu:
sudo ufw delete allow 22/tcp
sudo ufw allow from YOUR.PUBLIC.IP to any port 22 proto tcp comment 'SSH office'Tuto možnost použijte pouze s trvalou IP a přístupem ke konzoli poskytovatele: pokud se adresa změní, můžete se sami odříznout.
Jak dočasně otevřít port aplikace
Pokud potřebujete službu zkontrolovat přímo, vytvořte pravidlo s omezeným zdrojem:
sudo ufw allow from YOUR.PUBLIC.IP to any port 8080 proto tcpPo testu ho smažte pomocí čísla, které zobrazí ufw status numbered:
sudo ufw delete RULE_NUMBERNepoužívejte sudo ufw allow 1:65535/tcp: takové pravidlo promění firewall ve formalitu.
Krok 5. Povolte Fail2ban pro SSH
Fail2ban analyzuje logy a po několika neúspěšných pokusech o přihlášení přidá dočasné blokovací pravidlo. Nenahrazuje klíče SSH ani firewall, ale omezuje šum z automatizovaných pokusů hrubou silou.
Vytvořte místní konfiguraci, aby aktualizace balíčků nepřepsaly vaše nastavení:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.localV části [DEFAULT] nastavte rozumné hodnoty:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
banaction = ufw
[sshd]
enabled = true
port = 22Spusťte službu a zkontrolujte jail:
sudo systemctl enable --now fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshdVe výstupu sshd zkontrolujte počet neúspěšných pokusů a zablokované adresy. Nepřidávejte do seznamu ban vlastní IP. Pro trvalou výjimku použijte ignoreip = 127.0.0.1/8 YOUR.PUBLIC.IP v části [DEFAULT].
Krok 6. Povolte automatické aktualizace
Automatické aktualizace jsou užitečné pro bezpečnostní balíčky, ale restarty po aktualizaci jádra je stále nutné řídit:
sudo dpkg-reconfigure -plow unattended-upgrades
sudo systemctl status unattended-upgradesJednou týdně zkontrolujte, zda je vyžadován restart:
test -f /var/run/reboot-required && echo 'Требуется перезапуск'Před ručním restartem se ujistěte, že máte funkční klíč a přístup ke konzoli VPS. Po restartu zkontrolujte služby aplikace, Nginx, UFW a Fail2ban.
Krok 7. Zkontrolujte výsledek zvenčí
Ochranu ověřte z jiného počítače, nejen čtením konfigurace:
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no alex@SERVER_IPPříkaz by měl skončit zamítnutím přístupu. Samostatně otestujte funkční přihlášení pomocí klíče:
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 alex@SERVER_IPNa VPS zkontrolujte naslouchající adresy a pravidla:
sudo ss -lntup
sudo ufw status numbered
sudo fail2ban-client status sshdPort aplikace by měl naslouchat na 127.0.0.1, pokud není určen pro přímý přístup. Z externího hostitele můžete použít nmap SERVER_IP, ale skenujte pouze vlastní server: kontrola infrastruktury někoho jiného bez povolení může porušovat zákon i pravidla poskytovatele.
Zálohy a obnova
Ochrana SSH nechrání před smazanými daty, chybou správce ani napadenou aplikací. Kopie databáze, konfigurace a uživatelských souborů ukládejte odděleně od VPS. Minimální nastavení tvoří denní záloha, několik verzí z předchozích dnů a pravidelné testy obnovy.
Hesla ani tokeny nezapisujte do skriptů v prostém textu. Pokud dojde k odhalení tajného údaje, okamžitě ho zneplatněte a vytvořte nový.
Jak vybrat VPS pro bezpečný projekt
Bezpečnost začíná kontrolou nad infrastrukturou. Na VPS si můžete sami zvolit operační systém, pravidla firewallu, způsob přístupu, zálohy a umístění služeb. U malého webu nebo API je stabilní síť, SSD úložiště a konzole pro obnovu důležitější než nadbytek virtuálních jader.
Při spuštění projektu na VPS u tropic.host si předem definujte jeho veřejné vstupní body: ve většině případů stačí SSH, HTTP a HTTPS. Databázi a ovládací panely ponechte v interní síti. S růstem projektu pomáhají samostatné instance VPS pro aplikaci, databázi a monitoring oddělit domény poruch.
Časté chyby
- Vypnutí hesel před otestováním přihlášení pomocí klíče. Aktuální relaci ponechte otevřenou a nové přihlášení testujte samostatně.
- Ponechání
22/tcpotevřeného pro celý svět, i když by ho bylo možné povolit pouze z důvěryhodných adres. - Přímé publikování portů Dockeru. Nejprve zkontrolujte pravidla Dockeru a UFW.
- Instalace Fail2ban bez další kontroly logů. Po změnách projděte
journalctl -u ssha stav jail.
Závěr
Základní ochrana VPS nezabere mnoho času, pokud kroky provedete ve správném pořadí: vytvořte samostatného uživatele, nainstalujte klíč SSH, ověřte přístup, zakažte přihlášení root a hesla, povolte UFW, nakonfigurujte Fail2ban a nastavte automatické aktualizace. Potom přidejte zálohy, logování a externí monitoring.
Tyto kroky server neučiní nezranitelným, ale odstraní nejčastější chyby počáteční konfigurace. Dalším krokem je přizpůsobit bezpečnostní profil konkrétní aplikaci: aktualizovat závislosti, omezit oprávnění služeb, chránit administrační panely a pravidelně kontrolovat otevřené porty.
FAQ
Musím změnit výchozí port SSH?
Ne nutně. Přesunutí portu omezí automatizovaný šum, ale nenahradí klíče, vypnutá hesla, UFW ani Fail2ban. Pokud port změníte, aktualizujte pravidlo firewallu a parametr port v jailu Fail2ban.
Co mám dělat, když po konfiguraci UFW ztratím přístup?
Použijte webovou nebo záchrannou konzoli poskytovatele a zkontrolujte pravidlo SSH i konfiguraci sshd. Starou funkční relaci nezavírejte, dokud nepotvrdíte nové přihlášení.
Stačí Fail2ban k ochraně SSH?
Ne. Fail2ban reaguje na neúspěšná přihlášení, ke kterým už došlo. Základem mají být klíče SSH, vypnuté ověřování heslem, minimální oprávnění uživatele a omezený firewall.
Mohu povolit SSH pouze z jedné IP adresy?
Ano, pokud je adresa trvalá: přidejte pro ni pravidlo UFW allow from. Předem si zajistěte přístup ke konzoli poskytovatele nebo jinou záložní cestu, protože po změně IP bude připojení zablokováno.
Jak často mám kontrolovat zabezpečení VPS?
Po každé změně SSH, firewallu nebo publikování portů Dockeru proveďte kontrolu portů a otestujte přihlášení. V rámci běžné údržby kontrolujte aktualizace a logy alespoň jednou týdně a pravidelně testujte obnovu ze zálohy.
