Brandvägg på Linux spelar en viktig roll för att säkra ett datorsystem. Det fungerar som en barriär, kontrollerar och filtrerar nätverkstrafik för att skydda systemet från obehörig åtkomst, attacker och andra hot. Utan en korrekt konfigurerad brandvägg kan servern vara sårbar för olika typer av cyberattacker, vilket leder till allvarliga konsekvenser för datasäkerhet och konfidentialitet.
I den här artikeln kommer vi att titta på två huvudverktyg för att konfigurera Linux-brandväggen: brandvägg och iptables. Vi kommer att göra en jämförande analys av deras egenskaper, funktionalitet och fördelar. Dessutom kommer vi att tillhandahålla detaljerade instruktioner för att ställa in och använda vart och ett av dessa verktyg, samt diskutera bästa praxis för att säkra ditt system med en brandvägg på Linux-plattformen. Alla åtgärder kommer att demonstreras på en virtuell server med root-åtkomst.
Konfigurera brandvägg på Linux
Firewalld (Firewall Daemon) är ett program för att hantera brandväggen i Linux-operativsystem. Det tillhandahåller ett användargränssnitt för att konfigurera brandväggsregler, tillåta eller blockera anslutningar av nätverksapplikationer. Den är förinstallerad som standard i de flesta serverdistributioner. Om Firewalld inte är förinstallerat kan den installeras oberoende av distributionens officiella arkiv.
För Red Hat-system (som RHEL, CentOS, Fedora) utförs installationen med kommandot:
yum install firewalld
För Debian/Ubuntu:
apt-get install firewalld
Efter installationen kan den startas och aktiveras omedelbart med kommandot:
systemctl start firewalld
Därefter måste du lägga till tjänsten vid start:
systemctl enable firewalld
Vid det här laget rekommenderar vi att du inaktiverar ufw, eftersom samtidig användning av detta verktyg med brandvägg eller iptables inte rekommenderas. Kontrollera status:
systemctl status ufw
För att stoppa det, skriv in kommandot:
systemctl stop ufw
För fullständig avaktivering:
ufw disable
Efter dessa åtgärder kan du fortsätta att konfigurera brandväggen.
Först är det nödvändigt att definiera förtroendezoner. Firewalld använder konceptet med zoner för att bestämma nivån av förtroende för nätverksgränssnitt. Varje gränssnitt tilldelas en zon och brandväggsregler tillämpas baserat på zonen. Listan över alla tillgängliga zoner öppnas med kommandot:
firewall-cmd --get-zones
Vanligtvis används 4 huvudzoner:
- offentliga: Den här zonen är för nätverk som du anser vara osäkra;
- Privat: Gäller hemnätverk eller andra betrodda nätverksanslutningar;
- Inre: Används för interna nätverk, till exempel inom en organisation eller företagsnätverk;
- DMZ: Denna zon är där servrar vanligtvis placeras som bör vara tillgängliga från internet.
Detta är dock bara ett exempel. Du kan lägga till din egen zon med kommandot:
firewall-cmd --permanent --new-zone=nameyourzone
Efter tillägg krävs en omladdning:
firewall-cmd --reload
För att radera en zon används en liknande metod
firewall-cmd --permanent --delete-zone=nameyourzone
Efter att ha definierat zoner är det nödvändigt att tillåta trafik för de tjänster och hamnar som behövs. För att tillåta en viss tjänst, använd kommandot:
firewall-cmd --zone=public --add-service=name
Var namn är tjänstens namn. Till exempel, för att tillåta trafik för Apache:
firewall-cmd --zone=public --add-service=http
För att definiera tillåtna portar, använd kommandot:
firewall-cmd --zone=public --add-port=number/protocol
Till exempel skulle standard 22-porten för SSH se ut så här:
firewall-cmd --zone=public --add-port=22/tcp
I detta skede är huvudreglerna redan skapade. Bestäm sedan hur trafiken kommer att behandlas beroende på källa, destination, port och andra kriterier. För att lägga till en regel (med hjälp av allmän zon som ett exempel):
firewall-cmd --zone=public rule
Till exempel, för att tillåta inkommande trafik från valfri källa till port 80 (HTTP):
firewall-cmd --zone=public --add-port=80/tcp --permanent
Så här tar du bort en regel:
firewall-cmd --permanent --remove-rule=rule_specification
Var härska är typen av regel (t.ex. hamn, tjänst, rik-regel, etc.), och regelspecifikation är specifikationen av själva regeln.
Efter att ha gjort ändringar i Firewalld-konfigurationen är det nödvändigt att spara och tillämpa dem. För att spara ändringar, använd kommandot:
firewall-cmd --runtime-to-permanent
Så här tillämpar du ändringar:
firewall-cmd --reload
När du har slutfört installationen kan du verifiera de valda parametrarna genom att öppna listan med alla regler:
firewall-cmd --list-all
Om några problem uppstår, kontrollera Firewalld-loggarna med kommandot:
journalctl -u firewalld
Obs: Vi har bara täckt den allmänna algoritmen för att ställa in anslutningen. Verktyget har omfattande funktionalitet. För fullständig information om alla tillgängliga alternativ kan du använda officiell dokumentation eller öppen hjälp:
firewall-cmd --help
Konfigurera iptables på Linux
Till skillnad från Firewalld är iptables ett äldre men fortfarande allmänt använt verktyg i Linux för att hantera brandväggen. Det ger en mer direkt och flexibel inställning till paketfiltreringsregler på Linux-kärnnivå. Men iptables kräver mer avancerad kunskap och erfarenhet jämfört med Firewalld, vilket gör det mindre tillgängligt för nybörjare. Kontrollera den förinstallerade versionen av verktyget med kommandot:
iptables -V
Om verktyget inte är installerat måste det installeras. Kommandot för installation på Ubuntu, Debian:
apt install iptables
För Red Hat-system (t.ex. CentOS, Fedora):
yum install iptables
Kommandot för aktivering efter installation:
systemctl start iptables
För att lägga till i start, kör:
systemctl enable iptables
Innan du startar iptables-konfigurationen är det viktigt att förstå hur det fungerar. Detta underlättas av programmets syntax. Det ser ut som följer:
iptables -t table action chain additional_parameters
Låt oss gräva djupare in i varje objekt.
Iptables har fyra huvudtabeller: filter, nat, mangle och raw. Var och en är designad för att bearbeta vissa typer av paket och har sina egna reglerkedjor:
- filtrera: Detta är den mest använda tabellen som innehåller paketfiltreringsregler. Den används för att fatta beslut om huruvida paket ska tillåtas eller nekas.
- nat: Den här tabellen används för att ändra nätverksadresser och portar i paket. Det används ofta för att ställa in maskerad (NAT).
- mangrove: I den här tabellen kan du ändra pakethuvuden. Det används för specialiserade paketoperationer, såsom märkning.
- obehandlad: Den här tabellen används för att konfigurera regler som gäller innan de går igenom anslutningsspårningssystemet. Det används vanligtvis för att ställa in regler som inte bör ändras av spårningssystemet, till exempel att släppa paket från vissa adresser.
Varje bord innehåller en uppsättning kedjor. Kedjor är en sekvens av regler som kontrolleras sekventiellt. Det finns tre fördefinierade kedjor:
- INPUT (inkommande). Reglerna i den här kedjan bestämmer vad som ska göras med inkommande paket.
- OUTPUT (utgående). Denna kedja gäller alla paket som din dator skickar till andra enheter eller datorer i nätverket.
- FORWARD (vidarebefordra). Reglerna i denna kedja anger vad som ska göras med vidarebefordrade paket.
Slutligen har varje kedja någon handling (mål). I praktiken används 5 huvudåtgärder:
- ACCEPTERA: Låt paketet passera genom brandväggen.
- FALLA: Avvisa paketet och kassera det utan något svar.
- AVVISA: Avvisa paketet och skicka ett ICMP-felmeddelande till avsändaren.
- LOGGA: Logga paketet i systemloggen och utför en annan åtgärd (t.ex. ACCEPTERA eller SLÄPP).
- ÅNGERRÄTT & RETURER: Sluta kontrollera reglerna i den aktuella kedjan och återgå till anropskedjan (om tillämpligt).
För att starta installationen, öppna listan över befintliga regler med kommandot:
iptables -L
Som en guide för att konfigurera Iptables, låt oss titta på praktiska exempel på de vanligaste kommandona. För enkelhetens skull delar vi upp exemplen i 3 grupper, beroende på den specifika kedjan.
Kedja INPUT:
- Tillåt inkommande trafik via TCP-protokoll på port 80:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. Tillåt inkommande trafik via UDP-protokoll på port 22:
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. Blockera inkommande trafik från en specifik IP-adress:
iptables -A INPUT -s 192.168.1.100 -j DROP
Kedja PRODUKTION:
- Tillåt utgående trafik via TCP-protokoll på port 443:
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
2. Tillåt utgående trafik via UDP-protokoll på port 80:
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT
3. Blockera utgående trafik till en specifik port (till exempel 21):
iptables -A OUTPUT -p tcp --dport 21 -j DROP
Kedja FRAM:
- Blockera vidarebefordrad trafik från ett specifikt intervall av IP-adresser:
iptables -A FORWARD -s 172.16.0.0/24 -j DROP
2. Blockera vidarebefordran av paket från ett specifikt nätverksgränssnitt:
iptables -A FORWARD -i eth1 -j DROP
3. Begränsa antalet samtidiga anslutningar för en specifik port (i det här exemplet 10 anslutningar per minut på port 80):
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
Som du kan se används ett extra argument (kommando) i varje enskilt fall. För att få en fullständig lista över möjliga argument och övergripande stöd för verktygets funktionalitet anger du:
iptables -h
För att säkerställa att inställningarna är korrekta, skriv kommandot igen för att se listan med regler:
iptables -L
För att ta bort en specifik regel, använd kommandot:
iptables -D chain rule_number
Om du till exempel vill ta bort regel nummer 1 från INPUT-kedjan kommer kommandot att se ut så här:
iptables -D INPUT 1
Så här tar du bort alla regler med ett kommando:
iptables -F
Viktig anmärkning: iptables-regler sparas inte automatiskt efter omstart av systemet eller tjänsten. För att spara reglerna måste de läggas till i en konfigurationsfil och återställas efter omstart. De iptables-spara och iptables-restore verktyg kan hjälpa till med detta. För att spara reglerna, skriv in kommandot:
iptables-save > /etc/iptables/rules.v4
Detta sparar de aktuella iptables-reglerna i filen rules.v4. För att återställa efter omstart anger du:
iptables-restore < /etc/iptables/rules.v4
Detta kommando återställer reglerna från filen rules.v4.
Slutsats
Att konfigurera brandvägg på Linux med brandvägg eller iptables är en viktig aspekt för att säkerställa serversäkerhet. Båda verktygen erbjuder pålitliga sätt att hantera nätverkstrafik och skydda systemet från obehörig åtkomst och cyberattacker. Valet mellan brandvägg och iptables beror på användarens specifika behov och preferenser, med tanke på deras olika funktionalitet och styrkor.