IPTables alles bis auf Port 80 / 53 sperren?

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
hawkeye78
Beiträge: 430
Registriert: 10.09.2004 17:02:01
Wohnort: castrop-rauxel

IPTables alles bis auf Port 80 / 53 sperren?

Beitrag von hawkeye78 » 14.10.2009 23:04:40

Hallo,

ich habe im Büro einen Pool aus 15 Rechner die ich gerne vom restlichen Netz verhalten möchte. Da das ganze nur eine temporäre Lösung sein soll bis LDAP läuft, haben wir uns dazu entschieden auf allen Rechner ein IPTables Script einzuriden das nur den Zugriff auf das Gateway und dabei nur auf Port 80 erlaubt. Allerdings ist das bereits der Punkt an dem ich scheitere. Ich habe heute versucht das unten stehende Script zu schreiben (oder zusammen zu kopieren) aber wenn ich es ausführe werden alle Ports geschlossen. Ich vermute das ich eine Regel mit PREROUTING benötige allerdings weiß ich nicht wie ich diese in das Script einpflegen kann da es sich um Clients handelt die per DHCP ihre IPs beziehen.

Code: Alles auswählen

#! /bin/sh

# Alle Regeln auf abweisen setzen
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Loopback Interface erlauben
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT  -i lo -j ACCEPT

# Zugriff auf das Gateway erlauben
iptables -A INPUT -p tcp -s 192.168.1.1/0 -j ACCEPT

# DNS erlauben
iptables -A INPUT -p udp --sport 53 -j ACCEPT

# HTTP erlauben
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
Kurz um wäre ich sehr dankbar, wenn jemand über das Script herüber schauen könnte und mir sagen könnte was ich falsch mache.
Viele Grüsse
Dan

PS
Bevor die Diskussion hier beginnt, ja ich weiß das dieses lösung nicht die idealste ist, aber es wird wie bereits oben gesagt in absehbarer Zeit ein LDAP server einrichtet und der Rechnerpool (der derzeit noch aus echten Rechnern besteht) durch einen Terminalserver ersetzt....
I love deadlines. I like the whooshing sound they make as they fly by - Douglas Adams

Benutzeravatar
npi
Beiträge: 567
Registriert: 03.08.2003 17:52:10

Re: IPTables alles bis auf Port 80 / 53 sperren?

Beitrag von npi » 14.10.2009 23:20:57

Hi,
also folgendermaßen sollte es zumindest funktionieren, danach muss man noch schauen, ob man es noch etwas paranoider will mit Input-Policy auf DROP. :evil:

Code: Alles auswählen

#! /bin/sh

# Alle Regeln auf abweisen setzen außer INPUT
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Loopback Interface erlauben
iptables -A OUTPUT -o lo -j ACCEPT

# Zugriff auf das Gateway erlauben
iptables -A OUTPUT -p tcp -d 192.168.1.1 -j ACCEPT

# DNS erlauben
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

# HTTP erlauben
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT

#HTTPS erlauben
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
gruß,
npi
"Bis zur Unendlichkeit, und noch viel weiter!"
--Buzz, Toystory

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Re: IPTables alles bis auf Port 80 / 53 sperren?

Beitrag von nepos » 15.10.2009 08:08:15

Du schaltest mit deinem Script zum Gateway hin alles frei und für DNS/HTTP/HTTPS darf man auch überall hin verbinden.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: IPTables alles bis auf Port 80 / 53 sperren?

Beitrag von Duff » 15.10.2009 08:09:33

Ich würde noch einen Schritt weiter gehen und Stateful Inspection benutzen. So wird z.B. automatisch alles erkannt und erlaubt, was zu einer aufgebauten Verbindung gehört.

Beispiel für alle Regeln::

Code: Alles auswählen

IPTABLES=$(which iptables)

	# Verwerfe erstmal alles
	$IPTABLES -P INPUT DROP
	$IPTABLES -P OUTPUT DROP
	$IPTABLES -P FORWARD DROP

	# Akzeptiere alle Pakete, die Teil einer aufgebauten Verbindung sind
	$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
	$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
	$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Eine Regel, wie z.B. die zum Gateway müsste dann so aussehen:

