Hvad er Linux iptables-baserede ferm firewall, og hvordan konfigureres den

In Linux-baserede operativsystemer, firewall par excellence, som du bruger, er iptables, men det er dog også muligt, at du bruger nftables, som er udviklingen af ​​iptables, meget mere effektiv og med en meget mere "menneskelig" syntaks, men ikke alle verden bruger stadig nftables. I dag vil vi forklare, hvordan du konfigurerer en firewall på Linux -servere ved hjælp af Ferm (For Easy Rule Making), en iptables frontend, der giver os mulighed for at tilføje regler til firewallen meget let, hurtigt og enkelt uden at skulle lære syntaksen for iptables.

Hvad er Ferm -firewallen, og hvad er den til?

Hvad er Linux iptables-baserede ferm firewall

Ferm (For Easy Rule Making) er en frontend af iptables, det betyder, at den nedenunder faktisk bruger iptables til at tillade eller afvise trafik, men det giver os mulighed for at konfigurere firewallen på en meget avanceret måde uden at skulle lære syntaksen for iptables eller lave forskellige scripts ved hjælp af iptables, men vi gør det direkte med Ferm. Dette værktøj er i stand til at læse reglerne fra en konfigurationsfil, som vi skal definere, og senere vil det "kalde" iptables for at tilføje de forskellige regler en efter en og indsætte dem i realtid i kernen.

Ferms mål er at give system- og netværksadministratorer en nem måde at læse og skrive alle firewallreglerne på, hvilket reducerer opgaven med at skulle skrive den ene regel efter den anden, så vi kan bruge mere tid på at udvikle og optimere reglerne, til at gøre dem som effektiv som muligt. Ferm bruger et meget enkelt, men ganske avanceret konfigurationssprog, vi kan bruge variabler, funktioner, arrays og endda blokke. Andre meget interessante muligheder for Ferm er, at det giver os mulighed for at inkludere andre konfigurationsfiler i et bibliotek, og det vil sørge for at importere og anvende alle disse regler automatisk.

Ferm er stadig en iptables frontend, og derfor, når vi bruger dette værktøj, vil vi altid være i stand til direkte at redigere og konfigurere firewallen ved hjælp af iptables -kommandoerne. Faktisk er Ferm i stand til at importere de nuværende iptables -regler og automatisk sætte dem i konfigurationsfilen for senere at redigere eller udvide dem.

En af de mest populære iptables frontend er ufw, meget udbredt af system- og netværksadministratorer til nemt og hurtigt at konfigurere deres firewalls.

Installation og idriftsættelse af Ferm

Ferm-installationen er virkelig enkel, den er i øjeblikket i de fleste lagre af de forskellige Linux-baserede distributioner, i vores tilfælde har vi brugt den nyeste version af Debian til at udføre alle de test, vi skal lære dig. For at installere dette program, som er en iptables frontend, skal vi udføre følgende kommando:

sudo apt install ferm

Når vi har udført denne kommando, skulle vi se noget lignende, hvor vi får vist de ekstra pakker, vi skal installere, grundlæggende skal vi installere Perl for at kunne køre dette program korrekt.

Ferm -installationsprogrammet fortæller os, at det vil indlæse firewallreglerne under opstart fra stien /etc/ferm/ferm.conf, det vil sige, at alt i denne fil automatisk overføres til iptables for at tillade eller afvise trafiknetværk. Standardkonfigurationen af ​​denne firewall giver os mulighed for ekstern adgang til SSH via port 22, hvis du ikke har SSH konfigureret på denne port, skal du redigere standardværdierne og klikke på "nej", så den ikke starter , ellers mister du forbindelsen.

Når vi har valgt ja eller nej, vil apt afslutte installationen af ​​alle de ekstra pakker, vi har brug for for at få dette program til at fungere.

Når det er installeret, kan vi gå til / etc / ferm / stien, og vi vil se både konfigurationsfilen kaldet ferm.conf samt et bibliotek kaldet ferm.d, hvor vi kan inkorporere vores ferm -konfigurationsfiler for at importere dem, dette tillader vi har større modularitet.

Ferm kommer allerede som standard med en liste over regler, som vi kan fjerne når som helst, men dette vil hjælpe os med at håndtere syntaksen i denne iptables frontend, derfor vil det være ganske nyttigt. Hvis vi ser på syntaksen, vil vi se, at den ligner nftables, men den er baseret på iptables.

I det følgende skærmbillede kan du se, hvordan domænerne, hvor det skal konfigureres (iptables eller ip6tables), tabellerne og kæderne, samt de regler, vi har inden for de forskellige kæder, erklæres.

Vi kan også se, at vi som standard har flere regler:

  • I INPUT -kæden er politikken DROP, localhost -trafik er tilladt, ICMP -trafik og forbindelsen er tilladt via IPsec og også via SSH med standardporte. Med hensyn til forbindelsernes status FALDES ugyldige forbindelser, og de etablerede og beslægtede er tilladt, men de nye er ikke tilladt, undtagen dem, der er specifikt definerede.

I OUTPUT -kæden er det defineret, at politikken er at acceptere alt, og forbindelsens tilstand tillader dem, der er etableret og beslægtede. I FORWARD -kæden nægtes trafik af politikken, ugyldige forbindelser blokeres specifikt, men etableres og relaterede forbindelser er tilladt.

Dernæst kan du se denne konfigurationsfil i tekstformat:

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

# forbindelsessporing
mod state state UGyldig DROP;
mod tilstand tilstand (ETABLISERET RELATED) ACCEPT;

# tillad lokal pakke
grænseflade hvad ACCEPT;

