PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OpenBSD Firewall: Probleme mit FTP



-leliel-
09.08.02, 23:34
Hi,

ich hab mir grad ne neue fw aufgesetzt ... leider hab ich die configs der alten net gesichert, und musste nun nochmal alles neu schreiben. :(

wenn ich nun auf nen ftp verbinden will (ftp.openbsd.org z.b.)

kann ich mich normal einloggen.

sobald ich jedoch daten ziehen will (ls, dir) kommt ne meldung:

ftp> dir
200 PORT command successful.
425 Can't build data connection: Connection refused.

woran liegt das?

thanks

mpphp
09.08.02, 23:56
hallo,

'keep state' vergessen....?
ansonsten musst du mal dein script posten

grüße, mark

-leliel-
10.08.02, 00:02
#--------------------------------------------------------------------------
# PF ruleset, 11 dec. 2001
#
# Liberally adapted from the pf man page, the OpenBSD "Network How-To",
# and my own rulesets.
#--------------------------------------------------------------------------

#--------------------------------------------------------------------------
# Definitions
Ext = "tun0" # External interface
Int = "rl0" # Internal interface
Loop = "lo0" # Loopback interface
IntNet="172.30.0.0/16" # Internal network

NoRoute = "{ 127.0.0.1/8, 172.16.0.0/12, 10.0.0.0/8, 255.255.255.255/32 }"

InServicesTCP = "{ ssh, http, https, ftp, ftp-data, auth }"
InServicesUDP = "{ domain }"
OutServicesTCP = "{ http, https, ssh, ftp, ftp-data, auth }"
OutServicesUDP = "{ domain }"

XMMS = "{ 6000, 7500, 8000, 8004, 8044, 8034, 8052, 8038, 8010, 8400, 8014, 8026, 8048, \
8002, 8024, 8028, 8080 }"
RealAudio = "{ 554, 7070, 8080 }"




#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
# Clean up fragmented and abnormal packets
# By default in pf, packets which contain IP options are blocked. Good.
scrub in on { $Ext, $Int } all
#--------------------------------------------------------------------------


#-------------------------------------------------------------------------
# Defaults
# block and log everything
block out log on $Ext all
block in log on $Ext all
block return-rst out log on $Ext proto tcp all
block return-rst in log on $Ext proto tcp all
block return-icmp out log on $Ext proto udp all
block return-icmp in log on $Ext proto udp all

block in quick inet6 all
block out quick inet6 all
#-------------------------------------------------------------------------

#--------------------------------------------------------------------------
# loopback packets left unmolested
pass in quick on $Loop all
pass out quick on $Loop all
#--------------------------------------------------------------------------

#-------------------------------------------------------------------------
# Immediate blocks
# fuzz any 'nmap' attempt
block in log quick on $Ext inet proto tcp from any to any flags FUP/FUP
block in log quick on $Ext inet proto tcp from any to any flags SF/SFRA
block in log quick on $Ext inet proto tcp from any to any flags /SFRA

# don't allow anyone to spoof non-routeable addresses
block in log quick on $Ext from $NoRoute to any
block out log quick on $Ext from any to $NoRoute

# silently drop broadcasts (cable modem noise)
block in quick on $Ext from any to 255.255.255.255
#-------------------------------------------------------------------------




#-------------------------------------------------------------------------
# PASS rules

# ALL -- we don't normally do that. For debugging only.
# pass in quick on $Ext all keep state
# pass out quick on $Ext all keep state

# ICMP
pass out quick on $Ext inet proto icmp all icmp-type 8 code 0 keep state
pass in log quick on $Ext inet proto icmp all icmp-type 8 code 0 keep state

# Services we provide to the outside world
# pass in quick on $Ext inet proto udp from any to any port $InServicesUDP keep state
pass in quick on $Ext inet proto tcp from any to any port $InServicesTCP flags S/SA keep state

# Standard services we want to access in the world
pass out quick on $Ext inet proto udp from any to any port $OutServicesUDP keep state
pass out quick on $Ext inet proto tcp from any to any port $OutServicesTCP flags S/SA modulate state

# Special services
pass out quick on $Ext inet proto tcp from any to any port $XMMS flags S/SA modulate state
pass out quick on $Ext inet proto tcp from any to any port $RealAudio flags S/SA modulate state

mpphp
10.08.02, 13:47
hallo,

ich glaube kaum, dass du so viele dienste von außen zugänglich machen willst. du hast die selben "inports" wie "outports"
für was brauchst du von außen zugang auf port https....dazu müsstest du ein eigenes ssl-zertifikat besitzen.
wenn du nicht wirklich von außen erreichbar sein willst, würde ich alle "pass in" regeln löschen

zum ftp:
---------

ich denke du verwendest wie die meisten eine passive ftp-verbindung.
dazu baust du ein einer ersten kontrollverbindung einen "port" zum ftp-server auf und frägst nach, ob er passives ftp kann.
falls der server passives ftp unterstützt öffnet der einen weitern port und teilt das dem client mit. dann beginnt die datenübertragung.
d.h also du benötigst für passives ftp zwei verbindungen hintereinander. eine die die verbindung auf port "ftp" aufbaut und danach eine die alle ports >1023 anspricht

du >1023 -> ftpserver 21
du > 1023 -> ftpserver >1023

grüße, mark

-leliel-
10.08.02, 17:47
ok, danke. aber wofuer steht dann ftp-data?

und was muss ich nun genau tun, damit ich ftp verwenden kann?

mpphp
10.08.02, 18:25
hi,

ich meine nicht port 1023 sondern alle ports über 1023, also unpriviligierte ports.
der ftp-data port=20 wird verwendet falls du aktives ftp benutzt, was du erstens nicht machen solltest(aus sicherheitsgründen) und zweitens auch nicht machst. zumindest verwendet ein browser eigentlich immer passives ftp.

und bei passivem ftp baust der client eine verbindung zu einem port über (>) 1023 auf.


viele grüße, mark

-leliel-
10.08.02, 18:34
ok, ftp-data hab ich auch raus ...

aber alle port < 1023 werd ich nich frei geben muessten, oder? ich mein, dann waere der sinn einer firewall verfehlt. :D

mpphp
10.08.02, 18:56
es ist nicht die feine art seine vorangegangenen postings inhaltlich zu verändern.

.....warum wäre der sinn deiner firewall verfehlt?!

lies erstmal die manpage von pf und setz eigene regeln auf.
deine bisherige firewall war sinnentstellend.

dein client baut eine verbindung zu server auf und sagt er möchte daten über passives ftp übertragen. der server sagt dem client dann z.b. "ok machen wir" und teilt dem client dann gleich mit welchen port der server für den client bereit hält. dass kann aber JEDER port über 1023 sein. daher > 1023

überwachen tust du das ganze ja über keep state bzw. modulate state. damit kann deine firewall die session und die dazugehörigen daten überwachen.

mark

-leliel-
10.08.02, 19:08
es ist nicht die feine art seine vorangegangenen postings inhaltlich zu verändern.


weiss ich. jedoch war mir der sinn meiner msg selbst nich so wirklich klar ... :D

die daten hatte ich aus einem tut, insofern ging ich davon aus, dass es wenigsten ein bisschen sinn hat. hab hier zwar auch noch ein tut liegen, wo pf genau erklaert wird, aber momentan keine lust das durchzuarbeiten ...

soll ich nun allen tcp traffic mit keep state raus lassen? oder gibt es noch sinnvollere varianten?

sorry, habs nich so mit firewalling. lasse mich aber gerne belehren. :)

mpphp
10.08.02, 19:43
>> soll ich nun allen tcp traffic mit keep state raus lassen?

tip: probiers aus. verwende meine vorschläge und schau was passiert. learning by doing.
erst eine regel die nur auf port 21 zugreift. > geht nicht
dannach ne regel die alle ports >1023 anspricht > es klappt

dann benutzt du nen port den du sonst nie verwenden würdest, z.b. irc
du wirst sehen deine firewall blockt.
einfach probieren


grüße, mark

-leliel-
10.08.02, 20:28
naja, du sagst das so einfach, und generell mach ich auch alles nach dem prinzip. aber ne firewall soll eigentlich schuetzen. und wenn ich da mit learning by doing mist baue, ist eben das komplette lan unsicher. :(

wobei eigentlich ja nix passieren kann, wenn ich pass out mache?!

naja, muss wohl doch das tut durcharbeiten ... danke vielmals fuer deine muehen. :)

btw. falls du noch ein paar gute links zum thema hast, wuerd ich mich freuen, wenn du sie hier verewigen koenntest. ;)

so long, -lcf-

nachtrag:



# FTP
pass out quick on $Ext inet proto tcp from any to any port > 1023 keep state


-> geht. :)