[GUIDE] Iptables för din VPS

Almänna diskussioner, tips m.m. om virtualisering
Stefan
Inlägg: 179
Blev medlem: 25 jul 2007, 15:03

[GUIDE] Iptables för din VPS

Inläggav Stefan » 31 jul 2007, 11:21

En guide över hur du skapar en brandvägg för din VPS med Iptables.

1. förberedelser

Det första som måste göras är att ta reda på om iptables är installerat redan, detta görs enklast genom att skriva:

Kod: Markera allt

whereis iptables


får du då något liknande detta så har du det installerat:

Kod: Markera allt

@firewall:~$ whereis iptables
iptables: /sbin/iptables /lib/iptables /usr/share/man/man8/iptables.8.gz
beh

Dock, får du fram som det visas här nedan så måste du installera paketet först, detta görs enklast med den pakethanterare som kommer med din valda dist. (apt-get, emerge, yum etc..)

Kod: Markera allt

@firewall:~$ whereis iptables
iptables:


2. Skapandet av iptables reglerna

Denna guide kommer att visa er hur man enkelt skapar nya regler och ändrar de redan existerande, dock kommer den inte att gå in på djupet över hur iptables är strukturerat och uppbyggt. I alla fall, dags att börja. Det första vi gör är att skapa en text fil i t.ex. /usr/locacl/scripts/

Kod: Markera allt

mkdir /usr/local/scripts
nano -w /usr/local/scripts/fw


OBS finns inte nano så går denna att installera genom er valda pakethanterare

Nu när texteditorn har öppnat filen fw så är det bara att lägga in reglerna i denna, här är ett generellt skript som är bra att ha som grund,
kopiera in detta i nano:

Kod: Markera allt

*mangle
:PREROUTING ACCEPT [444:43563]
:INPUT ACCEPT [444:43563]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [402:144198]
:POSTROUTING ACCEPT [402:144198]
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
COMMIT

*filter
:INPUT DROP [1:242]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:LOG_DROP - [0:0]
:LOG_ACCEPT - [0:0]
:icmp_packets - [0:0]

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 43 -j ACCEPT
-A INPUT -p udp -m udp --dport 43 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -s 127.0.0.1 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -j DROP

-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 23 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 43 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 43 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A OUTPUT -d 127.0.0.1 -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -j DROP
COMMIT


För att förstå lite bättre så kommer jag nu bryta ner scriptet i en del mindre sektioner så att det blir lättare att se de olika delarna, först ut är mangle: Denna del slänger alla pakettyper som inte har tillträde in på servern, vilket gör din server svårare att portskanna.

Kod: Markera allt

*mangle
:PREROUTING ACCEPT [444:43563]
:INPUT ACCEPT [444:43563]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [402:144198]
:POSTROUTING ACCEPT [402:144198]
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
COMMIT


Nästa är Filter: Här lägger vi till grundreglerna som i detta fall är att kasta allt. För att i senare skede öppna bara de specifika portar vi vill ha öppna.

Kod: Markera allt

*filter
:INPUT DROP [1:242]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:LOG_DROP - [0:0]
:LOG_ACCEPT - [0:0]
:icmp_packets - [0:0]


Vilket vi gör nu :) Här skapar vi tillträdesregler för alla inkommande förfrågningar (-A INPUT). Detta generella skript ger tillträde för ftp (20,21), http (80), ssh (22) med flera... Jag kommer inte att lista alla portarna här (då det finns en hel del...) utan låter er söka efter det på egen hand, ett bra sätt är google. Editera bara textfilen efter eget tycke och behov.
OBS! glöm inte att specificera TCP eller UDP.

Kod: Markera allt

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 43 -j ACCEPT
-A INPUT -p udp -m udp --dport 43 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -s 127.0.0.1 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -j LOG_DROP


Här skapar du tillträdesregler för utgående trafik. (OUTPUT) Samma gäller här som för INPUT, detta är en generell lista så editera den efter eget tycke och behov.

Kod: Markera allt

-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 23 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 43 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 43 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A OUTPUT -d 127.0.0.1 -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -j LOG_DROP
COMMIT


