Hardening nového FiveM serveru: checklist, který bychom spustili první den
Ve zkratce
Zabezpečit nový FiveM server znamená vyřešit pět věcí dřív, než dorazí hráči: hostitele (SSH jen na klíče, firewall vystavující pouze herní a query port, FXServer běžící pod neprivilegovaným uživatelem), databázi (vlastní účet omezený na jedno schéma, nikdy dostupný z internetu), přístupové údaje (unikátní tajemství pro každou službu, uložená mimo strom resources a nikdy necommitnutá), oprávnění (ACE konfigurace napsaná záměrně, ne zděděná ze šablony, bez wildcard adminů) a přijímání resources (každý resource prověřený nebo proskenovaný před instalací, s poznamenaným původem a opakovanou kontrolou při aktualizaci). Přidejte otestované zálohy a jeden sepsaný kontakt pro incidenty a odstranili jste příčiny skoro každé kompromitace, kterou vídáme.
Hlavní body
- Spouštějte FXServer pod neprivilegovaným uživatelem; kompromitovaný resource pak vlastní servisní účet, ne celý stroj.
- Dejte serveru vlastní databázový účet omezený na jeho schéma — nikdy root přístup.
- ACE konfiguraci napište záměrně. Zděděná oprávnění ze šablony jsou cesta, jak hráči skončí s konzolí.
- Poznamenejte si při instalaci, odkud každý resource pochází; nezapsaný původ je původ, který nemáte.
- Záloha, kterou jste nikdy neobnovili, je plán, ne záloha.
Nejlevnější hodina bezpečnostní práce je ta před připojením prvního hráče. Nic není v produkci, nic nepotřebuje servisní okno a každé rozhodnutí je pořád vratné. Takhle bychom tu hodinu využili.
1. Hostitel
- Vypněte přihlašování heslem pro SSH a používejte klíče. Tahle jediná změna odstraní celou kategorii kompromitací hrubou silou.
- Firewall s výchozím zákazem. Vystavte herní port, query port a svou administrativní cestu. Nic dalšího nemusí být z internetu dostupné.
- Spouštějte FXServer pod vyhrazeným neprivilegovaným uživatelem, ne pod rootem ani pod vlastním loginem. Škodlivý resource zdědí práva toho uživatele — ať jsou malá.
- Panel, pokud ho používáte, držte mimo veřejný internet nebo za autentizující proxy. Panely jsou trvalý cíl a často jsou skutečným místem vstupu.
- Zapněte automatické bezpečnostní aktualizace operačního systému. Nezáplatované stroje padnou cestami, které s FiveM nemají nic společného.
2. Databáze
- 1Vytvořte serveru vyhrazeného databázového uživatele s právy jen na jeho schéma. Žádné GRANT ALL, žádný root, žádný sdílený účet napříč servery.
- 2Nabindujte MySQL/MariaDB na localhost nebo do privátní sítě. Databázi dostupnou z internetu někdo najde, a rychle.
- 3Použijte dlouhé náhodné heslo, které nepoužíváte jinde, a uložte ho tam, odkud ho strom resources nemůže vynést.
- 4Nastavte automatickou zálohu a jednou ji obnovte do testovací databáze, abyste doložili, že funguje.
- 5Logujte pomalé a neúspěšné dotazy. Bývají prvním viditelným znakem, že někdo prochází vaše data.
3. Přístupové údaje a konfigurace
Serverové Lua umí číst vaši konfiguraci, takže berte každé tajemství v ní jako jeden backdoor od zveřejnění. Neznamená to, že se tajemstvím vyhnete — znamená to, že jejich dosah je potřeba naplánovat.
- Jedno tajemství na službu. Znovupoužití mění jednu kompromitaci resource v převzetí účtů všude.
- Držte server.cfg mimo jakýkoli repozitář a ověřte, že ho .gitignore opravdu pokrývá, ještě před prvním commitem, ne po něm.
- Dávejte Discord botům minimum oprávnění a oddělte alertovací webhook od čehokoli, co uděluje moderátorskou moc.
- Zapište si, odkud každý klíč pochází a jak se mění. Pod tlakem incidentu vždycky chybí právě znalost „jak tohle vygeneruju znovu“.
4. Oprávnění (ACE) napsaná záměrně
Většina problémů s oprávněními ve FiveM je zděděná: šablonový server.cfg se širokým add_ace, přenášený přes tři generace serverů, udělující mnohem víc, než kdo zamýšlel. Napište si ten svůj od nuly a udržte ho dost krátký, aby se dal přečíst na jedné obrazovce.
# Skupiny, definované jednou
add_ace group.admin command allow
add_ace group.moderator command.kick allow
add_ace group.moderator command.ban allow
# Lidé, každý jmenovitě
add_principal identifier.license:REPLACE_ME group.admin
# Nikdo nic nedědí automaticky
remove_ace resource.example command allow- Žádné wildcard udělení příkazů skupině, ve které je někdo jiný než vy.
- Dávejte resourcům konkrétní ACE, které potřebují, ne plošný přístup k příkazům.
- Projděte seznam principálů čtvrtletně a odstraňte lidi, kteří odešli. Přístup, který přežije vztah, je trvalé riziko.
- Po každém incidentu si tenhle soubor přečtěte znovu — přidělení udělaná backdoorem přetrvají v konfiguraci i po odstranění resource.
5. Přijímání resources — nejdůležitější kontrola
Všechno výše zpevňuje prostředí. Tohle řeší, jak ke kompromitacím doopravdy dochází: provozovatel nainstaluje kód, který neprověřil. Udělejte z přijímání proces, ne impulz.
- 1
Zaznamenejte původ při instalaci
Odkud to je, jaká verze, kdo to schválil a kdy. Stačí tabulka. Bez ní později nepoznáte, co je původní.
- 2
Vždycky revidujte nebo skenujte před instalací
Přečtěte manifest a serverové skripty, nebo spusťte automatický sken a přečtěte důkazy. Jde o to, aby rozhodnutí padlo dřív, než kód dostane vaše přístupy.
- 3
Nechte si původní archiv
Je vaší základnou pro porovnání a artefaktem, který pošlete do scanneru nebo na kontakt pro hlášení, když se něco vynoří později.
- 4
Kontrolujte znovu při každé aktualizaci
Verze, kterou jste schválili, není verze, kterou v noci nainstaloval auto-updater. Berte aktualizace jako nové instalace.
- 5
Odmítejte, co neumíte doložit
Uniklé a crackenuté resources z definice prošly rukama někoho, kdo je upravil. Žádný hardening nevykompenzuje, že si to nainstalujete dobrovolně.
6. Věci, za které si poděkujete
- Otestovaná obnova. Ne záloha — obnova, kterou jste aspoň jednou opravdu provedli.
- Monitoring, který upozorní člověka. Nečtený dashboard není monitoring.
- Komunikační cesta pro admin tým mimo server, která nezávisí na serveru ani na botovi běžícím na něm.
- Jednostránkový runbook pro incidenty. Během incidentu nikdo nečte wiki; čte stránku, která říká, co udělat první.
- Poznamenaný kontakt pro odpovědné hlášení, aby výzkumník, který u vás něco najde, měl kam to poslat.
Nic z toho není exotické a nic z toho nevyžaduje bezpečnostní tým. Vyžaduje to jednou se rozhodnout, že instalace je rozhodnutí a přístupy se udělují záměrně. Servery, které padnou, skoro nikdy neprohrály s chytrým útokem; prohrály s resourcem, který nikdo nečetl, běžícím pod rootem, s heslem k databázi, které bylo zároveň heslem do panelu.
Časté dotazy
Jak zabezpečit nový FiveM server?
Ještě před otevřením hráčům: používejte SSH na klíče a firewall s výchozím zákazem, spouštějte FXServer pod neprivilegovaným uživatelem místo roota, dejte databázi vlastní omezený účet nedostupný z internetu, používejte unikátní tajemství pro každou službu, napište ACE oprávnění explicitně místo kopírování šablony a každý resource před instalací prověřte nebo proskenujte. Přidejte otestovanou obnovu ze zálohy a pokryli jste příčiny skoro každé kompromitace.
Má FiveM běžet pod rootem?
Ne. Serverové Lua běží s právy procesu FXServeru, takže běh pod rootem znamená, že jakýkoli škodlivý nebo kompromitovaný resource vlastní celý stroj — panel, další herní servery i všechny uložené přístupy. Vytvořte serveru vyhrazeného neprivilegovaného uživatele a držte jeho oprávnění k souborům přísná.
Jak často mám znovu skenovat už nainstalované FiveM resources?
Při každé aktualizaci, protože verze, kterou jste prověřili, není verze, kterou mezitím mohl nainstalovat auto-updater. U produkčního serveru se vyplatí zautomatizovat pravidelnou kontrolu celé sady resources — jednorázový sken popisuje, co jste nainstalovali, průběžné sledování popisuje, co běží teď.