TLDR: minimalismus, výběr vhodných HW komponent, výběr vhodného OS, pouze nezbytné balíčky, nechat vše pokud možno v defaultních hodnotách, nenastavovat víc, než je nutné, firewall není potřeba, logy nejsou potřeba.
Už jsem to vlastně psal v mnoha článcích a v diskusích. Můj přístup k administraci serverů je odlišný od přístupu většiny lidí, se kterými jsem se potkal. Zde je můj pohled na věc.
Výběr HW
Tohle považuju za základ. HW komponenty vybírám tak, aby fungovaly out of box. Vzpomínám si, jak jsme v nějakém týmu řešili síťové karty (je to více než 12 let nazpět). Kupovaly se nějaké nejlevnější Realteky (ano…) s cenovou kolem 140Kč. A byly s nimi problémy (jak jinak). Prosazoval jsem, aby se kupovaly o něco dražší síťovky (tehdy tuším 3Com). Ne. Prý stačí nějak zkompilovat nějaký kernel modul, ten nějak nastavit a vše pojede. No nedopadlo to. Upřímně, nemá smysl věnovat čas (desítky hodin) na nastavení HW v této cenové kategorii. Ušetřeny stokoruny, promrhány desetitisíce.
Soukromě jsem to řešil tak, že po dvou hodinách nastavování Realteku na nějaké základní desce jsem prostě objednal Intel Pro Desktop Adapter (nebo tak nějak), s cenovou pár tisíc. Kernel module e1000e a běží všude. Kdykoliv mám problémy se síťovkou na desce (a je jedno, jestli Windows, Linux nebo FreeBSD) dám tam tuhle Intelku a je to. Zaplatila se už několikrát.
Nemám nic proti, pokud někoho soukromě baví ladit HW. Pokud je to jeho koníček a chce to dělat, tak je to skvělé. Já to nedělám. Od HW chci, aby fungoval. Chci si hrát se software.
Můj HW zkrátka musí fungovat out-of-box pro daný OS a podle toho jej vybírám. Dostaneme se k tomu ještě u software, obecně platí (moje zkušenost), že pokud jsou s něčím problémy už během instalace, provoz a řešení potíží bude už jenom horší.
Výběr OS
Není dobré se omezovat na jeden OS. Nejsem (už) ortodoxní linuxák, spravuju Linux, FreeBSD a už i nějaké ty Windows. Pokud je HW dodaný s nějakým OS, nemá smysl tam páčit něco jiného. V práci máme na stole HW přímo dodávaný s Windows (nejedná se o desktop PC nebo server, jde o specifický HW). Ano, zkusil se Debian 10 (s nevelkým úspěchem), Debian 11 fungoval, ale zase k tomu není potřebný software (byl by dejme tomu za několik měsíců). Proč tam tedy nenechat Windows? Když tam vše jede?
Stejně tak jeden pěkný server. Přišel s Windows Server (snad 2022). Nechat ho tam. Do Hyper-V se dají virtuálky s Debianem. Ideální kombinace. HW je plně podporován, hyper-v funguje. Ano, kdybych ten HW vybíral já, tak tam bude Linux / Promox a KVM. Ale výběr HW jde mimo mne a nevidím problém tam nechat MS Windows Server 2022.
Jsem velkým fandou FreeBSD, soukromě jej mám téměř výhradně, ale občas je lepší Linux (Debian). Z mnoha důvodů. Na VPS u Hetznera mám Debian. Proč ne.
Výběr software / služeb
Výběr systémové architektury je komplexní proces. Je třeba zvážit mnoho různých protichůdných požadavků. Pokud se jedná o interní vývoj, je třeba úzké komunikace mezi vývojáři, administrátory apod. Moc nevěřím na moderní DevOPS. Podle mě je myšlení programátora a technika naprosto odlišné. Jako admin požaduji stabilní software. Software, který je ideálně starší než já, má miliony uživatelů a jeho pád nikdo posledních 20 let neviděl. Programátoři (někteří), mají z nějakého důvodu rádi komponenty a frameworky, které před rokem neexistovaly a za rok už si na ně nikdo nevzpomene (na ten framework, ne na ty programátory ;-)).
Osobně se mi vždy vyplatila sázka na „30+“ let starý software. Ano, zní to konzervativně, ale na druhou stranu se mi nikdy nestalo, že by mě to nějakým způsobem zklamalo. Asi není překvapení, že DB je jednoznačně PostgreSQL, webserver za mě klidně Apache HTTPD (ale nic proti nginx), FreeBSD / Linux a jako backeng Python nebo ideálně Golang. Moje první stránky jsem psal v ANSI C, k tomu jako CGI Apache Webserver a nějaká souborová databáze (tuším snad TrivialDB). HTML je pouze text a text zvládne na výstup poslat jakýkoliv jazyk. Oblibu PHP považuju za velmi špatný krok stranou (fakt nevím, proč by se měla stránka renderovat při každém http requestu). Proč by měl být web psán ve skriptovacím jazyku? Python, ok, dejme tomu, ale proč ne rovnou kompilovaný jazyk? Dneska to vidím jednoznačně na Golang nebo Rust. Oba rychlé (dobře, Rust je mnohem rychlejší, ale když ono je to v podstatě takové C++ s lidskou tváří, Golang je mnohem jednodušší a zvládne totéž) memory safe jazyky s podporou multithreadingu a snadné pro psaní mikroslužeb, REST API apod.
Ale to jsem trochu odbočil. Vývoj vlastního software by měla být až ta poslední možnost. Poslední. Odmítnutá, tisíckrát posouzená, nakonec na výjimku povolná, pouze dočasně. Nemám žádný sentiment ke svému kódu. Jakmile najdu v repositáři vhodný program, který dělá co potřebuji, tak můj program jde okamžitě pryč a přechází se na balíčky z repositáře dané distribuce. A o starost je méně. Programy z repa používá víc lidí, jsou logicky více testované, většinou i lépe výkonnostně odladěné (no, i když tohle neplatí univerzálně) a nemusím se o ně starat. Ano, v repu toho hodně chybí, protože nejsou maintaineři, což je velmi odpovědná a záslužná práce. Svoje programy budu postupně dávat jako OSS pod licencí GPL/BSD, ale balíčky pro ně tvořit nebudu. Ostatně, je to Golang, takže kompilace jednoduchá a výsledek je jedna binárka. O mém postoji ke goučku jsem tu psal.
Software třetích stran
Nakousl jsem to už u výběru HW. Pokud je nějaký program složité nainstalovat, tak jeho provoz bude už jen horší. Můžete se mnou klidně nesouhlasit v diskusi.
Z praxe vím, jak složité je nainstalovat software různého typu. WordPress, Drupal, Gallery2 (ne, fakt ji nenechám umřít a budu na ni dál odkazovat. G2 považuju za jeden z nejlepších PHP programů. Galerie pro techniky, ACL, hromada komponent, funguje od PHP5 do PHP7.2, psaná pro PostgreSQL 7.4 a funguje i na PostgreSQL12 – takto se má psát software!) nainstalujete do pěti minut. Pokud nějaký software vyžaduje desítky manuálních kroků, tak jej dávám na blacklist. Instaloval jsem nejspíš GLPI (nevím, zda to byl tento projekt, nechci jim škodit), a instalační manuál byl na několik stránek. Takto tedy ne, přátelé. Potřebuješ DB, jméno heslo. Tím to prostě končí. Už i ta G2 uměla používat mnoho různých komponent na grafiku, takže pokud chybělo jedno rozšíření a bylo k disposici jiné, tak program prostě běžel. Software, který vyžaduje přesný seznam modulů a ještě ve specifických verzích je prostě špatně napsaný. Jiné programy to zvládnou levou zadní, očichají si prostředí, případně si řeknou o několik málo opravdu nutných komponent (kde několik málo jsou typicky 3) a spokojeně běží.
Administrace
Všechno dělat as simple as posible (simple as fuck ;-)). Tohle souvisí s výběrem služeb. Většina mnou provozovaných serverů (serverů, kde jsem měl svůj podpis), měla minimum služeb v naprosto minimální konfiguraci. Jako příklad můžu uvést diskové pole pro vmware cluster. Instalace linuxu, export NFS. Hotovo! Nic víc není potřeba, pokud si tak navrhnete infrastrukturu.
Shořelo nám pole (samozřejmě v noci, v neděli, po flámu a já nevím co), instalace OS (toho času snad ještě CentOS), nastavení exportů NFS, připojení do vmware. Hotovo za půl hodinky, největší zdržení byl snad boot hw raid řadiče (Areca). Dneska mi boot serveru zdržuje Adaptec.
Toto je moje rada pro adminy. Představte si, co všechno budete muset nastavit, když to CELÉ shoří. Já moc ne. Aplikační server znamená čistý minimální Debian, PostgreSQL (default), Apache Webserver (jen nastavení virtualhost) a daná appka. Práce na 20 minut, z toho 19 čekání na reboot a instalaci debianu. Potom je to jen o jednom řádku apt install
, nastavení uživatelů v PostgreSQL, load dumpu do DB, nastavení virtualhostu a nakopírování appky. Done!
Firewall není potřeba
Firewall by neměl být potřeba. Na serveru by měly běžet pouze nezbytně nutné služby pouze v minimálním nastavení. Kde co umí používat UNIX sockety, nemusí mít vůbec IP socket. Kde co lze nabindlovat na localhost. Správně nastavený server by měl poslouchat pouze na portech, které mají být tak jako tak exportovány do světa. Na takto nastaveném serveru není potřeba firewall. A toto myslím zcela vážně.
Neříkám, že používat FW je chybou, to vůbec ne. Ale je chybou na něj spoléhat jako na jedinou ochranu serveru. Ne, mělo by to být něco doplňkového. Firewall – oddělení požárních prostor zde není pro každodenní použití. Ve fabrice / v bytovém domě by nemělo trvale hořet a obyvatelé by neměli být spokojeni s protipožárními dveřmi, které oddělují trvale hořící prostory od zbytku. Ne. Protipožární stěny svou funkci v ideálním případě nenaplní nikdy. Stejně by to mělo být s firewallem. Neměl by být vlastně vůbec potřeba.
Logy nejsou potřeba
Přijde mi zvláštní, kolik úsilí se věnuje logování. Každý nováček na pohovoru mi řekl, že nejdůležitější je správné a bohaté logování. No není.
Základem je znát všechny komponenty, všechny služby. Vědět proč jsou nainstalované, jak se chovají za různých situací a jak se pozná, že něco není ok. Měl jsem ve správě servery, u kterých jsem po letech už jenom z chování ssh konzole poznal, že něco není ok. Ta neuronka v naší lebce má ráda vyhledávání vzorů, velmi rychle se naučí správný stav a velmi rychle vyhodnotí, když je něco jinak.
Takže, ze znalosti všech služeb, jejich chování v nestandardních situacích lze velmi rychle a velmi snadno poznat, co je špatně. Na tohle téma jsem vedl hodně diskusí, které bych shrnul do: „admin přece neví, co je špatně, pokud nemá monitoring a logy“. Moje odpověď je, že by to prostě poznat měl. Taky dáváte auto do servisu, kde technik nepozná, že motor má divný zvuk, kola upadávají, řadička je nějak nakřivo a ve výfuku jsou díry, jen podle diagnostiky? Ne! Zkušený automechanik pozná během několika sekund, že motor dělá divný zvuk, které ložisko je zadřené, že je špatně geometrie apod. Jasně, diagnostika je potřeba, ale ne na absolutní základy. Opravdu nechci servis čehokoliv od člověka, který vůbec neví co servisuje a jen spoléhá na monitoring a logy.
Za ty roky jsem viděl desítky monitoringů, které byly sice krásně kompletně zelené (OK, NORMAL, NOMINAL), ale server vůbec neposkytoval potřebné služby. (Prý to je těžké nastavit, prej stačí monitorovat load – k tomu už se vůbec raději nebudu rozepisovat.) Potom jsem viděl monitoringy, které chrlily jeden warning za druhým a server fungoval zcela bezchybně. A zoufalé techniky, které jen řeší, jak ten warning vyřešit. Na tom zcela funkčním serveru.
Monitoring a logy jsou jistě fajn, ale není to základ. Základem je vědět co a proč a jak tam běží. A stačí se jen přihlásit na ssh, aby člověk poznal, že něco není ok.
Osobně logy moc nepoužívám a nenastavuju. Obvykle stačí default, dát si pozor na GDPR – za mě super věc. Konečně je vidět, kolik zcela zbytečných infromací se sbíralo. Nedávám souhlas se zpracováním nikde. A díky znalosti problematiky nastavuju logování pouze na nezbytné technické minimum. Když se ty logy dostanou do nesprávných rukou, tak tam stejně nic není – i IP lze anonymizovat (zcela nesmyslně je to osobní údaj, já nevím kde vy na těle máte network interface, ale já nic takového nenám). Logy jsou pro technika, ne pro šmíráky.
Zamyšlení nakonec, proč to tak je
Vůbec to nesouvisí s IT, souvisí to s povahou daných lidí. Krásně to vysvětluje vtip: oprava 200USD: 1USD šroubek, 199USD vím, kam patří. Spousta lidí oceňuje práci jen na základě stráveného času. A jsou rozčíleni, pokud si někdo za půl hodiny práce řekne 10tis.Kč. A tito lidé v práci pracují tak, aby to bylo co nejvíc vidět. Nastavují „všechno“, prakticky žádný soubor v /etc
nezůstane v defaultu. Stráví tím (zbytečně) hromadu hodin. A dostanou ocenění, jak na tom makali. Na tom serveru, který potom bude nutné znovu nastavit při každém major update. Protože je tam nastavené zcela všechno.
Ne. Tohle nepovažuju za správné. Důvod je ten, že 199USD za „vím kam ho zašroubovat“ opravdu neznamená jen těch 10minut času. Všechny IT problémy jsem schopen vyřešit do několika minut. Výměna disků v mdadm, zfs, btrfs. Instalace a nastavení PostgreSQL. NFS storage, webservery apod. Co ti lidé obvykle nevidí jsou ty stovky nebo už spíše tisíce hodin času, které jsem na tom strávil učením, zkoušením, přemýšlením, jak to co nejvíce rozbít a potom zase opravit. PostgreSQL umím adminovat proto, že jsem si vzal dokumentaci, celou jsem ji přečetl a všechno si vyzkoušel, včetně krajních situací. Proto vím, co má smysl se ještě pokusit opravit a kde už je lepší obnovit zálohu.
Stejně tak v SVJ (jsem předseda SVJ, už 10 let, a k tomu nově předseda BYTOL). Opravdu nechci, aby tam každý řemeslník trávil zbytečně hodiny času navíc. Umíš to za půl hoďky? Super. Faktura na 10tis? No problémo. Kolegové (někteří) s tím mají problém a raději ocení někoho, kdo to dělá desítky hodin a jede tam 4x, než člověka, který má vše v autě a profesionálně to vyřeší během jedné návštěvy (taky nesnášíte, když přijede řemeslník na předem přesně dohodnutou práci a vzápětí odjede nakoupit? Proč to nemá v dodávce? O to víc oceňuju profíky, kteří prostě přijedou a udělají vše potřebné na jeden zátah). Tak s kolegy ve výboru SVJ/spolku vedu diskusi na téma, kdo jiný by to udělal tak dobře a za nás s menšími náklady na administraci (předání klíčů, prostor, hlídání apod.). Tohle jsou další náklady navíc. Stejně jako ty nefunkční a levné síťovky. Kolem špatného řemeslníka musíte neustále běhat. Dobrý to vyřeší hned napoprvé. Ať si to klidně nechá zaplatit, ušetřil mi spoustu času. Já jako předseda chci také trávit administrací SVJ a spolku minimum času. Chci, aby to fungovalo a ne se v tom neustále hrabat.
Tohle se jen tak nezmění. Jsou lidé, kteří rádi ukazují, co všechno umí nastavit a jejich díla jsou maximalistická. Zbytečné komponenty, zbytečné nastavení, zbytečná kompilace driverů z důvodů špatného výběru HW. A jsou lidé, kteří účtují jen podle času. 30h je lepší, než půl hodiny. Protože přece se potom nebude v práci 7.5h flákat… Ale to je další téma na jindy.
Základem je být profík v dané oblasti. Už to pomalu, velmi pomalu nastupuje do česka. Už to nejsou „brouci pytlíci“, kteří umějí všechno a zároveň nic pořádně. Už to jsou profíci na danou oblast. Ano, místo jednoho technika jich bude potřeba třeba 5, ale každý z nich udělá rychle, efektivně svou část práce a výsledek bude stát za to. Stejně tak v IT je blbost dělat všechno. Někdo umí DB, storage, systémy souborů, někdo jiný umí nastavit MX server, někdo další umí programovat, někdo zná dokonale HW. Každý ve své expertní oblasti. Snad už opravdu končí doba, kdy se všechno oceňovalo jen pouze podle vykázaného času nebo podle řádků kódů (hehe, kdybych chtěl být placen za kód, tak budu psát XML/XSD, co by se jinak zvládlo na pár desítkách řádků má už několik tisíc :-D). Cílem by mělo být nezbytné minumum.
Ze stejného důvodu nemám problém za 1 hod práce a 12 fotek v podobě TIFF exportu zaplatit známé 3k+, i když používá 14 let starej 5D Mark II. Protože kromě letité zrcadlovky přiveze svoje know-how nabyté v Opavě na ITF, svoji intuici, svoji úžasnou schopnost práce s malými dětmi a vše o pár dní později završí svojí schopností decentně a kvalitně provedeného výběru snímků a exportů z RAWu, protože tenhle 5D Mark II zná po těch 250 tisících fotkách a dvou výměnách závěrky líp než sebe sama. Za tohle know-how jí velice rád zaplatím víc, i když po Poděbradech běhá nejmíň pět jiných cvakálistů, co mají nejnovější výbavu v ceně čtvrt miliónu, ale jinak neumí nic než naroubovat děti do standardní pózy ve standardním ateliéru a flákat to s bleskem, což vše vede k technicky špičkovým, ale kompozičně a atmosféricky příšerným fotkám.
Normálně jsem se musel na chvíli zamyslet, jestli tohle není můj blog, protože všechno tak jak je to napsané jakoby vylezlo z mé hlavy :-D
Díky :-)
…Firewall není potřeba …
Asi mas dost malou predstavivost co se sitovani tejce … ;D. To ze ti neco posloucha jen na localhostu neznamena, ze se to neda kontaktovat z normalni site. Co si asi tak myslis, ze ten stroj udela, kdyz mu na eth rozhrani dorazi paket s dst 127.0.0.1. Klidne si to otestuj. Bez dalsiho to uplne vpohode doruci appce. A ta appka pochopitelne(na src) odpovi, a voiala, spojeni je navazano. Servisy ktery budou komunikovat na localhostu vyhradne s localhostem budes hledat ne s lupou, ale mikroskopem.
A proto se nastavuje ten firewall, protoze je to jako dalsi layer ochrany tech rozbitych appek tech vyvojaru na ktery denne nadavas. Typicky presne tech, ktery pouzivaji kazdych 14 dnu jinej, aktualne free khull a in, frejmwork.
Jinak ve vseobecnosti souhlas, taky se snazim nechat v defaultu pokud mozno uplne vse, co nejaky zasahy vylozene nevyzaduje. Ono to stejne v prubehu zivotnosti nejaky zasahy vyzadovat bude, protoze nekdo nekde neco „vylepsi“ a neco se podela.
BTW: Asseco(lcs) – Noris/Helios(green/nephrite) … je to jedna vec, a i na aktualizaci maji stos 150ti papiru, a kdyz neco vynechas, cely se to podela. Adminy pak pravidelne oblazujou mailama typu ze maji neco nekde overit jestli/jak se to pouziva a podle toho neco nekde prenastavit, podle toho, jesli je zrovna uplnek 30. unora.
Zeby jako vydali patch kterej by to udelal sam, to je ani nenapadne (nemluve o tom, ze naprosto s klidem vydaji stejny patch se stejnym cislem verze klidne 5x, takze vlastne nemas ani jak zjistit, jestli mas tu aktualni verzi nebo ne).
Existuje reálný scénář, jak se packet s dst 127.0.0.1 dostane z internetu přes všechny routery a na základě čeho ten poslední router (buď v DC nebo můj), pošle dst 127.0.0.1 zrovna na tuhle iface? A jak tomu zabrání klasicky nastavený FW, kde je stejně typicky `-A INPUT -m tcp -p tcp –dport 1234 -j ACCEPT` a nekontroluje se dst address na iface?
Ale především, moje myšlenka nebyla: všechno nastavte na 127.0.0.1 a vše bude ok. Jak píšu, nastavit UNIX socket všude, kde to jde (a kde to nejde, tak `apt purge` ;-)) a na portech potom budou poslouchat jen služby, které by stejně FW pustil. Potom může webserver s mysql a php a pythonem vypadat i takto (výstup z `ss -lntp`):
Local Address:Port
LISTEN [::]:22
LISTEN [::]:80
LISTEN [::]:443
Tak on se firewal nastavit musi umet, a pokud to nekdo neumi, tak se pak proste jen divi. Resit odkud ta komunikace dorazila je zaklad. Presne proto nesnasim NATy, protoze to znamena o rad slozitejsi firewall a o par radu vetsi sanci, ze na neco zapomenes. A ano, i pres routery ti to klidne projde, najdi si source routing. On ti sice ledackdo bude tvrdit, ze to je stejne „vsude“ zakazany, ale ani nahodou neni. Nemluve o tom, ze ten kdo se o to snazi muze mit ten router pod kontrolou, to ty nemuzes vedet.
Navic jde primarne o to, ze ti na ten stroj bude nekdo nebo neco utocit z interni site, tudiz zadny dalsi router v ceste typicky neni. A staci na to odkaz na web a kus js, tzn neco, co v 99,99999% bez povsimnuti projde.