[OT] Reihenfolge der iptables rules

2006-06-01 Diskussionsfäden Chris C.
Hi,

ich baue gerade eine kleine Firewall für dem Übergang zwischen Wlan und dem 
restlichen Netzwerk, bisher habe ich meine Firewalls immer unter OBSD mit PF 
oder PIXen erstellt, geht aber diesesmal aufgrund einiger Besonderheiten 
nicht...

Ich stoße bei dem erstellen der rules auf ein Problem:
Wenn ich 
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -m tcp -p tcp --dport ssh -j ACCEPT
$IPT -A INPUT -p tcp -j REJECT --reject-with tcp-reset
$IPT -A INPUT -p udp -j REJECT --reject-with icmp-admin-prohibited
$IPT -A INPUT -s 192.168.17.0/255.255.255.0 -p icmp -j ACCEPT
$IPT -A INPUT -s ! 192.168.17.0/255.255.255.0 -p icmp --icmp-type 
echo-request -j ACCEPT
$IPT -A INPUT -s ! 192.168.17.0/255.255.255.0 -p icmp -j REJECT --reject-with 
icmp-admin-prohibited
$IPT -A INPUT -d 127.0.0.1 -j ACCEPT

wird die ja doch sehr grobe letzte Regel einfach ignoriert (vermutlich wegen 
den Rejects darüber), setze ich -A INPUT -d localhost ganz nach oben, läuft 
alles. Für eben diesen Fall gibts bei pf pass in quick (PF geht nach meinem 
verständis erst alle Regeln durch und nimmt nicht die erste die halbwegs 
passt...).
Meine Frage: Ich habe eine vergleichbare Funktion in der doku zu iptables 
nicht gefunden, gibt's sowas nicht? Und wie soll ich dann z.B. zusätzliche 
Ports öffnen (z.B. einfach für einen DNS-Server der noch auf den Server 
soll)? ein -A INPUT -p udp --dport 53 -j ACCEPT wird ja nicht funktionieren, 
da die Rule am Ende angefügt wird und somit garnicht erst gelesen wird. Alle 
Regeln entfernen oder irgendwie dazwischenquetschen ist ja auch nicht sehr 
elegant.


Greetings
Chris



Re: [OT] Reihenfolge der iptables rules

2006-06-01 Diskussionsfäden Christoph Haas
On Thu, Jun 01, 2006 at 12:07:15PM +0200, Chris C. wrote:
 ich baue gerade eine kleine Firewall für dem Übergang zwischen Wlan und dem 
 restlichen Netzwerk, bisher habe ich meine Firewalls immer unter OBSD mit PF 
 oder PIXen erstellt, geht aber diesesmal aufgrund einiger Besonderheiten 
 nicht...
 
 Ich stoße bei dem erstellen der rules auf ein Problem:
 Wenn ich 
 $IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 $IPT -A INPUT -m tcp -p tcp --dport ssh -j ACCEPT
 $IPT -A INPUT -p tcp -j REJECT --reject-with tcp-reset
 $IPT -A INPUT -p udp -j REJECT --reject-with icmp-admin-prohibited
 $IPT -A INPUT -s 192.168.17.0/255.255.255.0 -p icmp -j ACCEPT
 $IPT -A INPUT -s ! 192.168.17.0/255.255.255.0 -p icmp --icmp-type 
 echo-request -j ACCEPT
 $IPT -A INPUT -s ! 192.168.17.0/255.255.255.0 -p icmp -j REJECT --reject-with 
 icmp-admin-prohibited
 $IPT -A INPUT -d 127.0.0.1 -j ACCEPT

Du benutzt eine etwas ungewöhnliche Reihenfolge. Normalerweise baut man
einen Regelsatz so auf, dass man das erlaubt, was erlaubt sein soll. Und
am Ende kommt die große Böse REJECT- oder DROP-Regel. Damit sollte deine
Logik etwas einfacher werden.

Meine Vorlage für ein iptables-Skript:
http://workaround.org/moin/IptablesScript

Von Cisco PIX weiß ich nur, dass ich darum einen großen Bogen mache, wo
ich kann. ;)

Gruß
 Christoph
-- 
~
~
.signature [Modified] 1 line --100%--1,48 All


