iptables - config script

Rund um die Sicherheit des Systems und die Applikationen
tobiask
Posts: 164
Joined: 2004-05-02 12:08
Location: NRW
 

iptables - config script

Post by tobiask »

hi,

was haltet ihr von so einer konfiguration?
was kann man besser machen, oder was ist nicht so gut gelöst?

Code: Select all

#!/bin/sh -x

# Verbiete alles bevor benötigte Protokolle und Ports
# gezielt freigeschaltet werden
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -F

# Schalte Loopback Device zur internen Kommunikation frei!
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Debug - alles loggen:
#iptables -A INPUT -j LOG
#iptables -A OUTPUT -j LOG

# Logge fragwürdige Pakete
iptables -A INPUT -m state --state INVALID -j LOG
iptables -A INPUT -p tcp --tcp-flags ALL, FIN,URG,PSH -j LOG
iptables -A INPUT -p tcp --tcp-flags ALL, NONE -j LOG
iptables -A INPUT -p tcp --tcp-flags NONE, ALL -j LOG
iptables -A INPUT -p ICMP --icmp-type 
            destination-unreachable -j LOG
iptables -A INPUT -p ICMP --icmp-type source-quench -j LOG
iptables -A INPUT -p ICMP --icmp-type redirect -j LOG
iptables -A INPUT -p ICMP --icmp-type 
            address-mask-request -j LOG

# Verbiete unsinnige Pakete
#iptables -A INPUT -i eth0 -s 192.168.0.25 -j DROP
#iptables -A INPUT -i eth0 -s 127.0.0.0/255.0.0.0 -j DROP
iptables -A INPUT -m state --state INVALID -j DROP

# ------------ SSH --------------------------
# Ausgehende Verbindung zu fremdem SSH-Server
iptables -A OUTPUT -p TCP -d 0/0 --dport 22 
         -s 0/0 --sport 1024:65535 -o eth0 -j ACCEPT
iptables -A INPUT -p TCP -s 0/0 --sport 22 -d 0/0 --dport 
      1024:3005 -m state --state RELATED,ESTABLISHED -i eth0 -j ACCEPT
iptables -A INPUT -p TCP -s 0/0 --sport 22 -d 0/0 --dport 
      3007:65535 -m state --state RELATED,ESTABLISHED -i eth0 -j ACCEPT

# Eingehende Verbindung zum SSH Server des Webservers
iptables -A INPUT -p TCP -s 0/0 --sport 1024:65535 
         -d 0/0 --dport 22 -i eth0 -j ACCEPT
iptables -A OUTPUT -p TCP -d 0/0 --dport 1024:65535 
         -s 0/0 --sport 22 -o eth0 -j ACCEPT

# ------------ http(s) --------------------------
# Zugriff auf den Webserver
iptables -A INPUT -p TCP -d 0/0 --dport 80 -s 0/0 
         --sport 1024:65535 -j ACCEPT
iptables -A OUTPUT -p TCP -s 0/0 --sport 80 -d 0/0 
         --dport 1024:65535 -j ACCEPT
iptables -A INPUT -p TCP -d 0/0 --dport 443 -s 0/0 
         --sport 1024:65535 -j ACCEPT
iptables -A OUTPUT -p TCP -s 0/0 --sport 443 -d 0/0 
         --dport 1024:65535 -j ACCEPT

# Ausgehender Zugriff auf fremde http Inhalte
iptables -A OUTPUT -p TCP -d 0/0 --dport 80 
         -s 0/0 --sport 1024:65535 -o eth0 -j ACCEPT
iptables -A INPUT -p TCP -s 0/0 --sport 80 -d 0/0 --dport 
      1024:3005 -m state --state RELATED,ESTABLISHED -i eth0 -j ACCEPT
iptables -A INPUT -p TCP -s 0/0 --sport 80 -d 0/0 --dport 
      3006:65535 -m state --state RELATED,ESTABLISHED -i eth0 -j ACCEPT
iptables -A OUTPUT -p TCP -d 0/0 --dport 443 
         -s 0/0 --sport 1024:65535 -o eth0 -j ACCEPT
