Mal wieder: IPTABLES und FTP

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
ChrisR
Beiträge: 11
Registriert: 25.08.2005 01:10:39

Mal wieder: IPTABLES und FTP

Beitrag von ChrisR » 25.08.2005 01:24:54

Guten Tag,

Hab mich jetzt mittlerweile halbtot gesucht, hier im Forum und auch über Google, konnte aber keine Lösung für mein Problem finden.
- Hoffe ich habe nichts allzu offensichtliches übersehen.

Ich habe heute die Firewall auf meinem Server eingestellt. Habe jetzt jedoch ein Problem mit meinem FTP Server.
Ich kann ohne weiteres connecten, aber das ist auch schon alles. Spätestens beim Directory Listing versagt er.

Soweit ich das verstehe habe ich ein Problem mit dem ip_conntrack_ftp Modul.

So sieht mein firewall Script momentan aus:

Code: Alles auswählen

#!/bin/bash

#Basis ist: http://oceanpark.com/notes/firewall_example.html

#Erstma flushen
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD

# Existierende und Related akzeptieren wir
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Vom Loopback geht alles:
iptables -A INPUT -i lo -s 0/0 -d 0/0 -j ACCEPT

#connection nur zum sshd, ftp
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 22 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 4021 --syn -j ACCEPT

#Alles udp/tcp mässige weg was nich oben nicht explizit erlaubt wurde
iptables -A INPUT -s 0/0 -d 0/0 -p udp -j DROP
iptables -A INPUT -s 0/0 -d 0/0 -p tcp --syn -j DROP

#Zu guter letzt: Standardpolicies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
Das Modul ip_conntrack_ftp ist geladen.

Der FTP läuft auf Port 4021 ich habe auch schon

Code: Alles auswählen

modprobe ip_conntrack_ftp port=4021
ausprobiert.

Weiterhin habe ich bestimmt ein halbes duzend verschiedene Tipps und Tutorials ausprobiert. Leider ohne Erfolg.

Iptables ist noch ziemliches neuland für mich, bitte um Nachsicht.

Danke im Vorraus
ChrisR
"My software never has bugs ... it just develops random features"

Benutzeravatar
Six
Beiträge: 8071
Registriert: 21.12.2001 13:39:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Siegburg

Beitrag von Six » 25.08.2005 22:14:43

Ich kenne mich mit dem besagten Modul nicht aus, aber diese Regel sollte normalerweise FTP-Freuden bescheren:

Code: Alles auswählen

iptables -A INPUT -p tcp --dport ftp -j ACCEPT

ChrisR
Beiträge: 11
Registriert: 25.08.2005 01:10:39

Beitrag von ChrisR » 26.08.2005 00:07:52

Danke für die Antwort, es hilft aber leider nichts...

Mein FTP Client sagt nach wie vor folgendes:

Code: Alles auswählen

[R] PASV
[R] 227 Entering Passive Mode (85,10,192,73,128,185).
[R] Opening data connection IP: 85.10.192.73 PORT: 32953
[R] Data Socket Error: Connection timed out
[R] List Error
Bis zu diesem Punkt läuft alles problemlos, dh. der User kann sich einloggen etc.
Ab dem dem Punkt an dem er versucht das Verzeichnis aufzulisten (egal ob Aktiv oder Passiv) versagt er.

