[linux-l] iptables (Eheamals: Fedora3 Firewall)

Volker Grabsch vog at notjusthosting.com
Di Nov 15 00:35:52 CET 2005


On Mon, Nov 14, 2005 at 10:11:03PM +0100, Olaf Radicke wrote:
> Ich hatte mir u.a. von O'Reilly Linux in a nutshell und ein Pro-Linux-Artikel 
> (http://www.pl-forum.de/t_netzwerk/print/iptables.html) angesehen.
> 
> Mir war u.a. nicht klar warum ich -p (Protokoll) angeben MUSS wenn ich doch 
> den PORT komplett dicht machen oder öffnen will. Weiß ich ob z.B. ssh UDP 
> oder TCP benutzt.

Bis auf DNS ist doch eh alles TCP. :-)

Davon abgesehen gibt es neben tcp und udp auch noch icmp als Protokoll.
Es gibt gewisse Optionen, die nur bei bestimmten Protokollen Sinn
machen, z.B. gibt es bei ICMP keine Port-Angaben.

ICMP wird übrigens *nicht* bloß für den Ping gebraucht. icmp sollte man
daher nur sperren, wenn man wirklich weiß, was man tut. In deinem
konkreten Fall würde ich also noch hinzufügen:

/sbin/iptables -A INPUT -j ACCEPT -p icmp

Frage an die Liste: Wie sperrt man *sauber* alle Pings? ICMP komplett
zu verbieten ist alles andere als sauber.


Ach ja, das gilt auch für weiter unten: Bitte benutze absolute Pfade,
d.h. /sbin/iptables ... eine von vielen Grundregeln für sicherheits-
relevante Shellscripts.

> Dann habe ich noch extern suchen müssen, welcher Server an 
> welchen Port lauscht. Fündig geworden bin ich dann in der /etc/services.

Dass das alles in /etc/services steht, ist für mich
Netzwerk-Grundwissen. Genauso elementar wie z.B. /etc/hosts.

Davon abgesehen müsstest du bei iptables statt "--dport 80"
auch "--dport http" angeben können ... dann schaut iptables
selbst in der /etc/services nach.  :-)


> Z.Z. sie mein sh-Skript so aus:
> <ipt-sh-skript>
> #!/bin/sh
> iptables -F
> 
> iptables -A INPUT -p udp --sport 53 -j ACCEPT # DNS
> iptables -A INPUT -p udp --dport 53 -j ACCEPT # DNS
> iptables -A INPUT -p tcp --dport 443 -j ACCEPT # https
> iptables -A INPUT -p tcp --dport 80 -j ACCEPT # http
> iptables -A INPUT -p tcp --dport 22 -j ACCEPT # ssh
> iptables -A INPUT -p tcp --dport 25 -j ACCEPT # smtp
> 
> iptables -P INPUT DROP
> iptables -P OUTPUT ACCEPT
> #sleep 30
> 
> #iptables -F INPUT
> #iptables -P INPUT ACCEPT
> </ipt-sh-skript>
> 
> Tut aber nicht das was ich erwarte. Wenn ich das ausführe komm ich nicht mehr 
> raus (kein Ping, http, etc zu anderen Rechnern). Weiß der Teufel warum.

Das liegt einfach daran, weil du die Antwort-Pakete, die dein System
nach draußen zurück schickt, ebenfalls blockierst.

Woran du scheiterst sind keine "Kernel-Details", sondern "Netzwerk-Details".
:-)

Also eine früher sehr gängige, heutzutage eher als quick&dirty
bezeichnete Lösung ist folgende:

#!/bin/sh
iptables -F

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

iptables -A INPUT -p tcp ! --syn -j ACCEPT
iptables -A INPUT -p tcp --syn --dport 443 -j ACCEPT # https
iptables -A INPUT -p tcp --syn --dport 80 -j ACCEPT # http
iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT # ssh
iptables -A INPUT -p tcp --syn --dport 25 -j ACCEPT # smtp

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

Das heißt, du lässt erstmal alle TCP-Pakete bis auf die SYN-Pakete
durch. Die SYN-Pakete tauchen beim Verbindungsaufbau auf. Die
Regeln erlauben also beliebigen TCP-Verkehr, aber der Verbindungs-
Aufbau wird nur zum Port 443,80,22,25 zugelassen.

Das ist wiegesagt die "alte Schule", heutzutage macht man das
wesentlich sauberer via Connection Tracking, das ich mir nochmal
ansehen werde.


Außerdem möchtest du ganz am Anfang vielleicht auch folgende Zeile
eintragen:

iptables -A INPUT -p tcp --source 127.0.0.1 -j ACCEPT

Dann kannst du von "innen" auch noch die anderen Dienste nutzen
(z.B. mysql, etc.  via tcp/ip über localhost, der ja sonst ebenfalls
gesperrt wäre)


> Was ich mir gewünscht hätte?
> 
> Eine Sammlung mit realistischen Fallbeispielen mit ausführlichen Kommentaren. 
> Also nach dem Schema:
> - Zielstellung
> - Weg
> - Erörterungen / Varianten

... genau das erwarte ich auch von einem guten Tutorial ... zumindest
*ein* solches Fallbeispiel sollte es behandeln. Und eben dies tut keines
der Tutorials, die du gelesen hast? Traurig, traurig.


Sobald ich ein Tutorial angefangen hab, melde ich mich nochmal. Aber
vorab hab ich dir schonmal ne Lösung hier gegeben, die laufen müsste.


Viele Grüße,

	Volker

-- 
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR



Mehr Informationen über die Mailingliste linux-l