iptables -A INPUT -p TCP -s 0/0 --sport 443 -d 0/0 --dport 
      1024:3005 -m state --state RELATED,ESTABLISHED -i eth0 -j ACCEPT
iptables -A INPUT -p TCP -s 0/0 --sport 443 -d 0/0 --dport 
      3006:65535 -m state --state RELATED,ESTABLISHED -i eth0 -j ACCEPT

# ------------ ftp --------------------------
# Eingehender Zugriff auf FTP-Server (aktiver Modus)
iptables -A INPUT -p TCP -s 0/0 --sport 1024:65535 
         -d 0/0 --dport 20:21 -j ACCEPT
iptables -A OUTPUT -p TCP -d 0/0 --dport 1024:65535 
         -s 0/0 --sport 20:21 -j ACCEPT

# Passiver Modus; für eingehende Verbindung
iptables -A INPUT -p 6 -d 0/0 --dport 1024:3005 
          -s 0/0 --sport 1024:65535 -j ACCEPT
iptables -A INPUT -p 6 -d 0/0 --dport 3007:65535 
          -s 0/0 --sport 1024:65535 -j ACCEPT

# Ausgehender Zugriff auf vertrauenswürdigen FTP-Server
# Aktiver Modus, Server mit IP-Adresse identifizieren!
iptables -A OUTPUT -p TCP -d 82.165.36.79 --dport 20:21 
         -s 0/0 --sport 1024:65535 -j ACCEPT
iptables -A INPUT -p TCP -s 82.165.36.79 --sport 20:21 
         -d 0/0 --dport 1024:3005 -j ACCEPT
iptables -A INPUT -p TCP -s 82.165.36.79 --sport 20:21 
         -d 0/0 --dport 3007:65535 -j ACCEPT

# Ausgehender Zugriff auf fremde FTP-Server - passiver Modus
iptables -A OUTPUT -p TCP -d 0/0 --dport 21 
         -s 0/0 --sport 1024:65535 -j ACCEPT
iptables -A INPUT -p TCP -s 0/0 --sport 21 -d 0/0 
         --dport 1024:3005 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p TCP -s 0/0 --sport 21 -d 0/0 
         --dport 3006:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p TCP -d 0/0 --dport 1024:65535 
         -s 0/0 --sport 1024:65535 -j ACCEPT
iptables -A INPUT -p TCP -d 0/0 --dport 1024:65535 -s 0/0 
         --sport 1024:3005 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p TCP -d 0/0 --dport 1024:65535 -s 0/0 
         --sport 3007:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT

# ------------ Mailserver --------------------------
# Einlieferung von Mails an Mail-Server
iptables -A INPUT -p TCP -s 0/0 --sport 1024:65535 
         -d 0/0 --dport 25 -j ACCEPT
iptables -A OUTPUT -p TCP -d 0/0 --dport 1024:65535 
         -s 0/0 --sport 25 -j ACCEPT
# Versand von Mails des lokalen smtp Servers
iptables -A OUTPUT -p TCP -s 0/0 --sport 1024:65535 
         -d 0/0 --dport 25:25 -j ACCEPT
iptables -A INPUT -p TCP -s 0/0 --sport 25:25 -d 0/0 
         --dport 1024:3005 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p TCP -s 0/0 --sport 25:25 -d 0/0 
         --dport 3007:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Zugriff auf pop3(s)
iptables -A INPUT -p TCP -s 0/0 --sport 1024:65535 
         -d 0/0 --dport 995 -i eth0 -j ACCEPT
iptables -A OUTPUT -p TCP -d 0/0 --dport 1024:65535 
         -s 0.0.0.0/0 --sport 995 -o eth0 -j ACCEPT

# Zugriff auf pop3
iptables -A INPUT -p TCP -s 0/0 --sport 1024:65535 
         -d 0/0 --dport 110 -i eth0 -j ACCEPT
iptables -A OUTPUT -p TCP -d 0/0 --dport 1024:65535 
         -s 0.0.0.0/0 --sport 110 -o eth0 -j ACCEPT

# ------------ auth/ident --------------------------
iptables -A INPUT -p TCP -d 0/0 --dport 113 -j REJECT