3. Starta brandväggen.

Det svåraste är förhoppningsvis gjort. Det viktigaste att tänka på här är att ha sshporten öppen för inkommande och utgående trafik (port 22). Annars kommer du inte åt servern när brandväggen startats!

När du tror att du fått allt rätt så är det dags att testa, skriv in:

Kod: Markera allt

iptables-restore /usr/local/scripts/fw


Iptables läser då in reglerna från filen vi skapat. När detta är klart så kan du kolla med följande kommando hur iptables är konfigurerat.

Kod: Markera allt

iptables -L


OBS! Om du inte kommer åt servern, gå in i kontrollpanelen för din VPS (supportsidorna eller liknande) och starta om den, vi har nämligen inte skapat en startrutin för våra regler ännu så när servern kommer upp igen är allt som vanligt.

4. Startrutin

När allt känns rätt och du är nöjd med dina regler så är det dags att skapa en rutin så att dina regler läses in vid uppstart. Skapa filen fw.sh i /etc/init.d/

Kod: Markera allt

nano -w /etc/init.d/fw.sh

Kopiera in:

Kod: Markera allt

#!/bin/bash
#  Copyright (C) 2000-2007 Stefan. All rights reserved.
# chmod 755 fw.sh
# update-rc.d fw.sh defaults
/sbin/iptables-restore < /usr/local/scripts/fw

exit 0


och spara med ctrl+x, ändra rättigheterna på filen till 755:

Kod: Markera allt

chmod 755 /etc/init.d/fw.sh


skriv sedan nedanstående för att fw.sh skall startas varje gång ditt operativsystem startas.

Debian/Ubuntu

Kod: Markera allt

update-rc.d fw.sh defaults


Gentoo

Kod: Markera allt

rc-update add fw.sh default


KLART!
Mvh
Stefan, Servertekniker - support@glesys.se - http://glesys.se/
GleSYS Internet Services AB | Box 134 | 311 22 Falkenberg

peter
Inlägg: 9
Blev medlem: 04 aug 2007, 15:48

Re: [GUIDE] Iptables för din VPS

Inläggav peter » 29 aug 2007, 15:23

För steg 4 kan man i Gentoo använda det medföljande startscriptet:

Efter att du följt guiden ovan fram till:

Kod: Markera allt

iptables-restore /usr/local/scripts/fw


Sparar reglerna med:

Kod: Markera allt

/etc/init.d/iptables save


Och sedan ser till att reglerna laddas vid omstart:

Kod: Markera allt

rc-update add iptables default

Stefan
Inlägg: 179
Blev medlem: 25 jul 2007, 15:03

Re: [GUIDE] Iptables för din VPS

Inläggav Stefan » 29 aug 2007, 22:54

Perfekt tillägg, tack så mycket!

Dos
Inlägg: 5
Blev medlem: 03 aug 2007, 10:55

Re: [GUIDE] Iptables för din VPS

Inläggav Dos » 01 sep 2007, 12:12

Klockrent, haft mycket nytta av detta... Tack!

mattias
Inlägg: 3
Blev medlem: 31 okt 2007, 16:38

Re: [GUIDE] Iptables för din VPS

Inläggav mattias » 31 okt 2007, 16:50

Tänkte bara lägga till lite småsaker som kan vara bra för nätverksövervakning etc.

Eftersom traceroute använder sig av udp lägger vi till dom portarna oxå.

-A OUTPUT -p udp --dport 33200:33500 -m state --state NEW -j ACCEPT

Varje gång den sänder ut ett packet ökar portnumret automatiskt, därför lägger vi till mer än bara standard porten för traceroute som är: 33434

Eftersom vi har --state RELATED,ESTABLISHED i INPUT behöver vi inte lägga till det i samma regel i INPUT.

hkim
Inlägg: 4
Blev medlem: 18 jan 2008, 09:06

Re: [GUIDE] Iptables för din VPS

Inläggav hkim » 18 jan 2008, 09:10

Jag har följt guiden men får följande felmeddelande när jag skriver in iptables-restore /usr/local/scripts/fw:

