Shorewall - En firewall på højt niveau til konfiguration af Linux-servere


Opsætning af en firewall i Linux kan være meget skræmmende for en nybegynder eller for en person, der ikke er meget fortrolig med iptables. Heldigvis er der en meget let at bruge løsning i Shorewall.

I denne tutorial med flere dele vil jeg komme i gang med Shorewall og lede dig gennem nogle mere avancerede emner med dette fantastiske firewall-system.

Hvad er Shorewall?

Shorewall er i det væsentlige en front-end til iptables, men det er en front-end til et kommandolinjemiljø, der bruger et antal tekstfiler til sin konfiguration. Mens Shorewall er et robust firewall-system, der kan skaleres over meget store netværk, der betjener adskillige maskiner, vil vi starte med en grundlæggende konfiguration med to grænseflader og søm det grundlæggende.

En konfiguration med to grænseflader består af en maskine med to Ethernet-porte, den ene kommer ind og den ene går ud til det lokale netværk.

Installation af Shorewall i Linux

Shorewall kan installeres ved hjælp af apt-get og yum pakkehåndteringsværktøjer.

$ sudo apt-get install shorewall6
$ sudo yum install shorewall6

Efter installationen er vi nødt til at kopiere en prøvekonfiguration fra "/ usr/share/doc/shorewall" -mappen til Shorewalls standardkatalog "/ etc/shorewall".

$ sudo cp /usr/share/doc/shorewall/example/two-interfaces/* /etc/shorewall

Og derefter cd til/etc/shorewall.

$ cd /etc/shorewall

Hvis vi kigger i denne mappe, ser vi en masse filer og shorewall.conf-fil. Shorewall ser netværket som en gruppe af forskellige zoner, så den første fil, vi vil se på, er filen "/ etc/shorewall/zones".

Herinde ser vi, at der er tre zoner defineret som standard: net, loc og alt. Det er vigtigt at bemærke, at Shorewall behandler firewallmaskinen selv som sin egen zone og gemmer den i en variabel kaldet $ FW. Du vil se denne variabel gennem resten af konfigurationsfilerne.

Filen “/ etc/shorewall/zones” er ret selvforklarende. Du har netzonen (internetvendt interface), loczonen (LAN-interface) og alt, hvilket er alt.

Denne opsætning giver op følgende:

  1. Det tillader alle forbindelsesanmodninger fra lokalzonen (LAN) til netzonen (Internet).
  2. Sletter alle forbindelsesanmodninger (ignorerer) fra netzonen til firewall og LAN.
  3. Afviser og logger alle andre anmodninger.

LOG LEVEL-biten skal være kendt for alle, der har foretaget administration med Apache, MySQL eller ethvert andet antal andre FOSS-programmer. I dette tilfælde fortæller vi Shorewall at bruge logningens infoniveau.

Hvis du ønsker at have din firewall til rådighed for dig til at administrere fra dit LAN, kan du tilføje følgende linjer til din “/ etc/shorewall/policy” -fil.

#SOURCE		DEST	POLICY		LOG		LEVEL		LIMIT:BURST
loc			$FW		ACCEPT
$FW			loc		ACCEPT

Nu hvor vores zoner og politik er indstillet, skal vi konfigurere vores grænseflader. Du gør dette ved at redigere filen "/ etc/shorewall/interfaces".

Her har vi indstillet vores internetvendende grænseflade som eth0 til netzonen. På vores LAN-side har vi indstillet den anden grænseflade, eth1, til lokalzonen. Juster denne fil for at udløse din konfiguration korrekt.

De forskellige muligheder, du kan placere for en af disse grænseflader, er omfattende og forklares bedst detaljeret på mandsiden.

$ man shorewall-interfaces

En hurtig nedkørsel af nogle af dem er som følger:

  1. nosmurfs - filtrer pakker med udsendelsesadresse som kilde.
  2. logmartians - logpakker med umulig kildeadresse.
  3. rutefilter - kernerutefiltrering for anti-spoofing.

Nu hvor vores system er firewalled, skal vi naturligvis have visse forbindelser, der skal igennem for at få gjort det, vi skal gøre. Du definerer disse i reglerfilen på “/ etc/shorewall/rules“.

Denne fil ser forvirrende ud i starten, hovedsageligt fordi kolonnerne overlapper hinanden, men overskrifterne er ret selvforklarende. For det første har du kolonnen HANDLING, der beskriver, hvad du vil udføre.

Dernæst har du et SOURCE-overskrift, hvor du definerer den zone, hvor pakken stammer fra. Derefter har du din DEST eller destination, som er destinationens zone eller IP-adresse. Lad os bruge et eksempel.

Antag, at du vil køre en SSH-server bag din firewall på maskinen med IP-adressen 192.168.1.25. Ikke alene bliver du nødt til at åbne en port i din firewall, men du bliver nødt til at fortælle firewallen, at enhver trafik, der kommer på port 22, skal dirigeres til maskinen kl. 192.168.1.25.

Dette er kendt som Port Forwarding. Det er et almindeligt træk på de fleste firewall/routere. I “/ etc/shorewall/rules“ vil du opnå dette ved at tilføje en linje som denne:

SSH(DNAT)	net		loc:192.168.1.25

Ovenfor har vi defineret, at alle SSH-bestemte pakker, der kommer fra netzonen til firewallen, skal dirigeres (DNAT) til port 22 på maskinen med adresse 192.168.1.25.

Dette kaldes Network Address Translation eller NAT. "D" fortæller simpelthen Shorewall, at dette er en NAT til en destinationsadresse.

For at dette skal fungere, skal du have NAT-understøttelse aktiveret i din kerne. Hvis du har brug for NAT og ikke har det, kan du se min vejledning om kompilering af en Debian-kerne.

Reference Links

Shorewall hjemmeside

I den næste artikel vil vi gå gennem nogle mere avancerede emner, men der skal være masser her at komme i gang med nu. Som altid skal du kigge på mandsiderne for at få en mere dybtgående forståelse.