On Wed, Mar 12, 2003 at 09:06:14PM +0100, Patrick Pletscher wrote: > ich habe mir das Problem nochmals angesehen und habe einmal noch insmod > ip_nat_ftp gemacht, dann hats funktioniert... > > > > > Die Gegenrichtung fehlt. > > > > Bin natürlich nach wie vor daran interessiert mein Script so gut wie > möglich zu halten, was meinst du mit die Gegenrichtung fehlt (sorry bin > noch ziemlich neu bei iptables). Naja. Du mußt den Paketen aus dem internen Netz erlauben, daß sie raus dürfen und die Antworten des Servers auf diese Pakete mußt Du wieder rein lassen. Kann man z.B. so machen: | iptables -A FORWARD -i $INTERN -o $EXTERN -p tcp --sport 1024:65535 --dport 21 -j ACCEPT | iptables -A FORWARD -i $EXTERN -o $INTERN -p tcp --sport 21 --dport 1024:65535 -j ACCEPT Damit wird die Kontrollverbindung durchgelassen. Wenn man will kann man die zweite Regel auch noch ein bißchen erweitern: | iptables -A FORWARD -i $EXTERN -o $INTERN -p tcp --sport 21 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT Damit werden dann nur die Pakete durchgelassen, die auch wirklich eine Antwort sind. Jetzt noch die Datenverbindung (aktives FTP): | iptables -A FORWARD -i $EXTERN -o $INTERN -p tcp --sport 20 --dport 1024:65535 -j ACCEPT | iptables -A FORWARD -i $INTERN -o $EXTERN -p tcp --sport 1024:65535 --dport 20 -j ACCEPT oder statefull: | iptables -A FORWARD -i $EXTERN -o $INTERN -p tcp --sport 20 --dport 1024:65535 -m state --state ESTABHLISHED,RELATED -j ACCEPT | iptables -A FORWARD -i $INTERN -o $EXTERN -p tcp --sport 1024:65535 --dport 20 -m state --state ESTABHLISHED -j ACCEPT Passives FTP ist da schon ungünstiger. Damit reißt man sich deutlich größere Löcher rein: | iptables -A FORWARD -i $INTERN -o $EXTERN -p tcp --sport 1024:65535 --dport 1024:65535 -j ACCEPT | iptables -A FORWARD -i $EXTERN -o $INTERN -p tcp --sport 1024:65535 --dport 1024:65535 -j ACCEPT Man muß in der stateless-Variante also Verbindungen zwischen sämtlichen unprivilegierten Ports erlauben. Ist natürlich nicht so schön. Man könnte noch den TCP-Header auswerten und verbieten daß die Verbindungen von draußen aufgebaut werden. Das war es dann aber schon. Zustandsbehaftet geht es dann so: | iptables -A FORWARD -i $INTERN -o $EXTERN -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABHLISHED,RELATED -j ACCEPT | iptables -A FORWARD -i $EXTERN -o $INTERN -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABHILSHED -j ACCEPT Der Vorteil der zustandsbehafteten Variante ist, daß da nur die ausgehende Verbindung nach Port 21 erlaubt ist. Der ganze Rest ist nur dann erlaubt, wenn er zu bestehenden Verbindungen gehört. Die einfachste Variante wäre ja, alles rausgehende zu erlauben und die Antworten durchzulassen: | iptables -A FORWARD -i $INTERN -o $EXTERN -j ACCEPT | iptables -A FORWARD -i $EXTERN -o $INTERN -m state --state ESTABHLISHED,RELATED -j ACCEPT Für meine Workstation reicht das. (natürlich mit INPUT und OUTPUT statt FORWARD). Allerdings wurden vor nicht allzulanger Zeit da noch ein paar Bugs gefunden. Deshalb verwende ich auf den wichtigen Maschinen dann die klassische zustandslose Variante mit einem zusätzlichen -m state (so ähnlich wie oben beschrieben). Da ist ein Bug dann nicht so schlimm, weil immer noch die Sicherheit der zustandslosen Version bleibt (mehr gab es bei 2.2 ja auch nicht). HTH Daniel
Attachment:
pgpFsC9H0mLYM.pgp
Description: PGP signature