# svar på ping
proto icmp ACCEPT;

# tillad IPsec
proto udp dport 500 ACCEPTERER;
@if @eq ($ DOMÆNE, ip) {
proto (esp ah) ACCEPTERE;
} @else {
proto (esp) ACCEPTERE;
}

# tillad SSH -forbindelser
proto tcp dport ssh ACCEPTERER;
}
kæde OUTPUT {
politik ACCEPT;

# forbindelsessporing
#mod state state UGyldig DROP;
mod tilstand tilstand (ETABLISERET RELATED) ACCEPT;
}
kæde FREM {
politik DROP;

# forbindelsessporing
mod state state UGyldig DROP;
mod tilstand tilstand (ETABLISERET RELATED) ACCEPT;
}
}
}

@inkludere ferm.d /;

Den mest interessante del er “@include ferm.d /”, som vi har i den sidste del, det betyder, at den vil importere alle de konfigurationsfiler, vi har i det pågældende bibliotek.

Denne Ferm -firewall herunder bruger iptables, derfor hvis vi udfører følgende kommando:

iptables -L

Vi kan se den aktuelle tilstand af iptables med alle de regler, den har indarbejdet i firewallen:

Når vi har set standard Ferm -konfigurationen, vil vi se forskellige konfigurationseksempler, som vi kan gøre.

Ferm grundlæggende konfiguration

Ferms syntaks er meget enkel og fleksibel, men vi skal lære det at lave en korrekt konfiguration. Vi anbefaler, at du få adgang til den officielle Ferm -manual hvor du finder alle detaljer om syntaksen, der skal bruges, og hvordan de forskellige regler skal erklæres i konfigurationsfilen, takket være denne officielle manual kan vi konfigurere denne firewall uden mange problemer.

Den første ting at huske på er, at alle Ferm-regler begynder og slutter med seler, og reglerne slutter med et semikolon, derfor er det en velkendt syntaks i programmering. Andre interessante funktioner er, at linjeskift ignoreres, og du kan placere kommentarer hvor som helst ved at sætte "#" for enden af ​​linjen.

Med hensyn til syntaksen for iptables og ferm har vi nogle forskelle:

  • For at definere input -interface: interface (hvis)
  • For at definere exit -interface: ydre overflade (af)
  • For at definere en oprindelse: saddr
  • For at definere en destination: daddr
  • Sådan defineres en protokol: proto
  • Oprindelseshavn: sport
  • Destinationshavn: dport
  • Indlæs et modul: mod
  • Spring til en brugerdefineret regel: spring

I Ferm er der ingen kommandoer som -A, -I, -C, -R eller -D, da alt er skrevet i en konfigurationsfil, sker det samme med kommandoerne for at tilføje en ny streng, omdøbe den eller slette den, nu forsvinder her helt. Andre funktioner er, at ferm giver dig mulighed for at arve forskellige regler, der skal bruges inden for andre regler, og indlejrer i konfigurationsfilen.

Når vi nogenlunde ved, hvordan syntaksen er, vil vi se nogle eksempler, der sammenligner den med iptables, i dem alle vil vi arbejde på «filter» -tabellen i «INPUT» -kæden.

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

I ferm ville dette blive skrevet som følger (tilføjelse af OUTPUT- og FORWARD -kædernes politik fra filtertabellen):

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

Ferm giver os mulighed for nemt og hurtigt at definere de samme regler i INPUT og OUTPUT, uden at det er nødvendigt at gentage reglerne igen og igen. Lad os f.eks. Forestille os, at nu vil vi acceptere TCP -protokollen både i INPUT -kæden og i OUTPUT -kæden, dette i iptables ville være som følger:

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 er det lige så enkelt som at gøre følgende:

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

Som du kan se, er det meget hurtigere og lettere at anvende den samme regel på både INPUT og OUTPUT.

Denne firewall indeholder også meget interessante funktioner, for eksempel kan vi kontrollere, om en variabel eller funktion er defineret, vi kan kontrollere, om to værdier er ens eller forskellige, benægte en boolsk værdi, løse domæner direkte fra Ferm, sammenkæde parametre og en lang liste over funktioner.

Ferm giver dig også mulighed for at "indlæse" iptables -modulerne for at bruge dem og konfigurere firewallen på en avanceret måde, for eksempel har vi følgende:

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

Det kan vi lægge i hele konfigurationsfilen.

For at anvende de regler, der blev introduceret i Ferm, bliver vi nødt til at udføre følgende kommando:

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

Importer iptables -regler til Ferm

Ferm giver os mulighed for nemt og hurtigt at importere de iptables -regler, som vi i øjeblikket har i udførelse, i en Ferm -fil til senere ændringer. For at kunne gøre dette bliver vi simpelthen nødt til at have iptables -reglerne indlæst i hukommelsen (i øjeblikket i brug) og udføre denne kommando:

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

Når vi kører det, kan vi se iptables -reglerne direkte i Ferms syntaks.

Hvis du vil omdanne de iptables -regler, du har i en tekstfil til Ferm, kan du udføre følgende kommando:

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

Som du har set, er ferm en fantastisk iptables frontend, der giver os mulighed for at konfigurere den på en avanceret måde uden at skulle lære syntaxen for iptables og organisere reglerne korrekt i en konfigurationsfil. Efter vores mening mener vi imidlertid, at konfigurering af et bash -script med alle iptables -reglerne ikke kræver nogen frontend eller yderligere software, selvom det kan være nyttigt for nogle mennesker. Vi skal huske, at Nftables allerede indeholder muligheden for at konfigurere reglerne direkte i en konfigurationsfil og ikke kun interaktivt via konsolkommandoer.