# ------------ DNS ---------------------------------
# Anfragen an externe Nameserver von Resolver / Bind9
iptables -A OUTPUT -p UDP -d 0/0 --dport 53 
         -s 0/0 --sport 1024:65535 -j ACCEPT
iptables -A OUTPUT -p TCP -d 0/0 --dport 53 
         -s 0/0 --sport 1024:65535 -j ACCEPT
iptables -A INPUT -p UDP -s 0/0 --sport 53 -d 0/0 
         --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p TCP -s 0/0 --sport 53 -d 0/0 
         --dport 1024:3005 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p TCP -s 0/0 --sport 53 -d 0/0 
         --dport 3007:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Eingehende Anfragen an lokalen Nameserver
iptables -A OUTPUT -p UDP -d 0/0 --dport 53 
         -s 0/0 --sport 53 -j ACCEPT
iptables -A OUTPUT -p TCP -d 0/0 --dport 53 
         -s 0/0 --sport 53 -j ACCEPT
iptables -A INPUT -p UDP -s 0/0 --sport 53 
         -d 0/0 --dport 53 -j ACCEPT
iptables -A INPUT -p TCP -s 0/0 --sport 53 
         -d 0/0 --dport 53 -j ACCEPT
iptables -A OUTPUT -p UDP -d 0/0 --dport 1024:65535 
         -s 0/0 --sport 53 -j ACCEPT
iptables -A OUTPUT -p TCP -d 0/0 --dport 1024:65535 
         -s 0/0 --sport 53 -j ACCEPT
iptables -A INPUT -p UDP -s 0/0 --sport 1024:65535 
         -d 0/0 --dport 53 -j ACCEPT
iptables -A INPUT -p TCP -s 0/0 --sport 1024:65535 
         -d 0/0 --dport 53 -j ACCEPT


# ------------ Timeserver --------------------------
iptables -A OUTPUT -p UDP -s 0/0 --sport 123 
         -d 82.165.36.79 --dport 123 -j ACCEPT
iptables -A INPUT -p UDP -d 0/0 --dport 123 
         -s 82.165.36.79 --sport 123 -j ACCEPT

# ------------ Ping --------------------------
iptables -A INPUT -p icmp -s 123.45.67.89 
         --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp -d 123.45.67.89 
         --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p icmp 
         --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -p icmp 
         --icmp-type echo-request -j ACCEPT

# ------------ Parameter-Problem ------
iptables -A INPUT -p icmp 
         --icmp-type parameter-problem -j ACCEPT
iptables -A OUTPUT -p icmp 
         --icmp-type parameter-problem -j ACCEPT
wäre dankbar um das script noch zu verbessern, und dann bei mir einzuspielen ...
captaincrunch
Userprojekt
Userprojekt
Posts: 7066
Joined: 2002-10-09 14:30
Location: Dorsten
 

Re: iptables - config script

Post by captaincrunch »

was haltet ihr von so einer konfiguration?
Nichts.
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
duergner
Posts: 923
Joined: 2003-08-20 11:30
Location: Pittsburgh, PA, USA
 

Re: iptables - config script

Post by duergner »

Nach dem ersten Ã?berfliegen fehlen am Ende noch REJECT Regeln für alles, damit die Packete nicht unsinniger Weise verloren gehen,sondern dass das Gegenüber Bescheid bekommt.

Und IMHO braucht man auf einem Server i.d.R. keinen Paketfilter.
tobiask
Posts: 164
Joined: 2004-05-02 12:08
Location: NRW
 

Re: iptables - config script

Post by tobiask »

CaptainCrunch wrote:
was haltet ihr von so einer konfiguration?
Nichts.
warum genau?

@duergner:
warum denkst du das man das nicht braucht?
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim
 

Re: iptables - config script

Post by oxygen »

Paketfilter machen nur auf einer Art von Rechnern Sinn, auf Routern.
dodolin
Posts: 3840
Joined: 2003-01-21 01:59
Location: Sinsheim/Karlsruhe
 

Re: iptables - config script

Post by dodolin »

