PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit iptables und FTP



Annette
04.06.02, 21:54
Hi!

Ich habe ein Problem mit iptables und FTP. Für passives FTP habe ich es wie folgt definiert:

INTERFACE="ppp0"
LOCAL="192.168.3.0/24"
IPTABLES="/usr/sbin/iptables"

...
#FTP allgemein#
${IPTABLES} -A OUTPUT -j ACCEPT -o ${INTERFACE} -p tcp \
--sport 1024: --dport ftp -m state --state NEW,ESTABLISHED,RELATED
${IPTABLES} -A INPUT -j ACCEPT -i ${INTERFACE} -p tcp \
--sport ftp -m state --state ESTABLISHED,RELATED
${IPTABLES} -A FORWARD -j ACCEPT -o ${INTERFACE} -p tcp -s ${LOCAL} \
--sport 1024: --dport ftp -m state --state NEW,ESTABLISHED,RELATED
${IPTABLES} -A FORWARD -j ACCEPT -i ${INTERFACE} -p tcp \
--sport ftp -d ${LOCAL} -m state --state ESTABLISHED,RELATED

#Passives FTP#
${IPTABLES} -A OUTPUT -j ACCEPT -o ${INTERFACE} -p tcp \
--sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED
${IPTABLES} -A INPUT -j ACCEPT -i ${INTERFACE} -p tcp \
--sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED
...


Es hört sich eigentlich ganz schlüssig an, jedoch jedes Mal wenn er in passive mode geht bleibt die Verbindung hängen. Also irgendwo muß ein Fehler sein.


Gruß,
Annette

[WCM]Manx
05.06.02, 06:21
Hi!

Läuft auf Deiner Firewall ein FTP-Server und gibt's die Probleme dabei?
Oder hast Du die Probleme bei externen FTP-Servern?

Empfehlung:
http://www.suse.de/en/support/whitepapers/proxy_suite/ (nicht auf SuSE beschränkt!)

Dort gibt's Du an, dass er immer passiven mode verwenden soll und beschränkst die Ports, dass nicht alle 1024-65535 verwendet werden.

Auf der Firewall:

Warum bei FTP-Allgemein nur UDP als Protokoll?
Bzw. vergiss nicht dass FTP eben zwei Ports braucht, ftp und ftp-data!

Grüße

Manx

Annette
05.06.02, 12:17
Hi!

Ich habe Probleme bei externen FTP-Servern. Ich möchte per passivem FTP auf sie zugreifen; kein aktives FTP und somit auch keine Regeln für FTP DATA.

Mit den Regeln für passives FTP habe ich mir den Port 1024 ausgesucht.

UDP sollte TCP heißen. Hab die falschen Regeln gepostet. Ist jetzt korrigiert. ;-)

Kennt jemand eine Lösung meines Problems rein mit iptables?


Gruß,
Annette

jduck01
05.06.02, 13:26
Hi,

{IPTABLES} -A OUTPUT -j ACCEPT -o ${INTERFACE} -p tcp \
--sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED

Hier solltest du noch das NEW im state zulassen, sonst geht das neue Packet erst gar nicht raus.

CU
JDuck01

[WCM]Manx
05.06.02, 14:40
Hi!

Sitzt Du jetzt auf der Firewall beim FTP (input/output) oder dahinter auf einem Client (forward), oder beides?

Grüße

Manx

Annette
05.06.02, 16:59
Hi!

Ich sitze sowohl auf der Firewall (am Linux-Rechner) als auch dahinter an meinem WinNT-Client.

Nach der von JDuck01 vorgeschlagenen Änderung funktioniert es jetzt vom Linux-Rechner, also auf der Firewall. Vom Windows-Client funktioniert es weiterhin leider nicht. Gleiche Regeln bzw. Regeländerungen mit INPUT und FORWARD haben es leider auch nicht gebracht.

@jduck01
Danke für den Tip :)

Gruß,
Annette

[WCM]Manx
05.06.02, 17:18
Hi!

Nur die Forward Regeln:

HIGH_PORTS = 1024:65535

# Rückkanal, bestehende Verbindungen

${IPTABLES} -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Verbindungsaufbau ftp:

${IPTABLES} -A FORWARD -o ${INTERFACE} -p tcp \
--sport ${HIGH_PORTS} -dport ftp -m state --state NEW -j ACCEPT

# passives FTP:

${IPTABLES} -A FORWARD -o ${INTERFACE} -p tcp \
--sport ${HIGH_PORTS} -dport ${HIGH_PORTS} -m state --state NEW -j ACCEPT

