Problembarnet FTP

Innholdsfortegnelse
FTP gjennom NAT: ftp-proxy
FTP, PF og rutbare adresser: ftpsesame, pftpx og ftp-proxy!
ftp-proxy, ny utgave

I den lille listen over TCP-porter fra det virkelige livet dukket FTP opp. FTP er kort og godt et problembarn, spesielt når vi ønsker å kombinere den med brannmurer. FTP er en gammel og sær protokoll som det kan sies mye vondt om. De vanligste, men langt fra eneste, innvendingene går på at

Alt dette er for å si det pent sikkerhetsmessige utfordringer, allerede før man kommer inn på at både klienter og servere kan ha feil og svakheter som i seg selv kan føre til sikkerhetsproblemer. Det har jo også skjedd noen ganger.

Uansett finnes det mer moderne og sikrere alternativer for filoverføring, som for eksempel sftp eller scp, der både autentisering og dataoverføring foregår på kryptert samband. Alle oppegående IT-mennesker bør ha noe annet som førstevalg for filoverføring.

Uansett hvor oppegående vi er, så vet vi at vi noen ganger er nødt til å håndtere det vi i utgangspunktet ikke liker. I tilfellet FTP gjennom brannmur håndterer vi det grøvste ved å omdirigere trafikken til et lite program som er spesialskrevet for å håndtere akkurat det.

FTP gjennom NAT: ftp-proxy

NotatKun OpenBSD 3.8 og tidligere
 

I november 2005 ble den gamle ftp-proxy (/usr/libexec/ftp-proxy) erstattet i OpenBSD-current med den nye ftp-proxy, som finnes i /usr/sbin. Det er denne programvaren som er med i OpenBSD 3.9 og nyere. Se nærmere beskrivelser i seksjonen kalt ftp-proxy, ny utgave.

ftp-proxy er en del av basesystemet på OpenBSD og andre systemer der PF inngår, og kalles vanligvis via "superserveren" inetd med en linje i /etc/inetd.conf.

Denne linjen spesifiserer at ftp-proxy skal kjøre i NAT-modus på loopback-grensesnittet lo0:

 127.0.0.1:8021 stream tcp nowait root /usr/libexec/ftp-proxy \
   ftp-proxy -n

Denne linjen finner du normalt utkommentert med # i inetd.conf. Du aktiverer endringen ved å starte inetd på nytt.

På FreeBSD, NetBSD og andre BSDer med rcng gjør du det med

FreeBSD+NetBSD$ sudo /etc/rc.d/inetd restart

eller tilsvarende. Se man 8 inetd hvis du er i tvil.

På OpenBSD er rc-systemet mer tradisjonelt, så der blir kommandoen

OpenBSD$ sudo kill -HUP `cat /var/run/inetd.pid` 

Da er inetd i gang med de nye innstillingene.

Så til selve omdirigeringen. Omdirigeringsregler og NAT-regler kommer i samme klasse. De kan bli direkte referert eller være blant forutsetningene for at filtreringsreglene skal fungere, og må derfor komme før filtreringsreglene i regelsettet.

Vi setter inn rdr-regelen rett etter nat-regelen i /etc/pf.conf

rdr on $indre proto tcp from any to any port ftp -> 127.0.0.1 port 8021

Den omdirigerte trafikken må også få lov til å passere, og det gjør vi med

pass in on $ytre inet proto tcp from port ftp-data to ($ytre) \
    user proxy flags S/SA keep state

Lagre pf.conf, og last regelsettet på nytt med

$ sudo pfctl -f /etc/pf.conf

På dette tidspunktet vil du antakelig ha fornøyde brukere som oppdager at FTP virker før du sier fra at du er ferdig.

Dette eksempelet forutsetter NAT på gateway og ikke-rutbare adresser på innsiden.