[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: FTP über Router hinweg



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


Reply to: