Vad är Linux iptables-baserad ferm-brandvägg och hur man konfigurerar den

In Linux-baserade operativsystem, brandvägg par excellence som du använder är iptables, men det är också möjligt att du använder nftables, vilket är utvecklingen av iptables, mycket effektivare och med en mycket mer "mänsklig" syntax, men inte hela världen använder fortfarande nftables. Idag ska vi förklara hur man konfigurerar en brandvägg på Linux -servrar med Ferm (For Easy Rule Making), en iptables frontend som gör att vi kan lägga till regler i brandväggen mycket enkelt, snabbt och enkelt, utan att behöva lära oss syntaxen för iptables.

Vad är Ferm -brandväggen och vad är den för?

Vad är Linux iptables-baserade ferm-brandväggen

Ferm (For Easy Rule Making) är en frontend för iptables, det betyder att det under faktiskt använder iptables för att tillåta eller neka trafik, men det tillåter oss att konfigurera brandväggen på ett mycket avancerat sätt utan att behöva lära oss syntaxen för iptables eller skapa olika skript med iptables, men vi kommer att göra det direkt med Ferm. Detta verktyg kan läsa reglerna från en konfigurationsfil som vi ska definiera, och senare kommer det att "kalla" iptables för att lägga till de olika reglerna en efter en och infoga dem i realtid i kärnan.

Ferms mål är att ge system- och nätverksadministratörer ett enkelt sätt att läsa och skriva alla brandväggsregler, vilket minskar uppgiften att behöva skriva den ena regeln efter den andra, så att vi kan lägga mer tid på att utveckla och optimera reglerna, göra dem som effektiv som möjligt. Ferm använder ett mycket enkelt men ganska avancerat konfigurationsspråk, vi kan använda variabler, funktioner, matriser och till och med block. Andra mycket intressanta alternativ för Ferm är att det tillåter oss att inkludera andra konfigurationsfiler i en katalog, och det kommer att ta hand om att importera och tillämpa alla dessa regler automatiskt.

Ferm är fortfarande en iptables frontend, därför kommer vi alltid att kunna redigera och konfigurera brandväggen direkt med iptables -kommandon när vi använder det här verktyget. Faktum är att Ferm kan importera de nuvarande iptables -reglerna och automatiskt lägga dem i konfigurationsfilen för att senare redigera eller utöka dem.

En av de mest populära iptables frontend är ufw, används ofta av system- och nätverksadministratörer för att enkelt och snabbt konfigurera sina brandväggar.

Installation och idrifttagning av Ferm

Ferm-installationen är verkligen enkel, den finns för närvarande i de flesta förråd av de olika Linux-baserade distributionerna, i vårt fall har vi använt den senaste versionen av Debian för att utföra alla tester som vi ska lära dig. För att installera detta program, som är en iptables frontend, måste vi utföra följande kommando:

sudo apt install ferm

När vi har kört det här kommandot bör vi se något liknande, där vi kommer att visa de extra paketen som vi måste installera, i grunden måste vi installera Perl för att kunna köra detta program korrekt.

Ferm -installationsprogrammet kommer att berätta för oss att det kommer att ladda brandväggsreglerna under start från /etc/ferm/ferm.conf -sökvägen, det vill säga att allt i den här filen automatiskt skickas till iptables för att tillåta eller neka trafiknätverk. Standardkonfigurationen för denna brandvägg gör att vi kan ha åtkomst med SSH på distans via port 22, om du inte har SSH konfigurerad på den här porten måste du redigera standardvärdena och klicka på "nej" så att den inte startar annars förlorar du anslutningen.

När vi har valt ja eller nej, kommer apt att slutföra installationen av alla extra paket som vi behöver för att detta program ska fungera.

Efter installationen kan vi gå till / etc / ferm / sökvägen och vi kommer att se både konfigurationsfilen kallad ferm.conf, såväl som en katalog som heter ferm.d där vi kan införliva våra ferm -konfigurationsfiler för att importera dem, detta tillåter vi har större modularitet.

Ferm kommer redan som standard med en lista med regler som vi kan ta bort när som helst, men det hjälper oss att hantera syntaxen för denna iptables frontend, därför kommer det att vara ganska bra. Om vi ​​tittar på syntaxen kommer vi att se att den liknar nftables, men den är baserad på iptables.

I följande skärmdump kan du se hur domänerna där den ska konfigureras (iptables eller ip6tables), tabellerna och kedjorna, samt de regler som vi har inom de olika kedjorna deklareras.

Vi kan också se att vi har flera regler som standard:

  • I INPUT -kedjan är policyn DROP, localhost -trafik är tillåten, ICMP -trafik och anslutningen tillåts via IPsec och även via SSH med standardportarna. När det gäller status för anslutningarna TAPPAS ogiltiga anslutningar, och de etablerade och relaterade är tillåtna, men de nya är inte tillåtna, förutom de specifikt definierade.

I OUTPUT -kedjan definieras att policyn är att acceptera allt, och anslutningens tillstånd tillåter de etablerade och närstående. I FORWARD -kedjan nekas trafik av policyn, ogiltiga anslutningar blockeras specifikt men etableras och relaterade anslutningar är tillåtna.

Därefter kan du se denna konfigurationsfil i textformat:

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

# anslutningsspårning
mod state state OGILT DROP;
mod state state (ESTABLISHED RELATED) ACCEPTERA;

# tillåt lokalt paket
gränssnitt vad ACCEPTERA;

# svara på ping
proto icmp ACCEPTERA;

# tillåt IPsec
proto udp dport 500 ACCEPTERA;
@if @eq ($ DOMÄN, ip) {
proto (esp ah) ACCEPTERA;
} @annat {
proto (esp) ACCEPTERA;
}

# tillåt SSH -anslutningar
proto tcp dport ssh ACCEPTERA;
}
kedja UTGÅNG {
policy ACCEPTERA;

# anslutningsspårning
#mod state state OGILTIGT DROP;
mod state state (ESTABLISHED RELATED) ACCEPTERA;
}
kedja FRAMÅT {
policy DROP;

# anslutningsspårning
mod state state OGILT DROP;
mod state state (ESTABLISHED RELATED) ACCEPTERA;
}
}
}

@inkludera ferm.d /;

Den mest intressanta delen är “@include ferm.d /” som vi har i den sista delen, det betyder att den kommer att importera alla konfigurationsfiler som vi har i den aktuella katalogen.

Denna Ferm -brandvägg nedan använder iptables, därför om vi kör följande kommando:

iptables -L

Vi kan se det aktuella tillståndet för iptables med alla regler som det har införlivat i brandväggen:

När vi har sett standard Ferm -konfigurationen kommer vi att se olika konfigurationsexempel som vi kan göra.

Ferm Basic Configuration

Ferms syntax är mycket enkel och flexibel, men vi måste lära oss den för att göra en korrekt konfiguration. Vi rekommenderar att du få tillgång till den officiella Ferm -manualen där du hittar alla detaljer om syntaxen att använda och hur de olika reglerna ska deklareras i konfigurationsfilen, tack vare denna officiella manual kan vi konfigurera denna brandvägg utan många problem.

Det första du bör tänka på är att alla Ferm-regler börjar och slutar med hängslen, och reglerna slutar med ett semikolon, därför är det en välkänd syntax i programmering. Andra intressanta funktioner är att radbrytningar ignoreras, och du kan lägga kommentarer var som helst genom att sätta "#" i slutet av raden.

När det gäller syntaxen för iptables och ferm har vi några skillnader:

  • För att definiera ingångsgränssnitt: gränssnitt (om)
  • För att definiera utgångsgränssnitt: yttre yta (av)
  • För att definiera ett ursprung: saddr
  • För att definiera en destination: daddr
  • För att definiera ett protokoll: proto
  • Ursprungshamn: sport
  • Destinationsport: dport
  • Ladda en modul: mod
  • Hoppa till en anpassad regel: hoppa

I Ferm finns inga kommandon som -A, -I, -C, -R eller -D, eftersom allt är skrivet i en konfigurationsfil, händer samma sak med kommandona för att lägga till en ny sträng, byta namn på den eller ta bort den, nu försvinner här helt. Andra funktioner är att ferm tillåter dig att ärva olika regler som ska användas inom andra regler, häckande i konfigurationsfilen.

När vi ungefär vet hur syntaxen är, kommer vi att se några exempel som jämför den med iptables, i dem alla kommer vi att arbeta med "filter" -tabellen i "INPUT" -kedjan.

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

I ferm skulle detta skrivas enligt följande (lägga till policyn för OUTPUT och FORWARD -kedjan från filtertabellen):

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

Ferm låter oss definiera samma regler i INPUT och OUTPUT enkelt och snabbt, utan att vi behöver upprepa reglerna om och om igen. Låt oss till exempel föreställa oss att nu vill vi acceptera TCP -protokollet både i INPUT -kedjan och i OUTPUT -kedjan, detta i iptables skulle vara följande:

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

Med Ferm är det så enkelt som att göra följande:

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

Som du kan se är det mycket snabbare och enklare att tillämpa samma regel på både INPUT och OUTPUT.

Denna brandvägg innehåller också mycket intressanta funktioner, till exempel kan vi kontrollera om en variabel eller funktion är definierad, vi kan kontrollera om två värden är lika eller olika, neka ett booleskt värde, lösa domäner direkt från Ferm, sammanfoga parametrar och en lång lista över funktioner.

Ferm låter dig också "ladda" iptables -modulerna för att använda dem och konfigurera brandväggen på ett avancerat sätt, till exempel har vi följande:

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

Som vi kan lägga i hela konfigurationsfilen.

För att tillämpa reglerna som infördes i Ferm måste vi utföra följande kommando:

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

Importera iptables -regler till Ferm

Ferm låter oss enkelt och snabbt importera iptables -reglerna som vi för närvarande har kört, i en Ferm -fil för senare ändring. För att kunna göra detta måste vi helt enkelt ladda iptables -reglerna i minnet (används för närvarande) och utföra detta kommando:

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

När vi kör det kan vi se iptables -reglerna direkt i Ferms syntax.

Om du vill omvandla iptables -reglerna som du har i en textfil till Ferm kan du utföra följande kommando:

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

Som du har sett är ferm en fantastisk iptables frontend som gör att vi kan konfigurera den på ett avancerat sätt, utan att behöva lära oss syntaxen för iptables och organisera reglerna korrekt i en konfigurationsfil. Enligt vår uppfattning anser vi dock att konfigurering av ett bash -skript med alla iptables -regler korrekt inte kräver någon frontend eller ytterligare programvara, även om det kan vara användbart för vissa människor. Vi måste komma ihåg att Nftables redan innehåller möjligheten att konfigurera reglerna direkt i en konfigurationsfil, och inte bara interaktivt genom konsolkommandon.