Hva er Linux iptables-baserte ferm-brannmuren og hvordan konfigureres den

In Linux-baserte operativsystemer, brannmur par excellence du bruker er iptables, men det er også mulig at du bruker nftables, som er utviklingen av iptables, mye mer effektiv og med en mye mer "menneskelig" syntaks, men det er ikke all verden som fortsatt bruker nftables. I dag skal vi forklare hvordan du konfigurerer en brannmur på Linux -servere ved hjelp av Ferm (For Easy Rule Making), en iptables frontend som lar oss legge til regler i brannmuren veldig enkelt, raskt og enkelt, uten å måtte lære syntaksen til iptables.

Hva er Ferm -brannmuren og hva er den til?

Hva er Linux iptables-baserte ferm-brannmuren

Ferm (For Easy Rule Making) er en frontend av iptables, dette betyr at den under faktisk bruker iptables for å tillate eller nekte trafikk, men det lar oss konfigurere brannmuren på en svært avansert måte uten å måtte lære syntaksen til iptables eller lage forskjellige skript ved hjelp av iptables, men vi vil gjøre det direkte med Ferm. Dette verktøyet er i stand til å lese reglene fra en konfigurasjonsfil som vi skal definere, og senere vil det "kalle" iptables for å legge til de forskjellige reglene en etter en, og sette dem inn i sanntid i kjernen.

Ferms mål er å gi system- og nettverksadministratorer en enkel måte å lese og skrive alle brannmurreglene, noe som reduserer oppgaven med å måtte skrive den ene regelen etter den andre, slik at vi kan bruke mer tid på å utvikle og optimalisere reglene, for å gjøre dem som effektiv som mulig. Ferm bruker et veldig enkelt, men ganske avansert konfigurasjonsspråk, vi kan bruke variabler, funksjoner, matriser og til og med blokker. Andre veldig interessante alternativer til Ferm er at det vil tillate oss å inkludere andre konfigurasjonsfiler i en katalog, og det vil ta seg av å importere og anvende alle disse reglene automatisk.

Ferm er fremdeles en iptables frontend, derfor vil vi alltid kunne redigere og konfigurere brannmuren direkte ved hjelp av iptables -kommandoene når vi bruker dette verktøyet. Faktisk er Ferm i stand til å importere gjeldende iptables -regler og automatisk sette dem i konfigurasjonsfilen for senere å redigere eller utvide dem.

En av de mest populære iptables frontend er ufw, mye brukt av system- og nettverksadministratorer for enkelt og raskt å konfigurere brannmurene sine.

Installasjon og igangkjøring av Ferm

Ferm-installasjonen er veldig enkel, den er for tiden i de fleste lagre av de forskjellige Linux-baserte distribusjonene, i vårt tilfelle har vi brukt den nyeste versjonen av Debian til å utføre alle testene vi skal lære deg. For å installere dette programmet, som er en iptables frontend, må vi utføre følgende kommando:

sudo apt install ferm

Når vi har utført denne kommandoen, bør vi se noe sånt som dette, hvor vi vil bli vist de ekstra pakkene vi må installere, i utgangspunktet må vi installere Perl for å kunne kjøre dette programmet riktig.

Ferm -installasjonsprogrammet vil fortelle oss at det vil laste inn brannmurreglene under oppstart fra /etc/ferm/ferm.conf -banen, det vil si at alt i denne filen automatisk blir overført til iptables for å tillate eller nekte trafikknettverk. Standardkonfigurasjonen for denne brannmuren lar oss få ekstern tilgang til SSH via port 22, hvis du ikke har SSH konfigurert på denne porten, må du redigere standardverdiene og klikke på "nei" slik at den ikke starter , ellers mister du tilkoblingen.

Når vi har valgt ja eller nei, vil apt fullføre installasjonen av alle tilleggspakkene vi trenger for å få dette programmet til å fungere.

Når den er installert, kan vi gå til / etc / ferm / banen, og vi vil se både konfigurasjonsfilen kalt ferm.conf, samt en katalog som heter ferm.d hvor vi kan inkorporere våre ferm -konfigurasjonsfiler for å importere dem, dette tillater 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 hjelpe oss med å håndtere syntaksen til denne iptables frontend, derfor vil det være ganske nyttig. Hvis vi ser på syntaksen, vil vi se at den ligner på nftables, men den er basert på iptables.

I det følgende skjermbildet kan du se hvordan domenene der det skal konfigureres (iptables eller ip6tables), tabellene og kjedene, samt reglene vi har innenfor de forskjellige kjedene, deklareres.

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

  • I INPUT -kjeden er policyen DROP, localhost -trafikk er tillatt, ICMP -trafikk og tilkoblingen er tillatt via IPsec og også via SSH med standardportene. Når det gjelder statusen for tilkoblingene, faller ugyldige tilkoblinger, og de etablerte og relaterte er tillatt, men de nye er ikke tillatt, bortsett fra de spesifikt definerte.

I OUTPUT -kjeden er det definert at politikken er å akseptere alt, og tilstanden til forbindelsen tillater de etablerte og relaterte. I FORWARD -kjeden er trafikk nektet av retningslinjer, ugyldige tilkoblinger er spesielt blokkert, men etablert og relaterte tilkoblinger er tillatt.

Deretter kan du se denne konfigurasjonsfilen i tekstformat:

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

# tilkoblingssporing
mod state state UGyldig DROP;
mod state state (ESTABLISHED RELATED) Aksepterer;

# tillat lokal pakke
grensesnitt hva Aksepterer;

