Wat is de op Linux iptables gebaseerde ferm-firewall en hoe deze te configureren?

In Linuxgebaseerde besturingssystemen, de firewall bij uitstek dat je iptables gebruikt, is het echter ook mogelijk dat je nftables gebruikt, wat de evolutie van iptables is, veel efficiënter en met een veel "menselijkere" syntaxis, maar niet de hele wereld gebruikt nog steeds nftables. Vandaag gaan we uitleggen hoe je een firewall op Linux-servers kunt configureren met Ferm (For Easy Rule Making), een iptables-frontend waarmee we heel gemakkelijk, snel en eenvoudig regels aan de firewall kunnen toevoegen, zonder de syntaxis van iptabellen.

Wat is de Ferm firewall en waar dient deze voor?

Wat is de op Linux iptables gebaseerde ferm-firewall?

Ferm (For Easy Rule Making) is een frontend van iptables, dit betekent dat het in feite iptables gebruikt om verkeer toe te staan ​​of te weigeren, maar het stelt ons in staat om de firewall op een zeer geavanceerde manier te configureren zonder de syntaxis van iptables of maak verschillende scripts met iptables, maar we zullen het rechtstreeks met Ferm doen. Deze tool kan de regels lezen uit een configuratiebestand dat we gaan definiëren, en later zal het iptables "aanroepen" om de verschillende regels één voor één toe te voegen en ze in realtime in de kernel in te voegen.

Het doel van Ferm is om systeem- en netwerkbeheerders een gemakkelijke manier te bieden om alle firewallregels te lezen en te schrijven, waardoor de taak van het schrijven van de ene regel na de andere wordt verminderd, zodat we meer tijd kunnen besteden aan het ontwikkelen en optimaliseren van de regels, om ze zo efficiënt mogelijk. Ferm gebruikt een zeer eenvoudige maar behoorlijk geavanceerde configuratietaal, we kunnen variabelen, functies, arrays en zelfs blokken gebruiken. Andere zeer interessante opties van Ferm zijn dat het ons in staat zal stellen om andere configuratiebestanden in een directory op te nemen, en het zal zorgen voor het automatisch importeren en toepassen van al deze regels.

Ferm is nog steeds een iptables-frontend, dus als we deze tool gebruiken, kunnen we de firewall altijd rechtstreeks bewerken en configureren met behulp van de iptables-opdrachten. In feite is Ferm in staat om de huidige iptables-regels te importeren en automatisch in het configuratiebestand te plaatsen, om ze later te bewerken of uit te breiden.

Een van de meest populaire frontend van iptables is ufw, dat veel wordt gebruikt door systeem- en netwerkbeheerders om hun firewalls eenvoudig en snel te configureren.

Installatie en inbedrijfstelling van Ferm

De installatie van Ferm is heel eenvoudig, het bevindt zich momenteel in de meeste opslagplaatsen van de verschillende op Linux gebaseerde distributies, in ons geval hebben we de nieuwste versie van Debian gebruikt om alle tests uit te voeren die we je gaan leren. Om dit programma, dat een iptables-frontend is, te installeren, moeten we het volgende commando uitvoeren:

sudo apt install ferm

Zodra we deze opdracht uitvoeren, zouden we zoiets als dit moeten zien, waar we de extra pakketten te zien krijgen die we moeten installeren, eigenlijk moeten we Perl installeren om dit programma correct te kunnen uitvoeren.

Het Ferm-installatieprogramma zal ons vertellen dat het de firewallregels zal laden tijdens het opstarten vanaf het /etc/ferm/ferm.conf-pad, dat wil zeggen dat alles in dit bestand automatisch wordt doorgegeven aan iptables om het verkeersnetwerk toe te staan ​​of te weigeren. De standaardconfiguratie van deze firewall stelt ons in staat om op afstand toegang te krijgen door SSH via poort 22, als je geen SSH hebt geconfigureerd op deze poort, dan moet je de standaardwaarden bewerken en op "nee" klikken zodat het niet start , anders verliest u de verbinding.

Zodra we ja of nee hebben gekozen, zal apt alle extra pakketten installeren die we nodig hebben om dit programma te laten werken.

Eenmaal geïnstalleerd, kunnen we naar het / etc / ferm / pad gaan en we zullen zowel het configuratiebestand met de naam ferm.conf zien, als een map met de naam ferm.d waar we onze ferm-configuratiebestanden kunnen opnemen om ze te importeren, dit maakt het mogelijk we hebben een grotere modulariteit.

