Zoeken op website

Shorewall - Een firewall op hoog niveau voor Linux-servers


Het opzetten van een firewall in Linux kan erg intimiderend zijn voor een nieuweling, of voor iemand die niet erg bekend is met iptables. Gelukkig is er een zeer eenvoudig te gebruiken oplossing in Shorewall.

In deze uit meerdere delen bestaande tutorial ga ik je op weg helpen met Shorewall en begeleid ik je door enkele meer geavanceerde onderwerpen over dit geweldige firewallsysteem.

Wat is Shorewall?

Shorewall is in wezen een front-end voor iptables, maar het is een front-end voor de opdrachtregelomgeving die verschillende tekstbestanden gebruikt voor de configuratie. Hoewel Shorewall een robuust firewallsysteem is dat kan worden geschaald over zeer grote netwerken die talloze machines bedienen, beginnen we met een basisconfiguratie met twee interfaces en leggen we de basis vast.

Een configuratie met twee interfaces bestaat uit een machine met twee ethernetpoorten, één die binnenkomt en één die uitgaat naar het lokale netwerk.

Installeer Shorewall Firewall onder Linux

Shorewall kan worden geïnstalleerd met de pakketbeheertools apt en yum.

sudo apt install shorewall    [On Debian-based Sysems]
sudo yum install shorewall    [On RHEL-based Sysems]

Na de installatie moeten we een voorbeeldconfiguratie kopiëren van de map “/usr/share/doc/shorewall” naar de standaardmap van Shorewall “/etc/shorewall“.

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

Als we in deze map kijken, zien we een aantal bestanden en het bestand shorewall.conf.

Shorewall beschouwt het netwerk als een groep verschillende zones, dus het eerste bestand dat we willen bekijken is het bestand “/etc/shorewall/zones”.

sudo nano /etc/shorewall/zones

Hier zien we dat er standaard drie zones zijn gedefinieerd: fw, net en loc. Het is belangrijk op te merken dat Shorewall de firewallmachine zelf als zijn eigen zone behandelt en deze opslaat in een variabele met de naam $fw.

Het bestand “/etc/shorewall/zones” spreekt voor zich. Je hebt de netzone (naar internet gerichte interface), de loc zone (LAN-gerichte interface) en fw, dat is alles.

Deze opstelling levert het volgende op:

  • Het staat alle verbindingsverzoeken toe van de lokale zone (LAN) naar de netzone (Internet).
  • Verwijdert alle verbindingsverzoeken (negert) van de netzone naar de firewall en het LAN.
  • Weigert en registreert alle andere verzoeken.

Het LOG LEVEL-bit zou bekend moeten zijn voor iedereen die ooit heeft gewerkt met Apache, MySQL of een ander aantal andere FOSS-programma's. In dit geval vertellen we Shorewall om het infoniveau van logboekregistratie te gebruiken.

Nu onze zones en ons beleid zijn ingesteld, moeten we onze interfaces configureren. Dit doe je door het bestand “/etc/shorewall/interfaces” te bewerken.

sudo nano /etc/shorewall/interfaces

Hier hebben we onze internetinterface ingesteld als eth0 voor de netzone. Aan onze LAN-kant hebben we de andere interface, eth1, ingesteld op de loc-zone. Pas dit bestand aan zodat het goed bij uw configuratie past.

De verschillende opties die u voor elk van deze interfaces kunt plaatsen zijn uitgebreid en kunnen het beste in detail worden uitgelegd op de manpagina.

man shorewall-interfaces

Een kort overzicht van enkele daarvan is als volgt:

  • nosmurfs – filter pakketten met een broadcastadres als bron.
  • logmartianen – log pakketten met het onmogelijke bronadres.
  • routefilter – kernelroutefiltering voor anti-spoofing.

Nu ons systeem een firewall heeft, zullen we natuurlijk bepaalde verbindingen nodig hebben om te kunnen doen wat we moeten doen. U definieert deze in het regelsbestand op “/etc/shorewall/rules“.

sudo nano /etc/shorewall/rules

Dit bestand ziet er in eerste instantie verwarrend uit, vooral omdat de kolommen elkaar overlappen, maar de kopteksten spreken voor zich. Ten eerste heb je de ACTIE-kolom, waarin wordt beschreven wat je wilt uitvoeren.

Vervolgens heb je een SOURCE header waarin je de zone definieert waar het pakket vandaan komt. Vervolgens heeft u uw DEST of bestemming, wat de zone of IP-adres van de bestemming is. Laten we een voorbeeld gebruiken.

Stel dat u een SSH-server achter uw firewall wilt laten draaien op de machine met het IP-adres 192.168.1.25. U zult niet alleen een poort in uw firewall moeten openen, maar u zult de firewall ook moeten vertellen dat al het verkeer dat op poort 22 komt, naar de machine op moet worden gerouteerd. >192.168.1.25.

Dit staat bekend als Port Forwarding. Het is een veel voorkomende functie op de meeste firewalls/routers. In “/etc/shorewall/rules“ zou je dit kunnen bereiken door een regel als deze toe te voegen:

SSH(DNAT)	net		loc:192.168.1.25

Hierboven hebben we gedefinieerd dat alle SSH-bestemming pakketten die vanuit de netzone naar de firewall komen, moeten worden routeerd (DNAT) naar poort 22 op een machine met adres 192.168.1.25.

Dit wordt Network Address Translation of NAT genoemd. De “D” vertelt Shorewall simpelweg dat dit een NAT is voor een bestemmingsadres.

Om dit te laten werken, moet je NAT-ondersteuning ingeschakeld hebben in je kernel. Als je NAT nodig hebt en het niet hebt, bekijk dan mijn tutorial over het opnieuw compileren van een Debian-kernel.

In het volgende artikel zullen we verschillende Shorewall-configuraties en -opties verkennen. Er zou hier echter voldoende informatie moeten zijn om u voorlopig op weg te helpen. Zoals altijd kunt u de man-pagina's raadplegen voor een diepgaander begrip.