In Linux-sisteme de operare bazate pe firewall prin excelență pe care îl utilizați este iptables, totuși, este posibil și să utilizați nftables, care este evoluția iptables, mult mai eficientă și cu o sintaxă mult mai „umană”, totuși, nu toată lumea încă folosește nftables. Astăzi vom explica cum să configurăm un firewall pe serverele Linux folosind Ferm (For Easy Rule Making), un front-end iptables care ne va permite să adăugăm reguli la firewall foarte ușor, rapid și simplu, fără a fi nevoie să învățăm sintaxa iptables.
Ce este firewall-ul Ferm și la ce servește?
Ferm (For Easy Rule Making) este un frontend al iptables, ceea ce înseamnă că, dedesubt, folosește iptables pentru a permite sau a refuza traficul, dar ne permite să configurăm firewall-ul într-un mod foarte avansat, fără a trebui să învățăm sintaxa iptables sau creați diferite scripturi folosind iptables, dar o vom face direct cu Ferm. Acest instrument este capabil să citească regulile dintr-un fișier de configurare pe care urmează să îl definim, iar mai târziu va „apela” iptables pentru a adăuga regulile diferite una câte una, inserându-le în timp real în nucleu.
Scopul lui Ferm este de a oferi administratorilor de sistem și de rețea un mod ușor de a citi și scrie toate regulile firewall-ului, reducând sarcina de a scrie o regulă după alta, astfel încât să putem petrece mai mult timp dezvoltând și optimizând regulile, pentru a le face ca cât mai eficient posibil. Ferm folosește un limbaj de configurare foarte simplu, dar destul de avansat, putem folosi variabile, funcții, tablouri și chiar blocuri. Alte opțiuni foarte interesante ale Ferm este că ne va permite să includem alte fișiere de configurare într-un director și se va ocupa de importarea și aplicarea automată a tuturor acestor reguli.
Ferm este încă un frontend iptables, prin urmare, atunci când folosim acest instrument, vom putea oricând să edităm direct și să configurăm firewall-ul folosind comenzile iptables. De fapt, Ferm este capabil să importe regulile iptables curente și să le introducă automat în fișierul de configurare, pentru a le edita sau extinde ulterior.
Unul dintre cele mai populare front-end-uri iptables este ufw, utilizat pe scară largă de administratorii de sistem și de rețea pentru a-și configura ușor și rapid firewall-urile.
Instalarea și punerea în funcțiune a Ferm
Instalarea Ferm este foarte simplă, este în prezent în majoritatea depozitelor din diferitele distribuții bazate pe Linux, în cazul nostru am folosit cea mai recentă versiune Debian pentru a efectua toate testele pe care urmează să le învățăm. Pentru a instala acest program, care este un frontend iptables, trebuie să executăm următoarea comandă:
sudo apt install ferm
Odată ce executăm această comandă, ar trebui să vedem așa ceva, unde ni se vor arăta pachetele suplimentare pe care trebuie să le instalăm, practic trebuie să instalăm Perl pentru a putea rula corect acest program.
Programul de instalare Ferm ne va spune că va încărca regulile firewall-ului în timpul pornirii din calea /etc/ferm/ferm.conf, adică tot ce se află în acest fișier va fi trecut automat către iptables pentru a permite sau a refuza rețeaua de trafic. Configurarea implicită a acestui firewall ne permite să avem acces prin SSH de la distanță prin portul 22, dacă nu aveți SSH configurat pe acest port, atunci va trebui să editați valorile implicite și să faceți clic pe „nu” pentru a nu porni , altfel veți pierde conectivitatea.
Odată ce am ales da sau nu, apt va finaliza instalarea tuturor pachetelor suplimentare de care avem nevoie pentru ca acest program să funcționeze.
Odată instalat, putem merge la / etc / ferm / cale și vom vedea atât fișierul de configurare numit ferm.conf, cât și un director numit ferm.d unde putem încorpora fișierele noastre de configurare ferm pentru a le importa, acest lucru permite avem o modularitate mai mare.
Ferm vine deja în mod implicit cu o listă de reguli pe care le putem elimina în orice moment, dar acest lucru ne va ajuta să ne ocupăm de sintaxa acestui frontend iptables, prin urmare, va fi destul de util. Dacă ne uităm la sintaxă, vom vedea că este similară cu nftables, dar se bazează pe iptables.
În următoarea captură de ecran puteți vedea cum sunt declarate domeniile unde va fi configurat (iptables sau ip6tables), tabelele și lanțurile, precum și regulile pe care le avem în cadrul diferitelor lanțuri.
De asemenea, putem vedea că avem mai multe reguli în mod implicit:
- În lanțul INPUT, politica este DROP, este permis traficul localhost, traficul ICMP și conexiunea este permisă prin IPsec și, de asemenea, prin SSH cu porturile implicite. În ceea ce privește starea conexiunilor, conexiunile nevalide sunt DROPED, iar cele stabilite și conexe sunt permise, dar cele noi nu sunt permise, cu excepția celor definite în mod specific.
În lanțul OUTPUT se definește că politica este de a accepta totul, iar starea conexiunii le permite celor stabilite și conexe. În lanțul FORWARD, traficul este refuzat de politică, conexiunile nevalide sunt blocate în mod specific, dar conexiunile stabilite și conexe sunt permise.
Apoi, puteți vedea acest fișier de configurare în format text:
# -*- shell-script -*-
#
# Configuration file for ferm(1).
#
domain (ip ip6) {
table filter {
chain INPUT {
policy DROP;
# urmărirea conexiunii
stare mod stare INVALID DROP;
mod state state ACCEPTATE;
# permite pachetul local
interfață ce ACCEPT;
# răspunde la ping
proto icmp ACCEPT;
# permite IPsec
proto udp dport 500 ACCEPT;
@if @eq ($ DOMAIN, ip) {
proto (în special ah) ACCEPT;
} @else {
proto (esp) ACCEPT;
}
# permite conexiuni SSH
proto tcp dport ssh ACCEPTĂ;
}
lanț OUTPUT {
politica ACCEPTĂ;
# urmărirea conexiunii
#mod state state DROP INVALID;
mod state state ACCEPTATE;
}
lant FORWARD {
politica DROP;
# urmărirea conexiunii
stare mod stare INVALID DROP;
mod state state ACCEPTATE;
}
}
}
@include ferm.d /;
Cea mai interesantă parte este „@include ferm.d /” pe care o avem în partea finală, aceasta înseamnă că va importa toate fișierele de configurare pe care le avem în acel director în cauză.
Acest firewall Ferm de mai jos folosește iptables, prin urmare, dacă executăm următoarea comandă:
iptables -L
Putem vedea starea actuală a iptables cu toate regulile pe care le-a încorporat în firewall:
Odată ce am văzut configurația implicită Ferm, vom vedea diferite exemple de configurare pe care le putem face.
Configurare de bază Ferm
Sintaxa lui Ferm este foarte simplă și flexibilă, dar trebuie să o învățăm pentru a face o configurație corectă. Vă recomandăm să vă accesați manualul oficial Ferm unde veți găsi toate detaliile despre sintaxa de utilizat și cum ar trebui declarate diferitele reguli în fișierul de configurare, datorită acestui manual oficial putem configura acest firewall fără multe probleme.
Primul lucru de reținut este că toate regulile Ferm încep și se termină cu paranteze, iar regulile se termină cu punct și virgulă, prin urmare, este o sintaxă bine cunoscută în programare. Alte caracteristici interesante sunt faptul că întreruperile de linie sunt ignorate și puteți pune comentarii oriunde punând „#” la sfârșitul liniei.
În ceea ce privește sintaxa iptables și ferm, avem câteva diferențe:
- Pentru a defini interfața de intrare: interfață (dacă)
- Pentru a defini interfața de ieșire: exterior (de)
- Pentru a defini o origine: saddr
- Pentru a defini o destinație: daddr
- Pentru a defini un protocol: proto
- Portul de origine: sport
- Port de destinație: dport
- Încărcați un modul: mod
- Salt la o regulă personalizată: sari
În Ferm nu există comenzi precum -A, -I, -C, -R sau -D, deoarece totul este scris într-un fișier de configurare, la fel se întâmplă și cu comenzile pentru a adăuga un șir nou, a-l redenumi sau șterge, acum aici dispare complet. Alte caracteristici sunt că ferm vă permite să moșteniți reguli diferite pentru a fi utilizate în alte reguli, cuibărite în fișierul de configurare.
Odată ce știm aproximativ cum este sintaxa, vom vedea câteva exemple care o compară cu iptables, în toate vom lucra pe tabelul «filtru» din lanțul «INPUT».
iptables -P INPUT ACCEPT
iptables -A INPUT -p tcp -j ACCEPT
In ferm acest lucru ar fi scris după cum urmează (adăugarea politicii lanțului OUTPUT și FORWARD din tabelul de filtrare):
domain ip {
table filter {
chain INPUT {
policy DROP;
proto tcp ACCEPT;
}
chain OUTPUT {
policy ACCEPT;
}
chain FORWARD {
policy DROP;
}
}
}
Ferm ne permite să definim aceleași reguli în INPUT și OUTPUT ușor și rapid, fără a fi nevoie să repetăm regulile de mai multe ori. De exemplu, să ne imaginăm că acum vrem să acceptăm protocolul TCP atât în lanțul INPUT, cât și în lanțul OUTPUT, acest lucru în iptables ar fi după cum urmează:
iptables -A INPUT -p tcp -j ACCEPT
iptables -A OUTPUT -p tcp -j ACCEPT
iptables -A INPUT -p udp -j ACCEPT
iptables -A OUTPUT -p udp -j ACCEPT
Cu Ferm este la fel de simplu ca să faci următoarele:
domain ip {
table filter {
chain (INPUT OUTPUT) {
proto (udp tcp) ACCEPT;
}
}
După cum puteți vedea, este mult mai rapid și mai ușor să aplicați aceeași regulă atât la INPUT, cât și la OUTPUT.
Acest firewall încorporează și funcții foarte interesante, de exemplu, putem verifica dacă este definită o variabilă sau o funcție, putem verifica dacă două valori sunt aceleași sau diferite, negăm o valoare booleană, rezolvăm domeniile direct de la Ferm, concatenăm parametrii și o lungime lista funcțiilor.
De asemenea, Ferm vă permite să „încărcați” modulele iptables pentru a le utiliza și să configurați firewall-ul într-un mod avansat, de exemplu, avem următoarele:
mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;
Acest lucru îl putem pune în întregul fișier de configurare.
Pentru a aplica regulile introduse în Ferm, va trebui să executăm următoarea comandă:
ferm -i -t 10 /etc/ferm/ferm.conf
Importați regulile iptables în Ferm
Ferm ne permite să importăm cu ușurință și rapid regulile iptables pe care le avem în prezent în execuție, într-un fișier Ferm pentru modificări ulterioare. Pentru a putea face acest lucru, va trebui pur și simplu să avem regulile iptables încărcate în memorie (utilizate în prezent) și să executăm această comandă:
import-ferm > /etc/ferm/ferm.d/reglas-iptables.conf
Când îl rulăm, putem vedea regulile iptables direct în sintaxa lui Ferm.
Dacă doriți să transformați regulile iptables pe care le aveți într-un fișier text în Ferm, puteți executa următoarea comandă:
import-ferm origen de las reglas de iptables > /etc/ferm/ferm.d/reglas-iptables.conf
După cum ați văzut, ferm este un excelent frontend iptables care ne va permite să îl configurăm într-un mod avansat, fără a fi nevoie să învățăm sintaxa iptables și să organizăm regulile corect într-un fișier de configurare. Cu toate acestea, în opinia noastră, credem că configurarea corectă a unui script bash cu toate regulile iptables nu necesită niciun frontend sau software suplimentar, deși poate fi util pentru unii oameni. Trebuie să ne amintim că Nftables încorporează deja posibilitatea de a configura regulile direct într-un fișier de configurare și nu numai interactiv prin intermediul comenzilor consolei.