Ferm wordt standaard al geleverd met een lijst met regels die we op elk moment kunnen verwijderen, maar dit zal ons helpen om te gaan met de syntaxis van deze iptables-frontend, daarom zal het heel nuttig zijn. Als we naar de syntaxis kijken, zien we dat deze vergelijkbaar is met nftables, maar is gebaseerd op iptables.

In de volgende schermafbeelding kunt u zien hoe de domeinen waar het wordt geconfigureerd (iptables of ip6tables), de tabellen en de ketens, evenals de regels die we binnen de verschillende ketens hebben, worden gedeclareerd.

We kunnen ook zien dat we standaard verschillende regels hebben:

  • In de INPUT-keten is het beleid DROP, localhost-verkeer is toegestaan, ICMP-verkeer en de verbinding is toegestaan ​​via IPsec en ook via SSH met de standaardpoorten. Met betrekking tot de status van de verbindingen, worden ongeldige verbindingen VERLATEN, en de gevestigde en gerelateerde verbindingen zijn toegestaan, maar de nieuwe zijn niet toegestaan, behalve de specifiek gedefinieerde.

In de OUTPUT-keten is gedefinieerd dat het beleid is om alles te accepteren, en de status van de verbinding staat degenen die tot stand zijn gebracht en gerelateerd toe. In de FORWARD-keten wordt verkeer door het beleid geweigerd, worden ongeldige verbindingen specifiek geblokkeerd, maar tot stand gebracht en gerelateerde verbindingen zijn toegestaan.

Vervolgens kunt u dit configuratiebestand in tekstformaat zien:

# -*- shell-script -*-
#
# Configuration file for ferm(1).
#
domain (ip ip6) {
table filter {
chain INPUT {
policy DROP;

# verbinding volgen
mod state staat ONGELDIGE DROP;
mod state staat (GEVESTIGD GERELATEERD) ACCEPTEREN;

# lokaal pakket toestaan
interface wat ACCEPTEREN;

# reageer op ping
proto icmp ACCEPTEREN;

# IPsec toestaan
proto udp dport 500 ACCEPTEREN;
@if @eq ($ DOMEIN, ip) {
proto (esp ah) ACCEPTEREN;
} @anders {
proto (in het bijzonder) ACCEPTEREN;
}

# sta SSH-verbindingen toe
proto tcp dport ssh ACCEPTEREN;
}
keten UITGANG {
beleid ACCEPTEREN;

# verbinding volgen
#mod staat staat ONGELDIGE DROP;
mod state staat (GEVESTIGD GERELATEERD) ACCEPTEREN;
}
ketting VOORUIT {
beleid DROP;

# verbinding volgen
mod state staat ONGELDIGE DROP;
mod state staat (GEVESTIGD GERELATEERD) ACCEPTEREN;
}
}
}

@include ferm.d/;

Het meest interessante deel is de "@include ferm.d /" die we in het laatste deel hebben, dit betekent dat het alle configuratiebestanden zal importeren die we in die map in kwestie hebben.

Deze Ferm-firewall hieronder gebruikt iptables, dus als we het volgende commando uitvoeren:

iptables -L

We kunnen de huidige staat van iptables zien met alle regels die het in de firewall heeft opgenomen:

Zodra we de standaard Ferm-configuratie hebben gezien, gaan we verschillende configuratievoorbeelden zien die we kunnen doen.

Ferm Basisconfiguratie

De syntaxis van Ferm is heel eenvoudig en flexibel, maar we moeten het leren om een ​​juiste configuratie te maken. We raden je aan om toegang tot de officiële Ferm-handleiding waar u alle details vindt over de te gebruiken syntaxis en hoe de verschillende regels moeten worden gedeclareerd in het configuratiebestand, dankzij deze officiële handleiding kunnen we deze firewall zonder veel problemen configureren.

Het eerste dat u in gedachten moet houden, is dat alle Ferm-regels beginnen en eindigen met accolades en dat de regels eindigen met een puntkomma, daarom is het een bekende syntaxis in programmeren. Andere interessante kenmerken zijn dat regeleinden worden genegeerd en dat u overal opmerkingen kunt plaatsen door "#" aan het einde van de regel te plaatsen.

