pf Rule für Passive FTP

ww

Well-Known Member
Hallo zusammen,

mich plagt ein kleines Problem mit einem Server, auf dem per FTP over SSL zugegriffen werden soll.

Zunächst die pf.conf (gekürzt):
# nic definition
int_if = "tl0"
ext_if = "tl1"

# we accept ftp,ssh, http, https
open_ports = "{ 21 22 80 443 }"

##Tables

##Options
set loginterface $ext_if

# no need to answer unwanted requests
set block-policy drop

# close inactive connections fast - save memory
set optimization aggressive

##Scrub
scrub in on $int_if
scrub in on $ext_if


##Queueing

##Translation


## Filter rules - default deny policy
block in log all
block out log all

# loopback is always ok
pass log quick on lo0 all

# antispoofing
antispoof log quick for $ext_if inet
block in log quick on $ext_if from { 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 255.255.255.255/32 } to any

# tcp in
pass in log quick on $ext_if proto tcp from any to any port $open_ports keep state

# Allow Certain UDP services IN (DNS, NTP)
# pass in log quick on $ext_if proto udp from any to any port { domain, ntp } keep state

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

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

# tcp/udp out
pass out log quick on $ext_if proto udp all keep state
pass out log quick on $ext_if proto tcp all flags S/SA keep state
pass out log quick on $int_if proto udp all keep state
pass out log quick on $int_if proto tcp all flags S/SA keep state



tcpdump meldet (gekürzt):
12:01:58.499431 rule 1/0(match): block out on tl1: 80.242.136.185 > 0.0.0.0: pfsync 228
12:01:59.325051 rule 0/0(match): block in on tl1: 80.242.136.20.137 > 80.242.136.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
12:01:59.502246 rule 1/0(match): block out on tl1: 80.242.136.185 > 0.0.0.0: pfsync 228
12:01:59.856222 rule 9/0(match): pass in on tl1: 84.58.0.56.1634 > 80.242.136.185.21: S 4028053675:4028053675(0) win 65535 <mss 1420,nop,nop,sackOK>
12:01:59.857177 rule 1/0(match): block out on tl1: 80.242.136.185 > 0.0.0.0: pfsync 228
12:02:00.075097 rule 0/0(match): block in on tl1: 80.242.136.20.137 > 80.242.136.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
12:02:00.825254 rule 0/0(match): block in on tl1: 80.242.136.20.137 > 80.242.136.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
12:02:00.857035 rule 1/0(match): block out on tl1: 80.242.136.185 > 0.0.0.0: pfsync 452
12:02:00.953686 rule 0/0(match): block in on tl1: 84.58.0.56.1635 > 80.242.136.185.60845: S 4028370069:4028370069(0) win 65535 <mss 1420,nop,nop,sackOK>
12:02:01.871883 rule 1/0(match): block out on tl1: 80.242.136.185 > 0.0.0.0: pfsync 452
12:02:03.340884 rule 0/0(match): block in on tl1: 80.242.136.20.137 > 80.242.136.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
12:02:03.381637 rule 1/0(match): block out on tl1: 80.242.136.185 > 0.0.0.0: pfsync 228
12:02:03.913789 rule 0/0(match): block in on tl1: 84.58.0.56.1635 > 80.242.136.185.60845: S 4028370069:4028370069(0) win 65535 <mss 1420,nop,nop,sackOK>
12:02:04.090908 rule 0/0(match): block in on tl1: 80.242.136.20.137 > 80.242.136.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
12:02:04.381513 rule 1/0(match): block out on tl1: 80.242.136.185 > 0.0.0.0: pfsync 228
12:02:04.840963 rule 0/0(match): block in on tl1: 80.242.136.20.137 > pfsync 228
12:02:06.382148 rule 1/0(match): block out on tl1: 80.242.136.185 > 0.0.0.0: pfsync 228
pfsync 228
12:02:09.921623 rule 0/0(match): block in on tl1: 84.58.0.56.1635 > 80.242.136.185.60845: S 4028370069:4028370069(0) win 65535 <mss 1420,nop,nop,sackOK>


Ohne aktivierten pf funktioniert die Verbindung. Wenn ich das richtig interpretiere, blockiert die Firewall ftp requests, die über einen hohen Port hereinkommen.

Jetzt möchte ich ungerne haufenweise hohe Ports öffnen, damit die Verbindung klappt. Gibt es eine andere Möglichkeit?

Danke für Hinweise,
ww
 
aktives FTP statt passives FTP.
Bei passiven FTP solltest Du Ports zw. 49152 und 65535 freischalten.
 
Aktives FTP:
Client startet Verbindungsanfrage von einem lokalen Port zwischen 1024-65535 auf Server-Port 21.
Datenübertragung über Anfrage Server; dazu wird Port 20 genutzt und beim Client Ports zwischen 1024-65535.
Ports weiter.)

Passives FTP
Client startet Verbindungsanfrage; von lokalen Port zwischen 1024-65535 auf Server-Port 21.
Aufbau Datenkanals über Port zwischen 49152-65535 zu einem der Serverports zwischen 49152-65535; dazu dem FTP Server diese portrange in der config mitteilen.

Ansonsten SFTP über ssh nutzen.
 
Vorab:

Ich habe mich aus verschiedenen Gründen in diesem Fall gegen ssh/scp entschieden und auch gegen Active FTP, weil einige Clients damit Schwierigkeiten haben.

Gut, ich habe jetzt die Regel
# passive ftp rule
pass in log quick on $ext_if proto tcp from any to any port >= 49152 flags S/SA modulate state

eingefügt und es funktioniert. Richtig wohl ist mir aber nicht dabei oder sehe ich das zu eng?
 
Das passt schon. FTP ist an sich nicht schön, da es zwei Ports braucht, Verbindung und Daten, und dann noch eine Portrange. Aber wenn es Gründe gegen eine andere Lösung gibt, warum nicht.
Evtl. wäre noch webdav zu nennen ;-)
 
Was ist mit einem FTP-Proxy?
Ich meine, das wäre hier in einem Thread gut erklärt wie das geht. Musst du mal die Suchfunktion bemühen.
 
Hallo!

Wenn nicht bestimmte Dienste nur für bestimmte IP-Adressen erreichbar sein sollen, dann sehe ich für einen Paketfilter auf einem Server keinerlei Veranlassung. Die Dienste die angeboten werden, sollen ja wohl erreichbar sein und Dienste, die nicht erreichbar sein dürfen, sollten entweder nicht gestartet werden, oder an das Loopback-Interface gebunden werden.

In seltenen Fällen -- wenn man einen Dienst benötigt, der lokal erreichbar sein muß, der sich aber nicht an ein Interface binden lässt -- geht das leider nicht, ist klar, aber grunsätzlich halte ich einen Paketfilter auf einem Server überflüssig.

Ciao.
Markus Mann
];-)
 
hi

unter OpenBSD gibt es den ftp-proxy ( man ftp-proxy ) und ab 3.9 ist dieser komplett neu geschrieben worden so das er super funktioniert in beide richtungen.

so das man die oeffnung der ports > 49xxx vermeiden kann.

holger
 
Zurück
Oben