Mrznuce FTP

Marian Cerny jojo at matfyz.cz
Mon Mar 16 09:25:42 CET 2009


>
>> Ja by som podozrieval PFko. PFko zahadzuje nove spojenia, ktore 
>> pouzivaju rovnaku zdrojovu a cielovu adresu a port ako nejake stare 
>> spojenie, ktore je v stave closed a nevyprsal este timeout tcp.closed 
>> - default 90s (+ 0 az interval sekund - default 10s). Vedia s tym byt 
>> dost problemy, pretoze FreeBSD kludne vygeneruje dva rovnake zdrojove 
>> porty u dvoch kratkych bezprostrednych odchodzich spojeni.
>
> musim sa nad tym zamysliet, ale toto by snad nemal byt problem.
>
> on by to nemal zahodit ale prehnat pravidlami. Ak tomu rozumiem 
> spravne, ked pride spojenie, hlada sa matchnig rule. Ak sa najde, 
> vysledkom je bud povol alebo zahod. V prvom pripade sa moze este 
> vyrobit stav. Potom pri kazdom dalsom "pakete" sa prehladaju najprv 
> stavy a ak sa zodpovedajuci stav nenajde, spracovavaju sa pravidla. A 
> vysledkom je opat bud povol alebo zahod.

Je to tak, avsak ked sa prehladaju stavy, tak vysledkom nemusi byt iba 
povol, ale aj zahod. PFko zahadzuje pakety, ktore odpovedaju zaznamu v 
stavovej tabulke, ale prijaty paket neodpoveda zaznamenanemu stavu 
(neocakavane flagy alebo sekvencne cislo). Spominany pripad je taky, 
podla PF ide o uzavrete spojenie a pride paket so SYN flagom - podla PF 
taky paket tu nema co robit, tak ho zahodi.

> Hovorime o pasivnom mode tj. pure-ftpd povie klientovi "vezmi si data 
> na porte X". A on sa pripoji. Ale malo by byt jedno, ze pred chvilkou 
> bol pripojeny niekto iny...

Ano, ak bol pripojeni niekto iny, tak je to jedno. Ale ked sa pripaja ta 
ista IP adresa a pure-ftpd povedal klientovi, ze ma pouzit ten isty 
port, tak by to bol problem, ak by sa zvolil este rovnaky zdrojovy port. 
Nie su klienti za NATom?

> Inak by predsa nefungovalo ani nieco taketo:
>
> pass in quick on XY inet from any to XY port 80 keep state flags ...

Ano, toto nefunguje uplne spolahlivo. Staci ak je klient aj server 
FreeBSD a necha sa dostatocne dlho bezat nasledujuce:

while true; do time curl -s www.mojserver.cz > /dev/null ; sleep 1; done

Pre urychlenie je mozne vynechat sleep 1.

>> Neviem, ci je to aj tvoj pripad, ale skus si do pf.conf pridat option 
>> "set debug misc", reloadovat pf.conf a sledovat logy (defaultne 
>> /var/log/messages) ci sa ti tam neobjavuje "BAD state" alebo "loose 
>> state match".
>
> toto urcite vyskusam...  este ma napadlo vyhodit z tych pravidiel keep 
> state, ale to sa mi nezda ako riesenie.

Ak mas FreeBSD 7.x, tak vyhodit keep state nebude staci, pretoze je to 
default. Namiesto toho sa pouziva "no keep state". Ale riesit to zacni 
az ked sa ti zacne objavovat v logoch problem so stavmi po pridani debug 
misc. Inac nez zrusit keep state bude asi lepsie zmensit timeout 
tcp.closed napr. na 20 sekund.

Marian



More information about the Users-l mailing list