iptables-restore: line 1 failed

Min fw fil ser ut precis som guiden föreskriver:

Kod: Markera allt

    *mangle
    :PREROUTING ACCEPT [444:43563]
    :INPUT ACCEPT [444:43563]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [402:144198]
    :POSTROUTING ACCEPT [402:144198]
    -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
    -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
    COMMIT

    *filter
    :INPUT DROP [1:242]
    :FORWARD DROP [0:0]
    :OUTPUT DROP [0:0]
    :LOG_DROP - [0:0]
    :LOG_ACCEPT - [0:0]
    :icmp_packets - [0:0]

    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 43 -j ACCEPT
    -A INPUT -p udp -m udp --dport 43 -j ACCEPT
    -A INPUT -p udp -m udp --dport 53 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
    -A INPUT -s 127.0.0.1 -j ACCEPT
    -A INPUT -p icmp -j icmp_packets
    -A INPUT -j LOG_DROP

    -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A OUTPUT -p tcp -m tcp --dport 20 -j ACCEPT
    -A OUTPUT -p tcp -m tcp --dport 21 -j ACCEPT
    -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
    -A OUTPUT -p tcp -m tcp --dport 23 -j ACCEPT
    -A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
    -A OUTPUT -p tcp -m tcp --dport 43 -j ACCEPT
    -A OUTPUT -p udp -m udp --dport 43 -j ACCEPT
    -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
    -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
    -A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT
    -A OUTPUT -p tcp -m tcp --dport 143 -j ACCEPT
    -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
    -A OUTPUT -p tcp -m tcp --dport 993 -j ACCEPT
    -A OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT
    -A OUTPUT -d 127.0.0.1 -j ACCEPT
    -A OUTPUT -p icmp -j icmp_packets
    -A OUTPUT -j LOG_DROP
    COMMIT

Stefan
Inlägg: 179
Blev medlem: 25 jul 2007, 15:03

Re: [GUIDE] Iptables för din VPS

Inläggav Stefan » 21 jan 2008, 10:07

Hej hkim, tänkte jag skulle skriva svaret även här om det är någon mer som får samma problem. Felet du hade på din fil var att det var "mellanslag" före själva kommandot, du måste skriva in (kopiera in) kommandona direkt i kolumn 0 i dokumentet. (jag har gjort iordning filen på din VPS)
Mvh
Stefan, Servertekniker - support@glesys.se - http://glesys.se/
GleSYS Internet Services AB | Box 134 | 311 22 Falkenberg

hkim
Inlägg: 4
Blev medlem: 18 jan 2008, 09:06

Re: [GUIDE] Iptables för din VPS

Inläggav hkim » 21 jan 2008, 10:22

Tack för hjälpen Stefan! Typiskt nybörjarmisstag antar jag... :oops:

Rövarn
Inlägg: 13
Blev medlem: 30 jan 2008, 12:17

Re: [GUIDE] Iptables för din VPS

Inläggav Rövarn » 30 jan 2008, 12:22

Jag har gjort enligt beskrivningen ovan och lagt till några portar som jag vill ha öppna, men hur kollar man att brandväggen är igång och fungerar? Kan man köra något slags test utifrån för att se om allt står rätt till?

Stefan
Inlägg: 179
Blev medlem: 25 jul 2007, 15:03

Re: [GUIDE] Iptables för din VPS

Inläggav Stefan » 30 jan 2008, 16:34

Hej för att se hur dina regler ser ut så kan du skriva.

iptables -L

Om du vill testa den utifrån så kan du ju portskanna din server, dock så kommer jag inte gå in på hur du gör detta iom att det kan missbrukas. Ett annat sätt är ju att spärra en port som du använder dig av t.ex. port 80 och se om du kommer åt den efter det.
Mvh
Stefan, Servertekniker - support@glesys.se - http://glesys.se/
GleSYS Internet Services AB | Box 134 | 311 22 Falkenberg


Återgå till "Allmänt"

Vilka är online

Användare som besöker denna kategori: 1 och 0 gäst