Wat betreft de syntaxis van iptables en ferm, hebben we enkele verschillen:

  • Om de invoerinterface te definiëren: interface (indien)
  • Om exit-interface te definiëren: buitenkant (van)
  • Een oorsprong definiëren: saddr
  • Een bestemming definiëren: daddr
  • Om een ​​protocol te definiëren: proto
  • Haven van herkomst: sport
  • Bestemmingspoort: dport
  • Laad een module: mod
  • Spring naar een aangepaste regel: spring

In Ferm zijn er geen commando's zoals -A, -I, -C, -R of -D, aangezien alles in een configuratiebestand wordt geschreven, gebeurt hetzelfde met de commando's om een ​​nieuwe string toe te voegen, te hernoemen of te verwijderen, nu verdwijnt hier volledig. Andere kenmerken zijn dat je met ferm verschillende regels kunt erven om binnen andere regels te gebruiken, nesten in het configuratiebestand.

Zodra we ongeveer weten hoe de syntaxis is, zullen we enkele voorbeelden zien die het vergelijken met iptables, in al deze zullen we werken aan de «filter»-tabel in de «INPUT»-keten.

iptables -P INPUT ACCEPT
iptables -A INPUT -p tcp -j ACCEPT

In ferm zou dit als volgt worden geschreven (toevoegen van het beleid van de OUTPUT- en FORWARD-keten uit de filtertabel):

domain ip {
table filter {
chain INPUT {
policy DROP;
proto tcp ACCEPT;
}
chain OUTPUT {
policy ACCEPT;
}
chain FORWARD {
policy DROP;
}
}
}

Ferm stelt ons in staat om dezelfde regels in de INPUT en OUTPUT gemakkelijk en snel te definiëren, zonder de regels steeds opnieuw te hoeven herhalen. Laten we ons bijvoorbeeld voorstellen dat we nu het TCP-protocol zowel in de INPUT-keten als in de OUTPUT-keten willen accepteren, dit in iptables zou als volgt zijn:

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

Met Ferm is het zo simpel als het volgende doen:

domain ip {
table filter {
chain (INPUT OUTPUT) {
proto (udp tcp) ACCEPT;
}
}

Zoals u kunt zien, is het veel sneller en gemakkelijker om dezelfde regel toe te passen op zowel de INPUT als de OUTPUT.

Deze firewall bevat ook zeer interessante functies, we kunnen bijvoorbeeld controleren of een variabele of functie is gedefinieerd, we kunnen controleren of twee waarden hetzelfde of verschillend zijn, een Booleaanse waarde weigeren, domeinen rechtstreeks vanuit Ferm oplossen, parameters aaneenschakelen en een lange lijst met functies.

Ferm stelt je ook in staat om de iptables-modules te "laden" om ze te gebruiken, en de firewall op een geavanceerde manier te configureren, we hebben bijvoorbeeld het volgende:

mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;

Dat kunnen we in het hele configuratiebestand plaatsen.

Om de in Ferm geïntroduceerde regels toe te passen, moeten we het volgende commando uitvoeren:

ferm -i -t 10 /etc/ferm/ferm.conf

Importeer iptables-regels in Ferm

Met Ferm kunnen we gemakkelijk en snel de iptables-regels die we momenteel in uitvoering hebben, importeren in een Ferm-bestand voor latere wijziging. Om dit te kunnen doen, moeten we gewoon de iptables-regels in het geheugen laden (momenteel in gebruik) en dit commando uitvoeren:

import-ferm > /etc/ferm/ferm.d/reglas-iptables.conf

Wanneer we het uitvoeren, kunnen we de iptables-regels rechtstreeks in de syntaxis van Ferm zien.

Als je de iptables-regels die je in een tekstbestand hebt wilt omzetten naar Ferm, kun je het volgende commando uitvoeren:

import-ferm origen de las reglas de iptables > /etc/ferm/ferm.d/reglas-iptables.conf

Zoals je hebt gezien, is ferm een ​​geweldige iptables-frontend waarmee we het op een geavanceerde manier kunnen configureren, zonder de syntaxis van iptables te leren en de regels correct in een configuratiebestand te organiseren. Naar onze mening zijn we echter van mening dat het correct configureren van een bash-script met alle iptables-regels geen frontend of extra software vereist, hoewel het voor sommige mensen nuttig kan zijn. We moeten niet vergeten dat Nftables al de mogelijkheid bevat om de regels rechtstreeks in een configuratiebestand te configureren, en niet alleen interactief via consoleopdrachten.