signature.asc
Description: Digital signature


Re: [OT] Reihenfolge der iptables rules

2006-06-01 Diskussionsfäden Paul Puschmann
Chris C. [EMAIL PROTECTED] schrieb am Thu, Jun 01, 2006 at 12:07:15PM +0200:
 Hi,
 
 ich baue gerade eine kleine Firewall für dem Übergang zwischen Wlan und dem 
 restlichen Netzwerk, bisher habe ich meine Firewalls immer unter OBSD mit PF 
 oder PIXen erstellt, geht aber diesesmal aufgrund einiger Besonderheiten 
 nicht...

Hi,
hast du dir schon mal den fwbuilder angesehen?
Das ist zwar was zum klicken, aber vielleicht passt es ja.

Gruss, Paul


signature.asc
Description: Digital signature


Re: [OT] Reihenfolge der iptables rules

2006-06-01 Diskussionsfäden Chris C.
Am Donnerstag 01 Juni 2006 12:40 schrieb Christoph Haas:
 On Thu, Jun 01, 2006 at 12:07:15PM +0200, Chris C. wrote:
  [...]

 Du benutzt eine etwas ungewöhnliche Reihenfolge. Normalerweise baut man
 einen Regelsatz so auf, dass man das erlaubt, was erlaubt sein soll. Und
 am Ende kommt die große Böse REJECT- oder DROP-Regel. Damit sollte deine
 Logik etwas einfacher werden.

H eigentlich habe ich es immer genau andersherum gemacht, block in all 
und dann passen was man haben möchte.

 Meine Vorlage für ein iptables-Skript:
 http://workaround.org/moin/IptablesScript

Thx, schaue ich mir gerade an.

 Von Cisco PIX weiß ich nur, dass ich darum einen großen Bogen mache, wo
 ich kann. ;)

:) Naja, ich hab die PIXe schon seit ewigkeiten genutzt, aber seit ich PF 
genutzt habe ... vorallem CARP, pfsync, authpf sind sehr nützliche Helfer, 
aber das geht auf einer Linux-Liste wohl zu weit vom Theme ab (es sei denn es 
gibt jetzt einen Port für linux :)) 

Also gehe ich recht in der Annahme, dass ich neue Regeln immer irgendwie oben 
zwischenschieben muss, damit sie nicht von den REJECT Regeln übergangen 
wegen?


 Gruß
  Christoph

Greetings
Chris



Re: [OT] Reihenfolge der iptables rules

2006-06-01 Diskussionsfäden gerhard . brauer
Gruesse!
* Chris C. [EMAIL PROTECTED] schrieb am [01.06.06 12:07]:
 Hi,
 
 ich baue gerade eine kleine Firewall für dem Übergang zwischen Wlan und dem 
 restlichen Netzwerk, bisher habe ich meine Firewalls immer unter OBSD mit PF 
 oder PIXen erstellt, geht aber diesesmal aufgrund einiger Besonderheiten 
 nicht...
 
 Ich stoße bei dem erstellen der rules auf ein Problem:
 Wenn ich 
 $IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 $IPT -A INPUT -m tcp -p tcp --dport ssh -j ACCEPT
 $IPT -A INPUT -p tcp -j REJECT --reject-with tcp-reset
 $IPT -A INPUT -p udp -j REJECT --reject-with icmp-admin-prohibited
 $IPT -A INPUT -s 192.168.17.0/255.255.255.0 -p icmp -j ACCEPT
 $IPT -A INPUT -s ! 192.168.17.0/255.255.255.0 -p icmp --icmp-type 
 echo-request -j ACCEPT
 $IPT -A INPUT -s ! 192.168.17.0/255.255.255.0 -p icmp -j REJECT --reject-with 
 icmp-admin-prohibited
 $IPT -A INPUT -d 127.0.0.1 -j ACCEPT
 
 wird die ja doch sehr grobe letzte Regel einfach ignoriert (vermutlich wegen 
 den Rejects darüber), 

Jep, die Reihenfolge der Regeln in der sequentiellen Abarbeitung ist
bindend.

 setze ich -A INPUT -d localhost ganz nach oben, läuft 
 alles. Für eben diesen Fall gibts bei pf pass in quick (PF geht nach meinem 
 verständis erst alle Regeln durch und nimmt nicht die erste die halbwegs 
 passt...).

