[linux-l] iptables

Volker Grabsch vog at notjusthosting.com
Do Mär 23 03:30:52 CET 2006


Liebe Liste,

ich habe mich nun anlässlich meines neuen Laptops mal dran gesetzt,
eine möglichst einfache IPTables-Konfigurations aufzusetzen. Es soll
bewusst möglichst klein sein, und unnötige Features vermeiden.

Zum Beispiel wird nur eingehender Traffic gefiltert, da eine Filterung
von ausgehendem Traffic auf einem "Rechner zu Hause" IMHO paranoid und
sehr fehleranfällig ist.

Da ich mich noch nicht so gut mit connection tracking auskenne, möchte
ich das Script einfach mal vorstellen, bevor ich es als Howto verpacke
und ins Netz stelle:

  #!/bin/sh

  /sbin/iptables -F INPUT
  /sbin/iptables -P INPUT DROP

  /sbin/iptables -A INPUT -J ACCEPT -s 127.0.0.1
  /sbin/iptables -A INPUT -J ACCEPT -p icmp
  /sbin/iptables -A INPUT -J ACCEPT -m conntrack --ctstate ESTABLISHED,REJECT

Für jeden nach außen offenen Dienst kommt noch hinzu:

  /sbin/iptables -A INPUT -J ACCEPT -p tcp --dport 22
  /sbin/iptables -A INPUT -J ACCEPT -p tcp --dport 80

Diese Regeln erlauben beliebigen lokalen Zugriff und alle ICMP-Sachen.
Außerdem werden alle UDP/TCP Pakete durchgelassen, die nur Antworten auf
eigene Anfragen sind (DHCP, DNS, Surfen im Netz, aktive und passives
FTP, ...).

Darüberhinaus dürfen Außenstehende auf den eigenen SSH- und Webserver
zugreifen (d.h. Port 22 und 80 sind "offen").

Soviel zur Theorie. Erreiche ich das auch mit obigen Zeilen, oder habe
ich was übersehen? Connection-Tracking funktioniert auch mit UDP, richtig?

Beim Erlauben aller lokalen Pakete bin ich mir nicht sicher, was besser
ist. Das erwähnte:

  /sbin/iptables -A INPUT -J ACCEPT -s 127.0.0.1

oder lieber über das Netzwerk-Device festlegen:

  /sbin/iptables -A INPUT -J ACCEPT -i lo

?  ... was von beiden ist "best practise"? Gibt es subtile Unterschiede,
die man wissen sollte?


Viele Grüße,

    Volker

On Tue, Nov 15, 2005 at 02:09:09AM +0100, Olaf Radicke wrote:
> Am Dienstag, 15. November 2005 00:35 schrieb Volker Grabsch:
> > On Mon, Nov 14, 2005 at 10:11:03PM +0100, Olaf Radicke wrote:
> [...]
> > Dass das alles in /etc/services steht, ist für mich
> > Netzwerk-Grundwissen. Genauso elementar wie z.B. /etc/hosts.
> 
> Das ist Linux (Unix) speziefisch. Unter Windows wird es kein /etc/services 
> geben.
> 
> [...]
> > > 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.
> 
> Dann weiß ich nicht warum ich dann noch eine Zeile
> -P OUTPUT ACCEPT
> brauche.
> 
> > Woran du scheiterst sind keine "Kernel-Details", sondern
> > "Netzwerk-Details".
> 
> Auserhalb von Linux gibt es kein iptables. 
> 
> > Also eine früher sehr gängige, heutzutage eher als quick&dirty
> > bezeichnete Lösung ist folgende:
> 
> Also in der Programmierung steht "quick&dirty" für Code den keine Sau mehr 
> versteht aber der funktioniert und den deshalb niemand mehr anfassen will. 
> Na, dann fühle ich mich bestätigt.
> 
> > #!/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
> 
> Die Zeile ist ja dann eigentlich überflüssig, weil wir ja oben schon alle 
> Ports aufgerissen haben (außer für syn's).
> 
> [...]
> > Das ist wiegesagt die "alte Schule", heutzutage macht man das
> > wesentlich sauberer via Connection Tracking, das ich mir nochmal
> > ansehen werde.
> 
> Noch nichts von gehört.
> 
> Die...
>  /etc/network/if-pre-up.d/000iptables
> ...gibt es unter Fedora übrigens nicht. Soll ich es in die 
> /etc/sysconfig/iptables
> abkippen?
> 
> > 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.
> 
> ...Tut es jetzt.
> 
> Das hier habe ich noch entdeckt...
> http://www.selflinux.org/selflinux/html/iptables.html
> (für mein Geschmack, zu ausladend)
> 
> MfG
> Olaf Radicke
> 
> _______________________________________________
> linux-l mailing list
> linux-l at mlists.in-berlin.de
> Die Mailingliste der BeLUG (Berliner Linux User Group)
> 
> Wenn du diese Mailingliste  abbestellen willst, gehe bitte auf
> https://mlists.in-berlin.de/mailman/listinfo/linux-l
> und trage dich dort bitte aus

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



Mehr Informationen über die Mailingliste linux-l