# svare på ping
proto icmp GODKJENNE;

# tillat IPsec
proto udp dport 500 GODTAR;
@if @eq ($ DOMENE, ip) {
proto (esp ah) Aksepterer;
} @else {
proto (esp) Aksepterer;
}

# tillat SSH -tilkoblinger
proto tcp dport ssh Aksepterer;
}
kjedeutgang {
policy Aksept;

# tilkoblingssporing
#mod state state UGyldig DROP;
mod state state (ESTABLISHED RELATED) Aksepterer;
}
kjede FREM {
politikk DROP;

# tilkoblingssporing
mod state state UGyldig DROP;
mod state state (ESTABLISHED RELATED) Aksepterer;
}
}
}

@inkludere ferm.d /;

Den mest interessante delen er “@include ferm.d /” som vi har i den siste delen, dette betyr at den vil importere alle konfigurasjonsfilene vi har i den aktuelle katalogen.

Denne Ferm -brannmuren nedenfor bruker iptables, derfor hvis vi utfører følgende kommando:

iptables -L

Vi kan se den nåværende tilstanden til iptables med alle reglene den har innarbeidet i brannmuren:

Når vi har sett standard Ferm -konfigurasjon, kommer vi til å se forskjellige konfigurasjonseksempler som vi kan gjøre.

Ferm grunnleggende konfigurasjon

Ferms syntaks er veldig enkel og fleksibel, men vi må lære oss den for å lage en riktig konfigurasjon. Vi anbefaler deg få tilgang til den offisielle Ferm -manualen hvor du finner alle detaljer om syntaksen som skal brukes og hvordan de forskjellige reglene skal deklareres i konfigurasjonsfilen, takket være denne offisielle håndboken kan vi konfigurere denne brannmuren uten mange problemer.

Det første du må huske på er at alle Ferm-regler begynner og slutter med seler, og reglene slutter med et semikolon, derfor er det en velkjent syntaks i programmering. Andre interessante funksjoner er at linjeskift ignoreres, og du kan sette kommentarer hvor som helst ved å sette "#" til slutten av linjen.

Når det gjelder syntaksen til iptables og ferm, har vi noen forskjeller:

  • For å definere inngangsgrensesnitt: grensesnitt (hvis)
  • For å definere exit -grensesnitt: ytre (av)
  • For å definere et opphav: saddr
  • For å definere en destinasjon: daddr
  • For å definere en protokoll: proto
  • Opprinnelseshavn: sport
  • Destinasjonsport: dport
  • Last inn en modul: mod
  • Gå til en tilpasset regel: hopp

I Ferm er det ingen kommandoer som -A, -I, -C, -R eller -D, siden alt er skrevet i en konfigurasjonsfil, skjer det samme med kommandoene for å legge til en ny streng, gi den nytt navn eller slette den, nå forsvinner her helt. Andre funksjoner er at ferm lar deg arve forskjellige regler som skal brukes innenfor andre regler, og hekker i konfigurasjonsfilen.

Når vi omtrent vet hvordan syntaksen er, kommer vi til å se noen eksempler som sammenligner den med iptables, i dem alle vil vi jobbe med «filter» -tabellen i «INPUT» -kjeden.

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

I ferm vil dette bli skrevet som følger (legge til policyen for OUTPUT og FORWARD -kjeden fra filtertabellen):

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

Ferm lar oss definere de samme reglene i INPUT og OUTPUT enkelt og raskt, uten at det er nødvendig å gjenta reglene om og om igjen. La oss for eksempel forestille oss at nå vil vi godta TCP -protokollen både i INPUT -kjeden og i OUTPUT -kjeden, dette i iptables vil 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 så enkelt som å gjøre følgende:

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

Som du kan se, er det mye raskere og enklere å bruke den samme regelen på både INPUT og OUTPUT.

Denne brannmuren inneholder også veldig interessante funksjoner, for eksempel kan vi sjekke om en variabel eller funksjon er definert, vi kan sjekke om to verdier er like eller forskjellige, nekte en boolsk verdi, løse domener direkte fra Ferm, sammenkoble parametere og en lang liste over funksjoner.

Ferm lar deg også "laste" iptables -modulene for å bruke dem, og konfigurere brannmuren på en avansert måte, for eksempel har vi følgende:

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

Det kan vi sette gjennom hele konfigurasjonsfilen.

For å anvende reglene som ble introdusert i Ferm, må vi utføre følgende kommando:

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

Importer iptables -regler til Ferm

Ferm lar oss enkelt og raskt importere iptables -reglene som vi har i utførelsen, i en Ferm -fil for senere endring. For å kunne gjøre dette må vi ganske enkelt ha iptables -reglene lastet inn i minnet (for tiden i bruk) og utføre denne kommandoen:

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

Når vi kjører den, kan vi se iptables -reglene direkte i Ferms syntaks.

Hvis du vil transformere iptables -reglene du har i en tekstfil til Ferm, kan du utføre følgende kommando:

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

Som du har sett, er ferm en flott iptables frontend som lar oss konfigurere den på en avansert måte, uten å måtte lære syntaksen til iptables og organisere reglene riktig i en konfigurasjonsfil. Etter vår mening mener vi imidlertid at det å konfigurere et bash -script med alle iptables -reglene ikke krever noen frontend eller ekstra programvare, selv om det kan være nyttig for noen mennesker. Vi må huske at Nftables allerede inneholder muligheten til å konfigurere reglene direkte i en konfigurasjonsfil, og ikke bare interaktivt gjennom konsollkommandoer.