warum genau?
Es gibt kein Konzept. Ohne Konzept kann man ja wohl kaum sagen, ob das Skript das erreicht, was es soll. Denn was soll es denn erreichen?! Eigentlich sind Paketfilter auf Rootservern eh überflüssig, aber das Thema hatten wir hier schon wirklich zur Genüge.
tobiask
Posts: 164
Joined: 2004-05-02 12:08
Location: NRW
 

Re: iptables - config script

Post by tobiask »

dodolin wrote:
warum genau?
Es gibt kein Konzept. Ohne Konzept kann man ja wohl kaum sagen, ob das Skript das erreicht, was es soll. Denn was soll es denn erreichen?! Eigentlich sind Paketfilter auf Rootservern eh überflüssig, aber das Thema hatten wir hier schon wirklich zur Genüge.
oke, stimmt irgendwie, aber wie kann ich den server dann noch etwas besser gegen angriffe schützen als er in der standart konfiguration von 1&1 ist ?
captaincrunch
Userprojekt
Userprojekt
Posts: 7066
Joined: 2002-10-09 14:30
Location: Dorsten
 

Re: iptables - config script

Post by captaincrunch »

man Sicherheitskonzept
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
tobiask
Posts: 164
Joined: 2004-05-02 12:08
Location: NRW
 

Re: iptables - config script

Post by tobiask »

CaptainCrunch wrote:man Sicherheitskonzept
he, oke oke,
ich bin noch anfänger, sorry für die blöden fragen, aber jeder fängt mal klein an ...
captaincrunch
Userprojekt
Userprojekt
Posts: 7066
Joined: 2002-10-09 14:30
Location: Dorsten
 

Re: iptables - config script

Post by captaincrunch »

Sorry, aber warum schaust du dich dann nicht einmal etwas hier im Subforum um? Da gibt's

a) genügend Themen über Sinn und Unsinn von Personal Firewalls auf Rootservern, und
b) diverse Ã?berlegungen, wie man sein System besser absichern kann.

Was du letztendlich damit anfängst kann dir aber niemand "externes" ohen profundes Hintergrundwissen über Ziele, angebotene Dienste, etc. sagen.
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
duergner
Posts: 923
Joined: 2003-08-20 11:30
Location: Pittsburgh, PA, USA
 

Re: iptables - config script

Post by duergner »

Tobiask wrote:[@duergner:
warum denkst du das man das nicht braucht?
Ganz einfach:

1. Auf dem Server sind bestimmte Ports offen, weil dahinter Dienste lauschen, die man anbieten will.
2. Alle anderen Ports sind eh schon zu.

Aus 1. und 2. folgt, dass es auf einem Server keine offenen Ports gibt, die nicht gewünscht sind. Also erübrigt sich da ein Paketfilter. Sollte doch ein Port offen sein, den man nicht haben will. sprich ein Dienst an diesem Interface lauschen, den man da nicht haben will, dann einfach den Dienst entsprechend konfigurieren und gut ist.
captaincrunch
Userprojekt
Userprojekt
Posts: 7066
Joined: 2002-10-09 14:30
Location: Dorsten
 

Re: iptables - config script

Post by captaincrunch »

Mal ganz davon abgesehen, hast du das Konzept der State Tables partout nicht verstanden.
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
tobiask
Posts: 164
Joined: 2004-05-02 12:08
Location: NRW
 

Re: iptables - config script

Post by tobiask »

duergner wrote:
Tobiask wrote:[@duergner:
warum denkst du das man das nicht braucht?
Ganz einfach:

1. Auf dem Server sind bestimmte Ports offen, weil dahinter Dienste lauschen, die man anbieten will.
2. Alle anderen Ports sind eh schon zu.

Aus 1. und 2. folgt, dass es auf einem Server keine offenen Ports gibt, die nicht gewünscht sind. Also erübrigt sich da ein Paketfilter. Sollte doch ein Port offen sein, den man nicht haben will. sprich ein Dienst an diesem Interface lauschen, den man da nicht haben will, dann einfach den Dienst entsprechend konfigurieren und gut ist.
oke, danke, das reicht mir ja als antwort ;)

@CaptainCrunch:
sorry, wie gesagt, anfänger ...
aber ich werd mich versuchen zu bessern - wegen dem 'sinnlosen' post hier ...