Aber sie paßt ja nicht halbwegs, sondern sie paßt ;-) Jedweder
TCP-Verkehr wird rejected. Punkt.

 Meine Frage: Ich habe eine vergleichbare Funktion in der doku zu iptables 
 nicht gefunden, gibt's sowas nicht? Und wie soll ich dann z.B. zusätzliche 
 Ports öffnen (z.B. einfach für einen DNS-Server der noch auf den Server 
 soll)? ein -A INPUT -p udp --dport 53 -j ACCEPT wird ja nicht funktionieren, 
 da die Rule am Ende angefügt wird und somit garnicht erst gelesen wird. Alle 
 Regeln entfernen oder irgendwie dazwischenquetschen ist ja auch nicht sehr 
 elegant.

a) Spezielle Regeln nach vorne
b) Dann die allgemeinen
c) am Ende die last chance Regeln
d) ganz am Ende (wenn ein Paket bis dahin gelangt) greift dann die
Tables-Policy, die i.d.R. auf DROP stehen sollte

Abgesehen von Minimal-Home-Rechner-Paketfilter bietet sich bei
iptables aber an, mit eigenen Tables zu arbeiten. Dann ist auch das
Einfügen eigener Rules transparenter. Z.B. ein Table für erlaubte Dinge,
einer für abgewiesene Pakete ohne Logging und einer für abgewiesene mit
Logging. Diese eigenen Tables jeweils als Target (-j) für INPUT,OUTPUT
und ggf. FORWARD.

In diesen eigenen Tables ist die Reihenfolge der Regeln dann meist egal,
da diese ja meist einen konkreten Fall abdecken und sich nicht
überschneiden.

Also eher modular arbeiten als sequentiell. Die Doku gibt da hinreichend
Beispiele.
 
 Greetings
 Chris

Gruß
Gerhard
-- 
It's nice to be important...
but it's more important to be nice.


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: [OT] Reihenfolge der iptables rules

2006-06-01 Diskussionsfäden Joerg Zimmermann
Hi,

Chris C. wrote:
 Hi,
[..]

 wird die ja doch sehr grobe letzte Regel einfach ignoriert (vermutlich wegen 
 den Rejects darüber), setze ich -A INPUT -d localhost ganz nach oben, läuft 
 alles. Für eben diesen Fall gibts bei pf pass in quick (PF geht nach meinem 
 verständis erst alle Regeln durch und nimmt nicht die erste die halbwegs 
 passt...).

Ein quick benötigst Du bei Linux nicht.
Im Gegensatz zu OpenBSD, sorgt der erste Treffer dafür, dass das
Packet die weiteren Regeln nicht mehr durchläuft. Bei OpenBSD
durchläuft das Packet die Regeln aber immer vollständig, es sei
denn, Du  nimmst es mit quick raus.

OpenBSD nimmt übrigens keine Packete die 'halbwegs passen', sondern
matched wie Linux nur bei exakter Übereinstimmung;-)

-hth
-Jörg


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: [OT] Reihenfolge der iptables rules

2006-06-01 Diskussionsfäden Juergen Christoffel
On Thu, Jun 01, 2006 at 12:07:15PM +0200, Chris C. wrote:
 [...]
 da die Rule am Ende angefügt wird und somit garnicht erst gelesen wird. Alle 
 Regeln entfernen oder irgendwie dazwischenquetschen ist ja auch nicht sehr 
 elegant.

Es gibt kein dazwischenquetschen aber es gibt ein Einfuegen an einer
bestimmten Position mittels -I int anstatt -A. Was daran unelegant
sein sollte, entgeht mir. Wenn ich meine Regeln dynamisch anpasse, mache
ich genau das, falls ich fuer bestimmte Faelle nicht vorher schon eine
eigene Tabelle angelegt hatte, bei der ich dann wieder nur anhaengen
kann.

Mittels iptables -L -n --line-numbers kannst Du Dir auch die Zeilen der
Ausgabe numieren lassen.

Um mit iptables umgehen zu lernen gibt es ein sehr gutes Iptables
Tutorial[1] von Oskar Andreasson und ein Script Easy Firewall Generator
for IPTables [2], dass danach Firewalls generiert.