Bin am verzweifeln. :(
"My software never has bugs ... it just develops random features"

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 26.08.2005 06:55:23

hallo,

hab zwar auch nur gefährliches halbwissen, aber bei mir geht es so einwandfrei.

Auszug:

Code: Alles auswählen

# alles droppen
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
...
...

# input chains ...
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A INPUT -i $INTIF -s $INTLAN -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp  --dport 21 -j TCPACCEPT
...
...
# output chains
$IPTABLES -A OUTPUT -o lo -j ACCEPT
$IPTABLES -A OUTPUT -o $INTIF -d $INTLAN -j ACCEPT
$IPTABLES -A OUTPUT -o $EXTIF -p tcp  --sport 21 -j ACCEPT
...
...
Wenn du willst kann ich dir auch meine komplette firewall zukommen lassen.

MfG
Andy
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

ChrisR
Beiträge: 11
Registriert: 25.08.2005 01:10:39

Beitrag von ChrisR » 26.08.2005 12:52:10

Hm hab ich probiert. Kann aber folgenden Teil nicht verwenden:

Code: Alles auswählen

$IPTABLES -A INPUT -i $EXTIF -p tcp  --dport 21 -j TCPACCEPT 
Kriege diese Fehlermeldung

Code: Alles auswählen

iptables v1.2.11: Couldn't load target `TCPACCEPT':/lib/iptables/libipt_TCPACCEPT.so: cannot open shared object file: No such file or directory
Fehlt mir evtl eine Bibliothek oder hast du eine andere Version von Iptables?

Ich glaube allerdings nicht das mein Problem mit Port 21 zu tun hat.
Hab mich etwas schlauer gemacht, mit FTP versucht er neben der Verbindung auf 21 ("Control Connection") noch auf einem zufälligen port die sog. "Data Connection" aufzumachen.
Das scheint nicht zu klappen.
Wenns nicht anders geht muss ich halt einen größeren Port-Bereich aufmachen und irgendwie meinem FTPD beibringen das er nur auf diesen Ports die 2. Verbindung öffnen darf.

Unschön, aber ich werds probieren.

Danke für die Hilfe, wenn jemand noch ne Idee hat, ich bin für alles offen.
"My software never has bugs ... it just develops random features"

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 26.08.2005 12:55:09

ja sorry ... TCPACCEPT ist bei mir ein benutzerdefinierter chain ...
mach einfach ein ACCEPT daraus ... dann müsste es klappen

ich lasse bei mir auch alle related unpriv-ports rein:

Code: Alles auswählen

UNPRIVPORTS="1024:65535"

$IPTABLES -A INPUT -i $EXTIF -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp --dport $UNPRIVPORTS -m state --state RELATED -j TCPACCEPT
$IPTABLES -A INPUT -i $EXTIF -p udp --dport $UNPRIVPORTS -m state --state RELATED -j ACCEPT
evtl. behebt das ja dein ftp-problem ...

aber wie gesagt... lass dir besser von jemanden helfen der da richtig ahnung hat...
Meine FW ist im laufe der zeit gewachsen. Hier und da durch googlen und forum
durchsuchen verbessert bzw. verändert.
Zuletzt geändert von finupsen am 26.08.2005 13:03:17, insgesamt 1-mal geändert.
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

ChrisR
Beiträge: 11
Registriert: 25.08.2005 01:10:39

Beitrag von ChrisR » 26.08.2005 13:02:01

Ah! Wieder etwas schlauer geworden ;)

Hat allerdings nichts gebracht. Dieselbe Regel hab ich schon drin.

Wie gesagt die Verbindung auf Port 21 tut ohne weiteres ihren Dienst.

Bin gerade dabei dem FTPD zu sagen welche Ports er verwenden darf.
Die kann ich ja dann gezielt freigeben.

Besonders behagen tut mir das aber nicht - wären dann einige offene Ports.
Im Prinzip das was du oben gemacht hast, ich will das allerdings weiter beschränken (auf vielleicht 100 Ports statt einigen Tausend)

Ich weis aus anderen Posts das es irgendwie möglich sein muss das er diese 2. Verbindung als "RELATED" zur 1. ansieht - das klappt nicht.
Dann sollte meine 1. Regel in der INPUT Chain greifen und es sollte gehen.
(oder hab ich hier nen Denkfehler)
Das wäre zumindest die schöne Variante...

Danke dir auf jeden Fall für deine Hilfe, ich gucke mich weiter um :)
"My software never has bugs ... it just develops random features"

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 26.08.2005 13:07:50

ja, das mit dem portbereich >= 1024 ist nicht so das problem. Diese ports haben keine root-priv.

Bei mir sind die noch zusätzlich gegen syn-floods geschützt eben durch diese TCPACCECPT

Code: Alles auswählen

$IPTABLES -N TCPACCEPT
$IPTABLES -A TCPACCEPT -p tcp --syn -m limit --limit $TCPSYNLIMIT --limit-burst $TCPSYNLIMITBURST -j ACCEPT
$IPTABLES -A TCPACCEPT -p tcp --syn -j LSYNFLOOD
$IPTABLES -A TCPACCEPT -p tcp ! --syn -j ACCEPT
wobei LSYNFLOOD wiederum ein custum-chain für synfloodlogging ist ... lol
einfach durch drop ersetzen ...
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

ChrisR
Beiträge: 11
Registriert: 25.08.2005 01:10:39

Beitrag von ChrisR » 26.08.2005 13:29:14

Es ist zum verrückt werden ;)

Also ich habe das mal ausprobiert.

Code: Alles auswählen

$IPTABLES -A INPUT -p tcp --dport $UNPRIVPORTS -m state --state RELATED -j TCPACCEPT 
Bringt überhaupt nichts.

Wenn ich aber den ganzen state Kram weglasse und die Ports einfach so durchschalte läuft es (logischerweise).

Er scheint das bei mir das mit dem --state RELATED einfach nicht tut.
Sonst hätte ja meine 1. Regel (siehe mein erster Post) in der INPUT bereits die Verbindung durlassen müssen.

Weitere Ideen?
Ich weis absolut nicht mehr weiter.
"My software never has bugs ... it just develops random features"

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

Beitrag von nepos » 26.08.2005 13:36:40

Grade mal im Netz gewuehlt und folgendes gefunden: http://kalamazoolinux.org/presentations ... track.html.
Was du brauchst, wie du schon angemerkt hast, ist das connection tracking des ip_conntrack_ftp Moduls zu iptables.
Wie in obigem Artikel beschrieben brauchst du dazu aber die Status-Informationen zu den Verbindungen, das heisst, du musst deinen reinen Paket-Filter um diese Infos ergaenzen und das heisst wiederum, dass du mit statefull Regeln arbeiten musst.