Code: Alles auswählen

        # Zugriff zum Gateway per tcp auf Port 80 erlauben
        $IPTABLES -A OUTPUT -p tcp -d 192.168.1.1 --dport 80 -m state --state NEW -j ACCEPT
Und immer sehr hilfreich ist das Logging!
So kann man relativ einfach im Logfile erkennen, wenn was vergessen wurde oder und ein Port blockiert wird.

Code: Alles auswählen

         $IPTABLES -A OUTPUT -o <interface-name> -j LOG --log-prefix "OUTPUT(<interface_name>): " 
Oh, yeah!

Benutzeravatar
npi
Beiträge: 567
Registriert: 03.08.2003 17:52:10

Re: IPTables alles bis auf Port 80 / 53 sperren?

Beitrag von npi » 15.10.2009 12:24:09

nepos hat geschrieben:Du schaltest mit deinem Script zum Gateway hin alles frei und für DNS/HTTP/HTTPS darf man auch überall hin verbinden.
Das Problem ist, dass die Pakete zwar zum Gateway gehen (nach dem Routing), aber nicht an das Gateway adressiert sind.

Falls man keinen http-Proxy hat, muss man also die http-Pakete nach überall hin zulassen, außer man will sich den Aufwand machen, und das lokale Netz für http sperren. Dann könnte das zB so aussehen (mit stateful inspection):

Code: Alles auswählen

IPTABLES=$(which iptables)

   # Verwerfe erstmal alles
   $IPTABLES -P INPUT DROP
   $IPTABLES -P OUTPUT DROP
   $IPTABLES -P FORWARD DROP

   # Loopback erlauben
   $IPTABLES -A INPUT -i lo -j ACCEPT
   $IPTABLES -A OUTPUT -o lo -j ACCEPT

   # Akzeptiere alle Pakete, die Teil einer aufgebauten Verbindung sind
   $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
   $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

   # Akzeptiere Pakete für das www
   $IPTABLES -A OUTPUT ! -d 192.168.1.1/32 --p udp --dport 53 -m state ! --state INVALID  -j ACCEPT
   $IPTABLES -A OUTPUT ! -d 192.168.1.1/32 --p tcp --dport 80 -m state ! --state INVALID  -j ACCEPT
   $IPTABLES -A OUTPUT ! -d 192.168.1.1/32 --p tcp --dport 443 -m state ! --state INVALID  -j ACCEPT

   # Logge den Rest
   $IPTABLES -A INPUT -i <interface-name> -j LOG --log-prefix "INPUT(<interface_name>): " 
   $IPTABLES -A OUTPUT -o <interface-name> -j LOG --log-prefix "OUTPUT(<interface_name>): " 
gruß,
npi
"Bis zur Unendlichkeit, und noch viel weiter!"
--Buzz, Toystory

Benutzeravatar
DynaBlaster
Beiträge: 958
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Re: IPTables alles bis auf Port 80 / 53 sperren?

Beitrag von DynaBlaster » 15.10.2009 16:13:15

@hawkeye78

aus deinem Posting geht für mich nicht klar hervor, ob das Script auf den Clients laufen soll oder auf dem Gateway. Wenn du ein Script für einen Client suchst, müsste dein Beispiel so angepasst werden, damit es funktioniert.

Code: Alles auswählen

#! /bin/sh

# Alle Regeln auf abweisen setzen
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Loopback Interface erlauben
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT  -i lo -j ACCEPT

# abgehende DNS-Anfragen erlauben
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

# abgehenden HTTP- und HTTPS-Traffic erlauben
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

# Antwort-Pakete erlauben
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Wenn das Script auf dem Gateway laufen soll, brauchen wir mehr Informationen über das Netzwerk. Wie wird der Internetzugang bereitgestellt. Wird der DNS-Server vom Provider genutzt oder läuft dieser Dienst auf dem Gateway selbst? Wie sieht das Script im Moment aus?

Antworten