--jc

[1] http://iptables-tutorial.frozentux.net/
[2] http://easyfwgen.morizot.net/gen/

-- 
  Ignorance more frequently begets confidence than does knowledge.
-- Charles Darwin


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: [OT] Reihenfolge der iptables rules

2006-06-01 Diskussionsfäden Chris C.
Am Donnerstag 01 Juni 2006 15:44 schrieb Juergen Christoffel:
 On Thu, Jun 01, 2006 at 12:07:15PM +0200, Chris C. wrote:
  [...]
  da die Rule am Ende angefügt wird und somit garnicht erst gelesen wird.
  Alle Regeln entfernen oder irgendwie dazwischenquetschen ist ja auch
  nicht sehr elegant.

 Es gibt kein dazwischenquetschen aber es gibt ein Einfuegen an einer
 bestimmten Position mittels -I int anstatt -A. Was daran unelegant
 sein sollte, entgeht mir. Wenn ich meine Regeln dynamisch anpasse, mache
 ich genau das, falls ich fuer bestimmte Faelle nicht vorher schon eine
 eigene Tabelle angelegt hatte, bei der ich dann wieder nur anhaengen
 kann.
Ja, ich hatte die Doku auf netfilter.org zwar gelesen, aber das mit dem -I 
irgendwie falsch interpretiert.

 Mittels iptables -L -n --line-numbers kannst Du Dir auch die Zeilen der
 Ausgabe numieren lassen.

 Um mit iptables umgehen zu lernen gibt es ein sehr gutes Iptables
 Tutorial[1] von Oskar Andreasson und ein Script Easy Firewall Generator
 for IPTables [2], dass danach Firewalls generiert.

Hmmm... eigentlich blöde wegen einem einzigen Spezialfall so einen aufwand zu 
betreiben, aber OK... lernen verlangsamt ja angeblich den 
verdummungsprozess ;-)

Dank euch allen.


Greetings
Chris

   --jc

 [1] http://iptables-tutorial.frozentux.net/
 [2] http://easyfwgen.morizot.net/gen/

 --
   Ignorance more frequently begets confidence than does knowledge.
   -- Charles Darwin



Re: [OT] Reihenfolge der iptables rules

2006-06-01 Diskussionsfäden Thomas Gräber
Am Donnerstag, 1. Juni 2006 17:10 schrieb Chris C.:
 Am Donnerstag 01 Juni 2006 15:44 schrieb Juergen Christoffel:
  On Thu, Jun 01, 2006 at 12:07:15PM +0200, Chris C. wrote:
   [...]
   da die Rule am Ende angefügt wird und somit garnicht erst gelesen wird.
   Alle Regeln entfernen oder irgendwie dazwischenquetschen ist ja auch
   nicht sehr elegant.
 
  Es gibt kein dazwischenquetschen aber es gibt ein Einfuegen an einer
  bestimmten Position mittels -I int anstatt -A. Was daran unelegant
  sein sollte, entgeht mir. Wenn ich meine Regeln dynamisch anpasse, mache
  ich genau das, falls ich fuer bestimmte Faelle nicht vorher schon eine
  eigene Tabelle angelegt hatte, bei der ich dann wieder nur anhaengen
  kann.

 Ja, ich hatte die Doku auf netfilter.org zwar gelesen, aber das mit dem -I
 irgendwie falsch interpretiert.

  Mittels iptables -L -n --line-numbers kannst Du Dir auch die Zeilen der
  Ausgabe numieren lassen.
 
  Um mit iptables umgehen zu lernen gibt es ein sehr gutes Iptables
  Tutorial[1] von Oskar Andreasson und ein Script Easy Firewall Generator
  for IPTables [2], dass danach Firewalls generiert.

 Hmmm... eigentlich blöde wegen einem einzigen Spezialfall so einen aufwand
 zu betreiben, aber OK... lernen verlangsamt ja angeblich den
 verdummungsprozess ;-)

 Dank euch allen.

Im Gegensatz zu pf, wenn ich das richtig verstanden habe, arbeitet iptables 
die Regeln von oben nach unten ab und nimmt die erste Regel, die passt, alle 
darunter werden für das Paket dann ignoriert. 
Um eine Regel z.B. an 2. Stelle einzufügen, ist -I das richtige:
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT
um z.B. ssh zusätzlich zu erlauben.