In obigem Artikel ist die ganze Chose dann auch in einem Beispiel fuer FTP erklaert (ganz am Ende). Ich hoffe, dass dir der Link weiterhilft.

ChrisR
Beiträge: 11
Registriert: 25.08.2005 01:10:39

Beitrag von ChrisR » 26.08.2005 13:44:04

Tausend dank,

Ich werd mal reinlesen und probieren.

Gruß
ChrisR
"My software never has bugs ... it just develops random features"

ChrisR
Beiträge: 11
Registriert: 25.08.2005 01:10:39

Beitrag von ChrisR » 26.08.2005 18:34:55

Habs mal durchgelesen und die rules darin z.T. ausprobiert.

Leider immer noch nichts.
Wenn ich das ganze richtig verstehe entspricht das Script das ich gepostet habe weitgehend den Ideen dieses Tutorials.

Oder liege ich daneben?

Jedenfalls klappt die ganze Sache mit dem RELATED bei mir offenbar nicht so wie sie soll....
"My software never has bugs ... it just develops random features"

Benutzeravatar
Schlumpfbert
Beiträge: 46
Registriert: 15.05.2004 17:24:29
Wohnort: Emden

Beitrag von Schlumpfbert » 26.08.2005 18:54:57

Versuch das mal, habe deins leicht modifiziert:

Code: Alles auswählen

#!/bin/bash

#Basis ist: http://oceanpark.com/notes/firewall_example.html

#Erstma flushen
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD

# Existierende und Related akzeptieren wir
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Vom Loopback geht alles:
iptables -A INPUT -i lo -j ACCEPT

#connection nur zum sshd, ftp
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 4021 -j ACCEPT

#Alles udp/tcp mässige weg was nich oben nicht explizit erlaubt wurde
#unnütz, wird über default policy abgedeckt
#iptables -A INPUT -s 0/0 -d 0/0 -p udp -j DROP
#iptables -A INPUT -s 0/0 -d 0/0 -p tcp --syn -j DROP

#Zu guter letzt: Standardpolicies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
Zuletzt geändert von Schlumpfbert am 26.08.2005 18:57:56, insgesamt 3-mal geändert.
Training ist ein Zeichen von Schwäche

ChrisR
Beiträge: 11
Registriert: 25.08.2005 01:10:39

Beitrag von ChrisR » 26.08.2005 18:55:00

Hallo mal wieder,

Also da stateful bei mri nicht will, hab ich jetzt notgedrungen Ports im unprivilegierten bereich für FTP druchgeschaltet.
Leider komplett ohne absicherungen durch --state

Wenn noch jemand ne Idee hat wie ich dieses connection-tracking zum laufen bekomme dann her damit, ich nehm alles.

Ansonsten muss ich halt damit leben.....

C.
"My software never has bugs ... it just develops random features"

ChrisR
Beiträge: 11
Registriert: 25.08.2005 01:10:39

Beitrag von ChrisR » 26.08.2005 19:01:06

*LOL* nahezu synchron gepostet

Hallo Schlumpfbert,

Also soweit ich das sehe hast du nur die letzten beiden einträge auskommentiert, oder haben meine trüben Augen irgendwelche subtileren modifikationen übersehen?

Du hast natürlich recht, die einträge waren überflüssig (hab sie jetzt entfernt) - komt davon wenn man nicht von zeit zu zeit den ganzen alten kram aus den skripten entfernt.

Weitergebracht hats mich leider nicht...
Thnx
C.
"My software never has bugs ... it just develops random features"

Benutzeravatar
Schlumpfbert
Beiträge: 46
Registriert: 15.05.2004 17:24:29
Wohnort: Emden

Beitrag von Schlumpfbert » 26.08.2005 19:07:21

hi chris, ja, deine trüben augen haben noch etwas übersehen ;)
ich hatte die beiden protokoll spezifischen regeln noch abgeändert.
Training ist ein Zeichen von Schwäche

ChrisR
Beiträge: 11
Registriert: 25.08.2005 01:10:39

Beitrag von ChrisR » 26.08.2005 20:35:31

Shit langsam werd ich alt :D

Ich nehm dein script nacher gerade mal und las es durchlaufen.

Dann seh ich was rauskommt.

Danke
C.
"My software never has bugs ... it just develops random features"

ChrisR
Beiträge: 11
Registriert: 25.08.2005 01:10:39

Beitrag von ChrisR » 27.08.2005 01:37:16

Still no luck ... :(

Hab dein Script per Copy and Paste reingeschoben und ausgeführt.

Wieder kein Erfolg.
Langsam hab ich das gefühl das das Problem nicht in den chains liegt.

Ich gönn mir jetzt erstmal ne mütze schlaf...

Dank nochmal an alle die versuchen bzw versucht haben mir zu helfen.
"My software never has bugs ... it just develops random features"

Antworten