6 min readDe Kicked Team
nftably: administrezi nftables fără teama că te încui singur afară
Am făcut open source nftably — un UI web care administrează nftables după modelul lui real de obiecte, aplică fiecare schimbare ca o singură tranzacție atomică, verificată în prealabil cu dry-run, și armează un auto-revert, ca o regulă greșită să nu te poată încuia afară din mașina pe care o editezi.
- Security
- Linux
- Open Source
- nftables
Oricine administrează firewall-uri Linux de mână cunoaște momentul: editezi /etc/nftables.conf peste SSH, tastezi nft -f și pentru o jumătate de secundă te întrebi dacă următorul lucru pe care îl vezi va fi un prompt de shell sau un terminal înghețat. Greșeala care te încuie afară este aceeași comandă care aplică remedierea. Asimetria asta este cel mai înfricoșător lucru la lucrul remote pe firewall și este problema pe care am construit nftably ca să o eliminăm.
nftably este acum open source sub licența 0BSD. Acest articol este despre ce face, cum te ține în siguranță și — la fel de important — ce nu va face pentru tine.
Modelul real, nu un subset curatoriat
Majoritatea UI-urilor pentru firewall îți dau o abstracție simplificată: „permite SSH”, „blochează acest IP” și o listă fixă de servicii. Merge până când ai nevoie de ceva ce abstracția n-a anticipat, moment în care ești înapoi într-un editor de text, iar imaginea UI-ului despre lume este învechită.
nftably administrează firewall-ul așa cum îl modelează nftables cu adevărat: tables → chains → rules, în orice familie. Base chains se agață în calea traficului; chain-urile obișnuite sunt ținte pentru jump și goto; o regulă este un set de condiții de potrivire și instrucțiuni de acțiune. Fiecare regulă este afișată ca linia nft reală în care se transformă, așa că ce vezi în UI este ce va rula kernelul.
Catalogul ajunge și în colțurile puternice:
- Verdict maps —
tcp dport vmap { 22 : accept, … }îți dă un singur lookup O(1) în locul unui teanc de reguli secvențiale. - Named counters — împarți un singur total curent între mai multe reguli în loc să ghicești care dintre cele cinci copii s-a declanșat.
- Flowtables — offload pe fast-path pentru un router, unde fluxurile stabilite ocolesc întregul ruleset.
- Reguli raw protejate — pentru construcția rară pe care catalogul n-o poate încă exprima, poți tasta o linie nft ad litteram, validată ca să nu poată ieși din chain-ul ei.
Explicat pe măsură ce construiești
Sintaxa nftables este compactă și neiertătoare, iar majoritatea dintre noi n-o scriem destul de des ca s-o ținem minte. În nftably, fiecare opțiune este un control tipizat care explică ce face: alegi o condiție de potrivire și editorul îți spune în cuvinte simple ce potrivește, cu un exemplu; alegi o acțiune și apar doar câmpurile ei relevante. Interfețele sunt oferite din lista reală de interfețe a mașinii, iar chain-urile și flowtable-urile surori se autocompletează pe măsură ce tastezi.
Scopul este să poți construi orice poate exprima nftables fără să-i memorezi sintaxa — învățând totuși sintaxa, pentru că linia generată este mereu în fața ta.
Pipeline-ul de aplicare este produsul
Editarea regulilor este partea ușoară. Aplicarea lor pe o mașină remote, prin exact firewall-ul pe care îl schimbi, este locul unde uneltele își merită banii. Fiecare aplicare în nftably trece prin același pipeline:
- Dry run — configurația candidată este verificată cu
nft --checkînainte ca ceva să atingă kernelul. - Review de diff — vezi exact ce se va schimba, linie cu linie, și confirmi.
- Aplicare atomică — schimbarea intră ca o singură tranzacție nftables. Nu există nicio fereastră în care jumătate din reguli sunt încărcate.
- Auto-revert armat — după aplicare, este armat un revert. Dacă schimbarea te-a tăiat de la acces și nu o poți confirma, ruleset-ul anterior revine de la sine. Dacă mai poți ajunge la UI, confirmi și schimbarea rămâne.
Ultimul pas este cel care contează. Transformă „o greșeală de tastare și conduc până la datacenter” în „o greșeală de tastare și aștept revert-ul”. Este aceeași disciplină pe care inginerii de rețea o folosesc de ani de zile cu commit confirmed pe routere, aplicată firewall-ului Linux.
Suficient de mic ca să ai încredere în el
nftably este un singur binar Go sprijinit pe SQLite. Fără agent, fără cloud, fără dependențe externe de runtime dincolo de nft însuși. Instalezi pachetul, rulezi nftably init și gata. O paletă de comenzi (Ctrl-K) sare la orice pagină sau acțiune. Asta e intenționat: o unealtă de administrare a firewall-ului care sună acasă, sau care are nevoie de un controller de flotă înainte să administreze o singură mașină, are prioritățile greșite.
Ce trebuie să știi înainte să-l îndrepți spre o mașină reală
Preferăm să citești avertismentele decât să le înveți pe pielea ta:
- Este software beta. Așteaptă-te la bug-uri. Nu a avut încă genul de testare pe care îl merită o piesă de infrastructură de firewall.
- nftably deține tabelele pe care le administrează. La fiecare aplicare, generează în întregime fiecare tabel administrat din propria bază de date și îl înlocuiește atomic. O regulă scrisă de mână într-un tabel administrat, despre care nftably nu știe, dispare după următoarea aplicare. Importă un tabel existent înainte să-l lași pe nftably să-l administreze, sau lasă acel tabel în pace — tabelele pe care nu le deține nu sunt niciodată numite și niciodată atinse.
- Pune-l în spatele unei liste de acces sau al unui tunel SSH. Este un control plane pentru firewall-ul tău; tratează-i portul în consecință.
Cum a fost construit
nftably a fost scris cu agenți de AI coding făcând cea mai mare parte a implementării, sub design, specificare și review umane — același workflow pe care l-am descris în ce înseamnă de fapt agentic development. Modelul de obiecte, pipeline-ul de siguranță și decizia că unealta trebuie să-și dețină tabelele în totalitate au fost decizii umane; agenții le-au transformat în Go funcțional mult mai repede decât am fi reușit singuri.
Concluzii
- Partea periculoasă a lucrului pe firewall este aplicarea, nu editarea — așa că pipeline-ul de aplicare (check, diff, tranzacție atomică, auto-revert armat) este locul unde s-a dus efortul de inginerie.
- Administrează modelul real. Abstracțiile care ascund tabelele și chain-urile eșuează exact când ai cea mai mare nevoie de ele.
- Proprietatea explicită bate combinarea tăcută. nftably înlocuiește ce administrează și nu atinge niciodată ce nu administrează — o regulă tăioasă, dar una cu care poți raționa.
Dacă rulezi Linux la margine și vrei ajutor să-ți aduci firewall-ul, rutarea sau hostingul într-o stare în care poți avea încredere, vorbește cu noi — iar dacă încerci nftably, bug report-urile sunt foarte binevenite pe GitHub.