Att ha en fungerande brandvägg på servern är ett viktigt steg i säkerhetsarbetet. I den här guiden kommer vi att skapa en grundläggande brandvägg som du sedan kan bygga vidare på med egna regler. Guiden utgår från en nyinstallerad Cloud VPS med Debian 9. Om du vill sätta upp en brandvägg i Debian 11 har vi en guide för det här: Sätt upp en brandvägg i Debian 11 med nftables
I den här guiden visar vi dig hur du konfigurerar en brandvägg med iptables
, som vanligtvis ingår som standard i äldre Debian-distributioner.
För att komma igång behöver du installera paketen iptables-persistent
och netfilter-persistent
om du inte gjort det redan. Det gör det möjligt att spara våra regler och applicera dem automatiskt vid uppstart.
Börja med att uppdatera paketlistorna:
root@host:~#: apt update
Installera iptables
och netfilter-persistent
med följande kommando:
root@host:~#: apt install netfilter-persistent iptables-persistent
Under installationen kommer du att tillfrågas om du vill spara de genererade reglerna. Välj “yes” här. Vi kommer att redigera reglerna inom kort.
För att komma igång så snabbt som möjligt kommer vi att kopiera och klistra in färdiga brandväggsregler. Senare i guiden visar vi dig hur du lägger till nya regler.
För att lägga till brandväggsreglerna kommer vi att redigera filerna /etc/iptables/rules.v4
och /etc/iptables/rules.v6
för IPv4 respektive IPv6.
Öppna filen rules.v4
i din texteditor (använd sudo-rättigheter om du inte är root)
root@host:~#: nano /etc/iptables/rules.v4
Filen som öppnas innehåller något liknande det här:
# Generated by iptables-save v1.6.0 on Fri Oct 26 12:20:01 2018
*raw
:PREROUTING ACCEPT [446:35987]
:OUTPUT ACCEPT [318:52605]
COMMIT
# Completed on Fri Oct 26 12:20:01 2018
...
Ersätt detta med följande konfiguration. Glöm inte att lägga till din servers IP-adress där det står <SERVERNS IPv4-ADRESS>:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
#default
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT -s <SERVERNS IPv4-ADRESS>/32 -j ACCEPT
-A OUTPUT -d <SERVERNS IPv4-ADRESS>/32 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
# TRACEROUTE
-A INPUT -p udp -m udp --dport 33434:33523 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 33434:33523 -j ACCEPT
#DNS OUT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
#NTP OUT (time sync)
-A OUTPUT -p udp -m udp --dport 123 -j ACCEPT
# SSH IN
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
# allow http(s) in
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# allow http()s out
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -j DROP
-A OUTPUT -p tcp -j REJECT --reject-with tcp-reset
COMMIT
Spara och stäng filen.
Starta om netfilter-persistent
för att ladda in konfigurationen:
root@host:~#: systemctl restart netfilter-persistent
Kontrollera att iptables har läst in konfigurationen:
root@host:~# iptables -L
Du ska få ett resultat liknande det här:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- <SERVERNS IPv4-ADRESS>-static.glesys.net anywhere
ACCEPT udp -- anywhere anywhere udp dpts:33434:33523
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
DROP all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere <SERVERNS IPv4-ADRESS>-static.glesys.net
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp dpts:33434:33523
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:ntp
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
REJECT tcp -- anywhere anywhere reject-with tcp-reset
Vi har nu sparat reglerna i filen /etc/iptables/rules.v4
som låter iptables använda dem.
Med hjälp av reglerna ovan tillåter vi inkommande trafik för traceroute
, ICMP (PING)
, SSH
, HTTP
och HTTPS
samt utgående trafik för traceroute
, HTTP
och HTTPS
.
Med hjälp av iptables-persistent
och netfilter-persistent
kommer inställningarna att laddas in varje gång du startar om servern.
Har du även en IPv6 adress på din server så lägger du till regler på samma sätt som ovan fast i filen /etc/iptables/rules.v6
. Glöm inte att ersätta <SERVERNS IPv6-ADRESS> med din egen IP-adress.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
#default
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT -s <SERVERNS IPv6-ADRESS>/128 -j ACCEPT
-A OUTPUT -d <SERVERNS IPv6-ADRESS>/128 -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A OUTPUT -p ipv6-icmp -j ACCEPT
# TRACEROUTE
-A INPUT -p udp -m udp --dport 33434:33523 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 33434:33523 -j ACCEPT
#DNS OUT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
#NTP OUT (time sync)
-A OUTPUT -p udp -m udp --dport 123 -j ACCEPT
# SSH IN
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
# allow http(s) in
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# allow http()s out
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -j DROP
-A OUTPUT -p tcp -j REJECT --reject-with tcp-reset
COMMIT
Starta om netfilter-persistent
för att ladda in konfigurationen:
root@host:~#: systemctl restart netfilter-persistent
Du kan lägga till nya regler antingen genom att redigera /etc/iptables/rules.v4
eller lägga in regeln direkt via kommandoraden.
I detta exemplet lägger vi till en regel som tillåter utgående trafik på port 25 (SMTP)
i kommandoraden.
Skriv följande:
root@host:~# iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
Kontrollera att din regel har lagts till genom att skriva följande:
root@host:~# iptables -L
I svaret du får ser du att regeln har lagts till (se sista raden):
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- one.one.one.one anywhere
ACCEPT icmp -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp dpts:33434:33523
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
DROP all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere one.one.one.one
ACCEPT icmp -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp dpts:33434:33523
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:ntp
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
REJECT tcp -- anywhere anywhere reject-with tcp-reset
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
Spara inställningarna för brandväggen genom att köra följande kommando:
root@host:~# iptables-save > /etc/iptables/rules.v4
Vid omstart av servern kommer inställningarna att laddas in från /etc/iptables/rules.v4
.
Genom att följa den här guiden, antingen genom att klistra in dina brandväggsregler direkt i konfigurationsfilen eller manuellt genom kommandon, har du en bra grundläggande brandväggskonfiguration. Du kommer att behöva lägga till individuella regler för varje tjänst du vill ska ha åtkomst.
Observera: När du arbetar med brandväggar, var försiktig så du inte låser ute dig själv från din server genom att blockera SSH-trafik (port 22 som standard). Om du förlorar åtkomst genom inställningar i brandväggen kan du behöva koppla upp dig via konsolen för att ge dig själv tillgång igen. När du är uppkopplad via konsolen kan du ändra dina brandväggsregler att åter ge tillgång via SSH (eller tillåta all trafik). Om dina sparade brandväggsregler tillåter SSH-åtkomst är en annan metod att starta om servern. Se vår guide hur du kommer åt din server via konsolläget.
Kontakta oss gärna för mer information. Vi hjälper dig att komma fram till den bästa lösningen för dina behov.