So sollte es funktionieren!

Grüße

Manx

PS: einen FTP-Client, der passives FTP kann, hast Du natürlich

Annette
05.06.02, 17:48
Hi Manx!

Wenn ich das richtig verstehe, ist das eine Lösung, in der alle Ports von 1024 bis 65635 für passives ftp geöffnet werden. Ich habe gelesen, es gibt auch eine Lösung, wenn man nur einen dieser Ports öffnet An dieser Lösung bin ich gerade am basteln. Oder habe ich da was falsch verstanden?

FTP-Client hab ich natürlich (FlashFXP).

Gruß,
Annette

geronet
05.06.02, 18:55
Hallo Anette,

probiers doch mit dem ftp-masq-Modul.
Ich weiss jetzt nicht wie es beim 2.4er Kernel heisst aber beim 2.2er hiess es ip_masq_ftp.

Grüsse, Stefan

[WCM]Manx
05.06.02, 22:16
Hi Annette!

Das ist ja das Problem bei ftp.
Aktiv musst einen Verbindungsaufbau (SYN) von außen zulassen, Passiv öffnest high-port auf high-port.

Mögliche Lösung:

Wie schon oben beschrieben ftp-proxy-suite.
Da kannst angeben welche Ports für passives FTP verwendet werden dürfen. (z.B 42900-42999) und der Client muss nicht passives FTP können!

Grüße

Manx

Annette
06.06.02, 12:42
Danke für euere Antworten. Um nochmal zusammenzufassen: vom Linux-Server aus ist es durchaus möglich passives FTP durchzuführen, indem man sich auf einen Highport, bei mir 1024, beschränkt. Das funktioniert alles auch ohne Probleme. Mein Problem stellt sich wie fogt da:
Wenn ich vom WinNT-Client mit einem FTP-Client (z.B.:FlashFXP) die Verbindung zu einem FTP-Server herstelle, wird diese durchaus hergestellt, jedoch wird die Verbindung nach dem Versuch in den passiven mode umzuschalten und einem entsprechenden timeout zurückgesetzt. Dies sieht z.B. so aus:

Connecting to ftp.suse.de
Connected to ftp.suse.de Port 21
220 Welcome to ftp.suse.de.
USER anonymous
331 Guest login ok, send your complete e-mail address as password.
PASS (hidden)
230 Guest login ok, access restrictions apply.
SYST
215 UNIX Type: L8
REST 100
350 Restarting at 100. Send STORE or RETRIEVE to initiate transfer.
REST 0
350 Restarting at 0. Send STORE or RETRIEVE to initiate transfer.
PWD
257 "/" is current directory.
TYPE A
200 Type set to A.
PASV
227 Entering Passive Mode (213,95,15,211,160,40).
Data Socket Error: Connection failed (Connection timed out)
421 Timeout (120 seconds): closing control connection.
Connection lost: ftp.suse.de

Ich weiß, daß der Server, sobald er in den passiven mode schaltet mit dem Client über einen Highport versucht die Verbindung aufzunehmen. Meiner Meinung nach ist hier nicht das Problem, daß man alle Highports öffnen muß, sondern daß der FTP-Server hierbei zwar meinen Linux-Server findet, jedoch nicht den WinNT-Client. Das scheint eher ein Masquerading-Problem zu sein. Dehalb habe ich, wie Stefan vorgeschlagen hat, die Module ip_conntrack_ftp und ip_nat_ftp dazugeladen. Leider ohne Erfolg :( :( :(

Hat noch jemand eine Idee, welche Regel ich aufstellen muß, daß der externe FTp-Server meinen Windows-Client findet? Oder was auch immer...

Gruß,
Annette

geronet
06.06.02, 17:16
Hast du auch die Portforwarding Regeln ausgeschalten?
Bei mir funktioniert passives und aktives FTP vom Client aus über nen 2.2.18 Kernel mit dem ftp_masq Modul, aber das müsste ja für den 2.4er auch gelten.

Stelle auch sicher dass keine Pakete von der Firewall gedroppt werden.

Grüsse, Stefan

Annette
06.06.02, 22:56
Ich hab eigentlich für FTP nur die oben angebenen Regeln mit der kleinen Veränderung von jduck01.

Die Firewall dropt auch keine Pakete, denn beim Linux-Rechner auf dem die Firewall sitzt kommen sie ja auch, wenn ich passives FTP von ihm aus bspw. mit gftp mache.

Gruß,
Annette