FTP kasutamine OpenBSD paketifiltriga
Sisukord
Sissejuhatus
FTP on levinud andmevahetuse protokoll, mille üheks iseärasuseks on kahe töörežiimi kasutamine
- passiivne - tundub, et 2009 aastal kasutatakse reegline passiivset režiimi, nt brauserid kasutavad seda vaikimisi
- aktiivne - nn legacy režiim, mida brauseritega ei saagi kasutada, kuid ftp kliendid saab lülitada käima ka aktiivses režiimis
Käesolev tekst kirjeldab OpenBSD paketifiltriga tulemüüri kasutamist selliselt, et seda ftp protokollile vastav andmevahetus läbida saaks.
Tööpõhimõte
Passiivne ftp
klient server ___ ___ | |-------- internet ----------| | |___| |___| 41999/tcp (suvaline) -----> 21/tcp 42999/tcp (suvaline) -----> 21000/tcp (kokkulepitud)
- esmalt algatab klienti kontrollkanali ühenduse serveri 21/tcp porti, seda ühendust mööda liiguvad ftp käsud, ls, cd, pwd jt ning lepitakse kokku andmevahetuse kanali port
- seejärel algatab klient andmevahtuse pidamiseks ühenduse serveri 21000/tcp porti, mille kasutamine lepiti kontrollkanalil kokku (ftp serveri seadistuses saab tavaliselt fikseerida pordide vahemiku, millisest saab server kliendiga porte kokku leppida)
Aktiivne ftp
klient server ___ ___ | |-------- internet ----------| | |___| |___| 41999/tcp (suvaline) -----> 21/tcp 21000/tcp (kokkulepitud) <----- 20/tcp
- esmalt algatab klienti kontrollkanali ühenduse serveri 21/tcp porti, seda ühendust mööda liiguvad ftp käsud, ls, cd, pwd jt ning lepitakse kokku andmevahetuse kanali port
- seejärel algatab server pordilt 20/tcp andmevahtuse pidamiseks ühenduse kliendi 21000/tcp porti, mille kasutamine lepiti kontrollkanalil kokku
Skeem
Käesolevas tekstis käsitletakse nii ftp kliendi kui serveri poolse tulemüüri seadistamist ja kasutamist järgmise skeemi alusel
___ ftp klient ftp server ___ | | 192.168.111.114 192.168.111.162 | | |___| |___| | em0 em0 | --|------------|-- --|------ internet -------|-- --|------------|-- | ____ | | ____ | | em1 | | em0 | | em0 | | em1 | -|------| |------|- -|------| |------|- |____| |____| 192.168.111.113 10.0.22.254 10.0.21.254 192.168.111.161 kliendi tulemüür serveri tulemüür ftp-proxy ftp-proxy
kus
- 192.168.111.114 - ftp kliendi privaatne aadress
- 10.0.22.254 - ftp klienti tulemüüri avalik aadress
- 10.0.21.254 - ftp serveri avalik aadress
- 192.168.111.162 - ftp serveri privaatne aadress
Kuna erinevates punktides on oluline rõhtuada ainult osa skeemis, siis seda nii ka tehakse.
ftp kliendi tulemüür
Eesmärgiks on tulemüüri tagant privaatset aadressi kasutava ftp kliendi vahendamine avalikus võrgus töötavale ftp serverile.
Paketifiltri seadistusfailis sobib kasutada selliseid reegleid
if_ext=em0 if_int=em1 nat-anchor "ftp-proxy/*" rdr-anchor "ftp-proxy/*" rdr pass on $if_int proto tcp to port ftp -> 127.0.0.1 port 8021 # nat on $if_ext inet tagged VALJA -> 10.0.22.254 block log all anchor "ftp-proxy/*" pass out quick on $if_ext inet proto tcp from 10.0.22.254 to any port 21 user proxy # pass in quick on $if_int inet tag VALJA # pass out quick on $if_ext inet tagged VALJA
kus
- väljakommenteeritud ridade kasutamisel toimiks tulemüür nn generic nat tulemüürina
- esitatud reegleid on tarvis ühtviisi nii privaatset aadressi kui ka avalikku aadressi kasutava ftp kliendi vahendamiseks avalikus võrgus töötava ftp serveriga
Lisaks tuleb tulemüüris käivitada ftp-proxy protsess
# ftp-proxy -r
Passiivne režiim
ftp-proxy moodustab ftp-proxy ankru alla sellised reeglid
- nat/rdr
# pfctl -a ftp-proxy/21368.5 -vvvsn @0 nat inet proto tcp from 192.168.111.114 to 10.0.21.254 port = 64138 rtable 0 -> 10.0.22.254 [ Evaluations: 1 Packets: 122100 Bytes: 113323304 States: 1 ] [ Inserted: uid 71 pid 21368 State Creations: 1 ] @0 rdr inet proto tcp from 192.168.111.114 to 10.0.21.254 port = 56923 rtable 0 -> 10.0.21.254 port 64138 [ Evaluations: 1 Packets: 122100 Bytes: 113323304 States: 1 ] [ Inserted: uid 71 pid 21368 State Creations: 1 ]
- pass
# pfctl -a ftp-proxy/21368.5 -vvvsr @0 pass in quick inet proto tcp from 192.168.111.114 to 10.0.21.254 port = 64138 flags S/SA keep state (max 1) rtable 0 [ Evaluations: 2 Packets: 137647 Bytes: 127608332 States: 1 ] [ Inserted: uid 71 pid 21368 State Creations: 1 ] @1 pass out quick inet proto tcp from 10.0.22.254 to 10.0.21.254 port = 64138 flags S/SA keep state (max 1) rtable 0 [ Evaluations: 1 Packets: 137660 Bytes: 127624936 States: 1 ] [ Inserted: uid 71 pid 21368 State Creations: 1 ]
kus reegleid tuleks lugeda selliselt
- 'pfctl -vvvsA' esitab ankrute nimekirja
- 'pfctl -a ftp-proxy/* -vvvsA' esitab ftp-proxy all olevate ankrute nimekirja
- passiivse andmeühenduse algatab klient, ftp-proxy ankru reeglid töötavad ainult andmeühenduste jaoks
- kliendi algatuatud ühendusele rakenduvad reeglid sellises järjekorras: rdr, pass in, nat, pass out
- reeglid on 'Inserted: uid 71', mis tähendab, et need on sisestatud proxy kasutaja poolt, millena töötab ftp-proxy protsess
# ps aux | grep ftp-proxy proxy 21914 0.0 0.4 516 988 ?? Is 8:14PM 0:00.04 ftp-proxy -r
- reeglid on (max 1), mis tähendab, et reegel saab tekitada samaaegselt ainult ühe paketifiltri oleku
Aktiivne režiim
- nat/rdr reeglid
# pfctl -a ftp-proxy/21914.1 -vvvsn @0 nat inet proto tcp from 192.168.111.162 to 192.168.111.114 port = 57561 rtable 0 -> 192.168.111.162 [ Evaluations: 1 Packets: 135856 Bytes: 127214216 States: 1 ] [ Inserted: uid 71 pid 21914 State Creations: 1 ] @0 rdr inet proto tcp from 192.168.111.162 to 10.0.22.254 port = 52815 rtable 0 -> 192.168.111.114 port 57561 [ Evaluations: 1 Packets: 135872 Bytes: 127232424 States: 1 ] [ Inserted: uid 71 pid 21914 State Creations: 1 ]
- pass reeglid
# pfctl -a ftp-proxy/21914.1 -vvvsr @0 pass in quick inet proto tcp from 192.168.111.162 to 192.168.111.114 port = 57561 flags S/SA keep state (max 1) rtable 0 [ Evaluations: 2 Packets: 152045 Bytes: 142340564 States: 1 ] [ Inserted: uid 71 pid 21914 State Creations: 1 ] @1 pass out quick inet proto tcp from 192.168.111.162 to 192.168.111.114 port = 57561 flags S/SA keep state (max 1) rtable 0 [ Evaluations: 1 Packets: 152045 Bytes: 142340564 States: 1 ] [ Inserted: uid 71 pid 21914 State Creations: 1 ]
kus reegleid tuleks lugeda selliselt
- aktiivse andmeühenduse algatab server, ftp-proxy ankru reeglid töötavad ainult andmeühenduste jaoks
- kliendi algatuatud ühendusele rakenduvad reeglid sellises järjekorras: rdr, pass in, nat, pass out
ftp serveri tulemüür
Eesmärgiks on avalikust võrgust ftp kliendi vahendamine tulemüüri taga privaatset aadressi kasutavale ftp serverile.
Paketifiltri seadistusfailis sobib kasutada selliseid reegleid
if_ext=em0 if_int=em1 nat-anchor "ftp-proxy/*" rdr-anchor "ftp-proxy/*" # nat on $if_ext inet tagged VALJA -> 10.0.22.254 block log all anchor "ftp-proxy/*" pass in on $if_ext inet proto tcp to $if_ext port 21 pass out on $if_int inet proto tcp to 192.168.111.162 port 21 user proxy # pass in quick on $if_int inet tag VALJA # pass out quick on $if_ext inet tagged VALJA
kus
- väljakommenteeritud ridade kasutamisel toimiks tulemüür nn generic nat tulemüürina
- esitatud reegleid on tarvis ühtviisi nii privaatset aadressi kui ka avalikku aadressi kasutava ftp kliendi vahendamiseks avalikus võrgus töötava ftp serveriga
Lisaks tuleb tulemüüris käivitada ftp-proxy protsess
# ftp-proxy -R 192.168.111.162 -p 21 -b 10.0.21.254
Passiivne režiim
Avalikust võrgust ftp kliendi vahendamist tulemüüri taga privaatset aadresse kasutavale ftp serverile kujutab selline skeem
- nat/rdr reeglid
# pfctl -a ftp-proxy/12063.1 -vvvsn @0 nat inet proto tcp from 10.0.22.254 to 192.168.111.162 port = 56540 rtable 0 -> 195.80.111.161 [ Evaluations: 1 Packets: 100620 Bytes: 93688160 States: 1 ] [ Inserted: uid 71 pid 12063 State Creations: 1 ] @0 rdr inet proto tcp from 10.0.22.254 to 10.0.21.254 port = 50016 rtable 0 -> 192.168.111.162 port 56540 [ Evaluations: 1 Packets: 100635 Bytes: 93704868 States: 1 ] [ Inserted: uid 71 pid 12063 State Creations: 1 ]
- pass reeglid
# pfctl -a ftp-proxy/12063.1 -vvvsr @0 pass in quick inet proto tcp from 10.0.22.254 to 192.168.111.162 port = 56540 flags S/SA keep state (max 1) rtable 0 [ Evaluations: 2 Packets: 55131 Bytes: 51392828 States: 1 ] [ Inserted: uid 71 pid 12063 State Creations: 1 ] @1 pass out quick inet proto tcp from 192.168.111.161 to 192.168.111.162 port = 56540 flags S/SA keep state (max 1) rtable 0 [ Evaluations: 1 Packets: 55138 Bytes: 51398984 States: 1 ] [ Inserted: uid 71 pid 12063 State Creations: 1 ]
Aktiivne režiim
Aktiivse andmevahetuse režiimi puhul toimuvad ftp protokolli seisukohalt põhimõtteliselt sellised sündmused
- nat/rdr reeglid
# pfctl -a ftp-proxy/12063.1 -vvvsn @0 nat inet proto tcp from 192.168.111.162 to 10.0.22.254 port = 62185 rtable 0 -> 10.0.21.254 [ Evaluations: 1 Packets: 96998 Bytes: 91169512 States: 1 ] [ Inserted: uid 71 pid 12063 State Creations: 1 ] @0 rdr inet proto tcp from 192.168.111.162 to 192.168.111.161 port = 56535 rtable 0 -> 10.0.22.254 port 62185 [ Evaluations: 1 Packets: 96998 Bytes: 91169512 States: 1 ] [ Inserted: uid 71 pid 12063 State Creations: 1 ]
- pass reeglid
# pfctl -a ftp-proxy/12063.1 -vvvsr @0 pass in quick inet proto tcp from 192.168.111.162 to 10.0.22.254 port = 62185 flags S/SA keep state (max 1) rtable 0 [ Evaluations: 2 Packets: 119761 Bytes: 112470356 States: 1 ] [ Inserted: uid 71 pid 12063 State Creations: 1 ] @1 pass out quick inet proto tcp from 10.0.21.254 to 10.0.22.254 port = 62185 flags S/SA keep state (max 1) rtable 0 [ Evaluations: 1 Packets: 119770 Bytes: 112483856 States: 1 ] [ Inserted: uid 71 pid 12063 State Creations: 1 ]
Liikluse prioritiseerimine
TODO
Mitme välisühendusega tulemüüri kasutamine
TODO