Firewall op Linux speelt een cruciale rol bij het beveiligen van een computersysteem. Het fungeert als een barrière, controleert en filtert netwerkverkeer om het systeem te beschermen tegen ongeautoriseerde toegang, aanvallen en andere bedreigingen. Zonder een goed geconfigureerde firewall kan de server kwetsbaar zijn voor verschillende soorten cyberaanvallen, wat ernstige gevolgen kan hebben voor de beveiliging en vertrouwelijkheid van gegevens.
In dit artikel bekijken we twee belangrijke tools voor het configureren van de Linux-firewall: firewalld en iptables. We vergelijken hun functies, mogelijkheden en voordelen. Daarnaast geven we gedetailleerde instructies voor het instellen en gebruiken van beide tools en bespreken we de beste werkwijzen voor het beveiligen van uw systeem met een firewall op het Linux-platform. Alle stappen worden gedemonstreerd op een virtuele server met root-toegang.
Firewalld configureren op Linux
Firewalld (Firewall Daemon) is een programma voor het beheren van de firewall in Linux-besturingssystemen. Het biedt een gebruikersinterface voor het configureren van firewallregels, waarmee verbindingen van netwerkapplicaties kunnen worden toegestaan of geblokkeerd. Het is standaard voorgeïnstalleerd in de meeste serverdistributies. Als Firewalld niet is voorgeïnstalleerd, kan het onafhankelijk worden geïnstalleerd vanuit de officiële repositories van de distributie.
Voor Red Hat-systemen (zoals RHEL, CentOS, Fedora) wordt de installatie uitgevoerd met de opdracht:
yum install firewalld
Voor Debian/Ubuntu:
apt-get install firewalld
Na de installatie kan het direct gestart en geactiveerd worden met de opdracht:
systemctl start firewalld
Vervolgens moet u de service toevoegen aan het opstarten:
systemctl enable firewalld
Op dit punt raden we aan om ufw uit te schakelen, omdat het gelijktijdige gebruik van deze tool met firewalld of iptables niet wordt aanbevolen. Controleer de status:
systemctl status ufw
Om het te stoppen, voer je de opdracht in:
systemctl stop ufw
Voor volledige deactivering:
ufw disable
Nadat u deze acties hebt uitgevoerd, kunt u doorgaan met het configureren van firewalld.
Ten eerste is het noodzakelijk om trustzones te definiëren. Firewalld gebruikt het concept van zones om het niveau van trust voor netwerkinterfaces te bepalen. Elke interface krijgt één zone toegewezen en firewallregels worden toegepast op basis van de zone. De lijst met alle beschikbare zones wordt geopend met de opdracht:
firewall-cmd --get-zones
Meestal worden er 4 hoofdzones gebruikt:
- Publieke: Deze zone is voor netwerken die u als onveilig beschouwt;
- Privé: Geldt voor thuisnetwerken of andere vertrouwde netwerkverbindingen;
- Intern: Wordt gebruikt voor interne netwerken, zoals die binnen een organisatie of bedrijfsnetwerk;
- DMZ:In deze zone worden doorgaans servers geplaatst die toegankelijk moeten zijn via internet.
Dit is echter slechts een voorbeeld. U kunt uw eigen zone toevoegen met de opdracht:
firewall-cmd --permanent --new-zone=nameyourzone
Na het toevoegen is herladen vereist:
firewall-cmd --reload
Om een zone te verwijderen, wordt een vergelijkbare methode gebruikt
firewall-cmd --permanent --delete-zone=nameyourzone
Na het definiëren van zones is het noodzakelijk om verkeer toe te staan voor de benodigde services en poorten. Om een bepaalde service toe te staan, gebruikt u de opdracht:
firewall-cmd --zone=public --add-service=name
Waarbij 'name' de naam van de service is. Bijvoorbeeld, om verkeer voor Apache toe te staan:
firewall-cmd --zone=public --add-service=http
Om toegestane poorten te definiëren, gebruikt u de opdracht:
firewall-cmd --zone=public --add-port=number/protocol
De standaardpoort 22 voor SSH zou er bijvoorbeeld zo uitzien:
firewall-cmd --zone=public --add-port=22/tcp
In deze fase zijn de belangrijkste regels al vastgesteld. Bepaal vervolgens hoe het verkeer wordt verwerkt op basis van de bron, bestemming, poort en andere criteria. Om een regel toe te voegen (met de openbare zone als voorbeeld):
firewall-cmd --zone=public rule
Om bijvoorbeeld inkomend verkeer van elke bron naar poort 80 (HTTP) toe te staan:
firewall-cmd --zone=public --add-port=80/tcp --permanent
Om een regel te verwijderen:
firewall-cmd --permanent --remove-rule=rule_specification
Waarbij 'rule' het type regel aangeeft (bijv. poort, service, uitgebreide regel, enz.) en 'rule_specification' de specificatie van de regel zelf is.
Nadat u wijzigingen in de Firewalld-configuratie hebt aangebracht, moet u deze opslaan en toepassen. Om wijzigingen op te slaan, gebruikt u de opdracht:
firewall-cmd --runtime-to-permanent
Wijzigingen toepassen:
firewall-cmd --reload
Nadat u de installatie hebt voltooid, kunt u de geselecteerde parameters verifiëren door de lijst met alle regels te openen:
firewall-cmd --list-all
Als er problemen optreden, controleer dan de Firewalld-logboeken met de opdracht:
journalctl -u firewalld
Let op: we hebben hier alleen het algemene algoritme voor het tot stand brengen van de verbinding behandeld. De tool heeft uitgebreidere functionaliteit. Voor volledige informatie over alle beschikbare opties kunt u de officiële documentatie raadplegen of de helpfunctie openen.
firewall-cmd --help
Iptables configureren op Linux
In tegenstelling tot Firewalld is iptables een oudere maar nog steeds veelgebruikte tool in Linux voor het beheren van de firewall. Het biedt een directere en flexibelere benadering van pakketfilterregels op het Linux-kernelniveau. Echter, iptables vereist meer geavanceerde kennis en ervaring vergeleken met Firewalld, waardoor het minder toegankelijk is voor beginners. Controleer de vooraf geïnstalleerde versie van de tool met de opdracht:
iptables -V
Als de tool niet is geïnstalleerd, moet deze worden geïnstalleerd. De opdracht voor installatie op Ubuntu, Debian:
apt install iptables
Voor Red Hat-systemen (bijv. CentOS, Fedora):
yum install iptables
De opdracht voor activering na installatie:
systemctl start iptables
Om toe te voegen aan de opstart, voer je het volgende uit:
systemctl enable iptables
Voordat u begint met de iptables-configuratie, is het belangrijk om te begrijpen hoe het werkt. Dit wordt geholpen door de syntaxis van het programma. Het ziet er als volgt uit:
iptables -t table action chain additional_parameters
Laten we dieper op elk item ingaan.
Iptables heeft vier hoofdtabellen: filter, nat, mangle en raw . Elke tabel is ontworpen voor het verwerken van bepaalde soorten pakketten en heeft zijn eigen reeks regels:
- filter: Dit is de meest gebruikte tabel, met regels voor pakketfiltering. Deze wordt gebruikt om te beslissen of pakketten moeten worden toegestaan of geweigerd.
- nat: Deze tabel wordt gebruikt voor het wijzigen van netwerkadressen en poorten in pakketten. Het wordt vaak gebruikt voor het instellen van masquerading (NAT).
- mangrove: In deze tabel kunt u pakketheaders wijzigen. Het wordt gebruikt voor gespecialiseerde pakketbewerkingen, zoals markeren.
- rauw: Deze tabel wordt gebruikt voor het configureren van regels die van toepassing zijn voordat ze door het connection tracking-systeem gaan. Het wordt doorgaans gebruikt voor het instellen van regels die niet door het tracking-systeem mogen worden gewijzigd, zoals het verwijderen van pakketten van bepaalde adressen.
Elke tabel bevat een set ketens. Ketens zijn een reeks regels die sequentieel worden gecontroleerd. Er zijn drie vooraf gedefinieerde ketens:
- INPUT (inkomend)De regels in deze keten bepalen wat er met binnenkomende pakketten moet gebeuren.
- UITGANG (uitgaand)Deze keten is van toepassing op alle pakketten die uw computer naar andere apparaten of computers in het netwerk verzendt.
- DOORSTUREN (doorsturen)De regels in deze keten specificeren wat er met doorgestuurde pakketten moet gebeuren.
Ten slotte bezit elke keten een actie (doel). In de praktijk worden 5 hoofdacties gebruikt:
- ACCEPTEREN: Laat het pakket door de firewall heen gaan.
- DROP: Het pakket afwijzen en zonder reactie weggooien.
- WEIGEREN: Het pakket afwijzen en de verzender een ICMP-foutbericht sturen.
- LOG: Registreer het pakket in het systeemlogboek en voer een andere actie uit (bijvoorbeeld ACCEPT of DROP).
- RETURN: Stop met het controleren van de regels in de huidige keten en keer terug naar de aanroepende keten (indien van toepassing).
Om de installatie te starten, opent u de lijst met bestaande regels met de opdracht:
iptables -L
Als leidraad voor het configureren van Iptables, laten we eens kijken naar praktische voorbeelden van de meest gebruikte commando's. Voor het gemak verdelen we de voorbeelden in 3 groepen, afhankelijk van de specifieke keten.
Kettinginvoer :
- Sta binnenkomend verkeer toe via het TCP-protocol op poort 80:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. Sta binnenkomend verkeer toe via het UDP-protocol op poort 22:
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. Blokkeer inkomend verkeer van een specifiek IP-adres:
iptables -A INPUT -s 192.168.1.100 -j DROP
Ketting UITVOER :
- Sta uitgaand verkeer toe via het TCP-protocol op poort 443:
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
2. Sta uitgaand verkeer toe via het UDP-protocol op poort 80:
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT
3. Blokkeer uitgaand verkeer naar een specifieke poort (bijvoorbeeld 21):
iptables -A OUTPUT -p tcp --dport 21 -j DROP
Keten VOORWAARTS :
- Blokkeer doorgestuurd verkeer van een specifiek bereik van IP-adressen:
iptables -A FORWARD -s 172.16.0.0/24 -j DROP
2. Blokkeer het doorsturen van pakketten vanaf een specifieke netwerkinterface:
iptables -A FORWARD -i eth1 -j DROP
3. Beperk het aantal gelijktijdige verbindingen voor een specifieke poort (in dit voorbeeld 10 verbindingen per minuut op poort 80):
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
Zoals u kunt zien, wordt in elk afzonderlijk geval een extra argument (opdracht) gebruikt. Om een volledige lijst met mogelijke argumenten en algehele ondersteuning voor de functionaliteit van de tool te krijgen, voert u het volgende in:
iptables -h
Om te controleren of de instellingen correct zijn, voert u de opdracht opnieuw in om de lijst met regels te bekijken:
iptables -L
Om een specifieke regel te verwijderen, gebruikt u de opdracht:
iptables -D chain rule_number
Als u bijvoorbeeld regel nummer 1 uit de INPUT-keten wilt verwijderen, ziet de opdracht er als volgt uit:
iptables -D INPUT 1
Om alle regels met één opdracht te verwijderen:
iptables -F
Belangrijke opmerking : iptables-regels worden niet automatisch opgeslagen na het herstarten van het systeem of de service. Om de regels op te slaan, moeten ze worden toegevoegd aan een configuratiebestand en na een herstart worden hersteld. De hulpprogramma's iptables-save en iptables-restore kunnen hierbij helpen. Om de regels op te slaan, voert u de volgende opdracht in:
iptables-save > /etc/iptables/rules.v4
Hiermee worden de huidige iptables-regels opgeslagen in het bestand rules.v4. Om te herstellen na het opnieuw opstarten, voert u het volgende in:
iptables-restore < /etc/iptables/rules.v4
Met deze opdracht worden de regels uit het bestand rules.v4 hersteld.
Conclusie
Firewall configureren op Linux met firewalld of iptables is een belangrijk aspect van het waarborgen van serverbeveiliging. Beide tools bieden betrouwbare middelen om netwerkverkeer te beheren en het systeem te beschermen tegen ongeautoriseerde toegang en cyberaanvallen. De keuze tussen firewalld en iptables hangt af van de specifieke behoeften en voorkeuren van de gebruiker, rekening houdend met hun verschillende functionaliteiten en sterktes.