Mfg,
Thomas



Re: [OT] Reihenfolge der iptables rules

2006-06-01 Diskussionsfäden Juergen Christoffel
On Thu, Jun 01, 2006 at 05:40:25PM +0200, Thomas Gräber wrote:
 Im Gegensatz zu pf, wenn ich das richtig verstanden habe, arbeitet iptables 
 die Regeln von oben nach unten ab und nimmt die erste Regel, die passt, alle 
 darunter werden für das Paket dann ignoriert. 

Jein: zwar arbeitet iptables die Regeln erst mal von oben nach unten ab.
Aber zum einen kannst Du in iptables z.B. mittels -j die Reihenfolge der
Abarbeitung aendern. Zum anderen gibt es Regeln, die durchaus die weitere
Verarbeitung zulassen, sonst koenntest Du z.B. nicht erst loggen und dann
ein reject erzeugen.

Ein Beispiel:

  $IPT -A icmp_packets --fragment -p ICMP -j LOG --log-prefix DROP: 
  $IPT -A icmp_packets --fragment -p ICMP -j DROP

Hier wird erst ein Log-Eintrag erzeugt, dann das Packet weggeworfen (es
koennte auch akzeptiert werden).

--jc

-- 
  Ignorance more frequently begets confidence than does knowledge.
-- Charles Darwin


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: [OT] Reihenfolge der iptables rules

2006-06-01 Diskussionsfäden Juergen Christoffel
On Thu, Jun 01, 2006 at 05:10:19PM +0200, Chris C. wrote:
 Am Donnerstag 01 Juni 2006 15:44 schrieb Juergen Christoffel:
  Es gibt kein dazwischenquetschen aber es gibt ein Einfuegen an einer
  bestimmten Position mittels -I int anstatt -A. 
 
 Ja, ich hatte die Doku auf netfilter.org zwar gelesen, aber das mit dem -I 
 irgendwie falsch interpretiert.

Ausser -I und -A kannst Du uebrigens auch mittels -R Regeln ersetzen. Ich
erlaube zum Beispiel meiner Workstation zuhause, die bei DSL-Flatrate alle
24 Stunden eine neue IP-Adresse kriegt, bestimmte Zugriffe auf einem
externen Host. Auf diesem Host laeuft ein Script, dass die Regeln aendert,
wenn sich die Adresse aendert:


#! /bin/bash

CHAIN=dsl_in
MYHOST=$(host gipsnich.dyndns.org | awk '{print $NF}')

# list: iptables -v -n --line-numbers -L dsl_in

### some sanity checks first

# check if chain exists
if iptables -n -L $CHAIN  /dev/null ; then
  : ok
else
  echo $0: chain $CHAIN missing, exiting
  exit 1
fi

# check if ip address looks ok
if  expr $MYHOST : '.*[0-9][0-9].[0-9][0-9]'  /dev/null; then
  : ok
else
  echo $0: bogus ip address $MYHOST, exiting
  exit 1
fi

iptables -R dsl_in 1 -p TCP -s $MYHOST --dport  80 -j ACCEPT
iptables -R dsl_in 2 -p TCP -s $MYHOST --dport 443 -j ACCEPT
iptables -R dsl_in 3 -p TCP -s $MYHOST --dport  25 -j ACCEPT
iptables -R dsl_in 4 -p TCP -s $MYHOST --dport  53 -j ACCEPT


Hier ist eine eigene Chain dsl_in eingetragen, die fuer eingehende
Verbindungen aus dem Adressbereich meines Providers angesprungen wird und
nur die private Adresse filtert. Alle anderen fallen unten aus der
Chain wieder raus in die normale Verarbeitung.

Dank der separaten Chain bin ich immer sicher, dass die hart kodierten
Positionen 1..4 in der Chain auch stimmen. Denn bei den uebergeordneten
Chains koennte sich das durch -I weiter vorne schon mal aendern, was dann
komplexeres Parsen erzwingen wuerde

--jc

-- 
  Ignorance more frequently begets confidence than does knowledge.
-- Charles Darwin


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)