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.

ano, mas pravdu. pozrel som sa do man pfctl/pf.conf. Je celkom nechutne ze to moze zahodit. Spravnejsie by asi bolo to nezahodit a pozriet sa do pravidiel.

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?

su za NAT. Ak tomu spravne rozumiem, toto sa moze stat ak klient aj server "priliz skoro" pouziju rovnaku dvojicu portov.

Ale vratme sa k nastaveniu PFka. Ty hovoris, ze riesenim by mohlo byt nizenie tcp.closed na povadzme 20 sekund z povodnych 90.

Ale podla dokumentacie:

tcp.closed - The state after one endpoint sends an RST.

Tam ale predsa nikto neposiela RST...

Podla mna to funguje takto. Server povie klientovi "vezmi si data na porte XY" a zacne na porte pocuvat. Klient sa pripoji. Prebehne TCP 3W handshake. Server v cykle zacne data posielat a klient ich prijimat. Ked server posle vsetko, zavola close() a urobi tzv. aktivny close tj. posle FIN. Cele sa to dostane do stavu FIN_WAIT_1. Klient posle ACK pripadne aj s FIN. Tj. spojenie sa moze zavriet v jednom alebo dvoch krokoch na konci ktorych je ale TIME_WAIT. Ten by mal trvat 2 krat MSL. MSL je pre FreeBSD defaultne 30 sekund (pozrel som to v sysctl).

Cize 60 sekund by kernel nemal pridelit ten isty port lebo cokolvek co nan pride z toho isteho paru IP/port (soketu) by mohol byt napr. lost duplicate.

K tomuto stavu by sa mal vztahovat PFkovy limit tcp.finwait:

The state after both FINs have been exchanged and the connec- tion is closed. Some hosts (notably web servers on Solaris) send TCP packets even after closing the connection. Increas- ing tcp.finwait (and possibly tcp.closing) can prevent block-
                ing of such packets.

Ten je ale 45 sekund tj. menej nez 2 krat 30.

Jedine co ma napadlo je, ze na vine je pure-ftpd, ktory si vybera porty z rozsahu, ktory som mu povedal a serie na to, ze nesmie priliz rychlo znovupouzit tie iste.

Jedno zle riesenie, ktore ma napadlo je nastavit "volne porty" na rovnaky rozsah ako ten, ktory som povedal pure-ftpd, vynut na nich keep state a nehovorit pure-ftpd, ktore porty ma pouzit. Toto by malo stacit k tomu, aby tie porty prideloval kernel.

Budem sa ale musiet pozriet do zdrojakov, ako ich prideluje. Resp. ci v pripade ak mu nepoviem ze chcem porty z tohoto rozsahu, ci necha ich pridelenie na kerneli.

V kazdom pripade ma celkom serie, ze ked som teraz nastavil debug misc a pustil tail -f na messages tak vsetko chodi :)


d~

rwi
--
FreeBSD mailing list (users-l@freebsd.cz)
http://www.freebsd.cz/listserv/listinfo/users-l

Odpovedet emailem