Erinevus lehekülje "FTP kasutamine OpenBSD paketifiltriga" redaktsioonide vahel

Allikas: Kuutõrvaja
P (Liikluse prioritiseerimine)
(Mitme välisühendusega tulemüüri kasutamine)
274. rida: 274. rida:
 
===Mitme välisühendusega tulemüüri kasutamine===
 
===Mitme välisühendusega tulemüüri kasutamine===
  
TODO
+
ftp-proxy reeglitele sildi lisamist saab kasutada lisaks liikluse prioritiseerimisele ka ftp liikluse korraldamisele läbi tulemüüri erinevate nö välisühenduste. Olgu ftp serveri ees selline tulemüür
 +
 
 +
 
 +
          |                                        |                 
 +
          |  192.168.102.35      192.168.102.66  |
 +
          |              em0  ___  em1              |
 +
          '------------------|  |------------------'
 +
                            |___|
 +
                        em2  | 
 +
                              |
 +
                        -------|--------------|---
 +
                                              |
 +
                                            _|_
 +
                                            |  |  ftp server
 +
                                            |___|
 +
 
 +
 
 +
anchor "ftp-proxy/*" label "A-ftp-proxy"
 +
# passiivsete yhenduste jaoks, mida klient algatab
 +
pass in quick on $if_public_niksun inet from { 213.184.51.222, 84.50.96.138 } to 10.0.5.100 $tcpopts (tcp.established 1440) tagged NIKSUN label "JSpublic niksun passive ftp"
 +
pass out quick on $if_haldus reply-to ( $if_public_niksun 195.80.102.65 ) inet $tcpopts (tcp.established 1440) tagged NIKSUN label "JVhaldus niksun passive ftp"         
 +
# aktiivsete yhenduste jaoks, mida serveri algatab
 +
pass in quick on $if_haldus route-to ( $if_public_niksun 195.80.102.65 ) inet from 10.0.5.100 to { 213.184.51.222, 84.50.96.138 } $tcpopts (tcp.established 1440) tagged NIKSUN label "JShaldus niksun active ftp"
 +
pass out quick on $if_public_niksun inet $tcpopts (tcp.established 1440) tagged NIKSUN label "JShaldus niksun active ftp"
  
 
===Kasulikud lisamaterjalid===
 
===Kasulikud lisamaterjalid===
  
 
* [[:FTP kliendi kasutamine]]
 
* [[:FTP kliendi kasutamine]]

Redaktsioon: 20. detsember 2009, kell 14:16

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
  • rtable 0 - reeglid kasutavad vaike ruutingutabelit
  • ftp-proxy tekitab quick reegleid

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

Olgu ülesandeks piirata ftp serveri tulemüüris ftp allalaadimine 2 MB/s kiirusele, selleks tuleb

  • kirjeldada altq
 altq on $if_ext cbq bandwidth 10000Kb queue { up_default, up_ftp }
   queue up_default  bandwidth 8000Kb cbq(default, borrow)
   queue up_ftp      bandwidth 2000Kb
  • käivitada ftp-proxy deemon on võtme -T abil, mis lisab ftp-proxy tekitatud pass reeglitele näitatud sildi, lisaks eemaldatakse neilt reeglitelt quick
 # ftp-proxy -R 192.168.111.162 -p 21 -b 10.0.21.254 -T FTP
  • rakendada altq ftp liiklusele vahetult ankru järele kaks pass reeglit
 anchor "ftp-proxy/*"
 pass in quick on $if_ext inet tagged FTP queue up_ftp
 pass out quick on $if_int inet tagged FTP

Seejuures kasutatakse asjaolu, et ftp-proxy pass reeglid ei ole quickid ja lisatud sildi abil piiratakse liiklust.

Siltidega ja ilma quickita ftp-proxy reeglid on passiivse režiimi puhul nt sellised

 # pfctl -a ftp-proxy/14329.2 -vvvsr 
 @0 pass in inet proto tcp from 10.0.22.254 to 192.168.111.162 port = 52445 flags S/SA keep state (max 1) tag FTP rtable 0
   [ Evaluations: 2         Packets: 0         Bytes: 0           States: 0     ]
   [ Inserted: uid 71 pid 14329 State Creations: 0     ]
 @1 pass out inet proto tcp from 192.168.111.161 to 192.168.111.162 port = 52445 flags S/SA keep state (max 1) tag FTP rtable 0
   [ Evaluations: 2         Packets: 0         Bytes: 0           States: 0     ]
   [ Inserted: uid 71 pid 14329 State Creations: 0     ]

Mitme välisühendusega tulemüüri kasutamine

ftp-proxy reeglitele sildi lisamist saab kasutada lisaks liikluse prioritiseerimisele ka ftp liikluse korraldamisele läbi tulemüüri erinevate nö välisühenduste. Olgu ftp serveri ees selline tulemüür


         |                                         |                  
         |   192.168.102.35       192.168.102.66   |
         |              em0  ___  em1              |
         '------------------|   |------------------'
                            |___|
                        em2   |   
                              |
                       -------|--------------|---
                                             |
                                            _|_
                                           |   |  ftp server
                                           |___|


anchor "ftp-proxy/*" label "A-ftp-proxy"

  1. passiivsete yhenduste jaoks, mida klient algatab

pass in quick on $if_public_niksun inet from { 213.184.51.222, 84.50.96.138 } to 10.0.5.100 $tcpopts (tcp.established 1440) tagged NIKSUN label "JSpublic niksun passive ftp" pass out quick on $if_haldus reply-to ( $if_public_niksun 195.80.102.65 ) inet $tcpopts (tcp.established 1440) tagged NIKSUN label "JVhaldus niksun passive ftp"

  1. aktiivsete yhenduste jaoks, mida serveri algatab

pass in quick on $if_haldus route-to ( $if_public_niksun 195.80.102.65 ) inet from 10.0.5.100 to { 213.184.51.222, 84.50.96.138 } $tcpopts (tcp.established 1440) tagged NIKSUN label "JShaldus niksun active ftp" pass out quick on $if_public_niksun inet $tcpopts (tcp.established 1440) tagged NIKSUN label "JShaldus niksun active ftp"

Kasulikud lisamaterjalid