PF, TIME_WAIT a zavreny port

Vilem Kebrt vilem.kebrt at gmail.com
Fri Sep 27 12:03:34 CEST 2013


Zdar,
time-wait jesli se nemylim nastava pred potvrzenim ukonceni spojeni z 
druhe strany.
Nejsem si ted jist, ale melo by se dat nastavit jak dlouho time-wait 
muze trvat, plus omezit jejich pocet.
Jinak k cele problematice je asi slusne informativni tento clanek : 
http://www.isi.edu/touch/pubs/infocomm99/infocomm99-web/.
Omlouvam se ze nepomohu vic, zrovna se peru s ipsecem :D
Vilem

On 27.9.2013 10:48, Miroslav Prýmek wrote:
> Ahoj vsichni,
>
> narazil jsem na zvlastni chovani PF(?), ktere si neumim vysvetlit a docela
> by me zajimal vas nazor. Bohuzel nemuzu podat uplne presne informace,
> protoze se to stalo na produkcnim serveru, se kterym jsem nemohl moc
> manipulovat a prvotni pricinu neumim nasimulovat.
>
> Souhrn faktu:
> 1. na server A se pripojuje vic ruznych dalsich serveru pomoci tcp pres
> knihovnu zeromq. Server A je FreeBSD 9.1-RELEASE-p4 amd64. Je to VPS, ale
> to by imho nemelo hrat roli.
>
> 2. z duvodu, ktery nehraje roli, se klienti zblaznili, vytvorili X forku a
> (pravdepodobne) zacali otevirat vetsi mnozstvi spojeni nez normalne.
>
> 3. tabulka spojeni (pfctl -s states) na A enormne narostla, vsechna spojeni
> byla ve stavu "TIME_WAIT:TIME_WAIT" a dochazelo k vypadku jinych sluzeb
> (asi uz nemohly vytvorit dalsi zaznamy v tabulce spojeni - connect vracel
> "operation not permitted").
>
> 4. takze jsem na serveru A shodil naslouchajici proces s tim, ze dalsi
> spojeni se timpadem uz navazovat nebudou a existujici postupne vyprsi.
>
> 5. To se ale nestalo a pocet spojeni v tabulce se porad drzel stejne
> vysoko. Nerozumim tomu, jak je to mozne, mel jsem za to, ze TIME_WAIT muze
> nastat az po ESTABLISHED.
>
> 6. v konfiguraci PF neni nic zvlastniho, tato spojeni jsou do jailu a tyka
> se jich jenom nat a redirect:
>
> nat pass on $ext_if from $jail_x to !$jail_x -> ($ext_if:0)
> rdr on $ext_if proto tcp to port $port_x -> $jail_x
>
> 7. pomohlo az port filtrovat:
> block on $ext_if proto tcp to port $port_x
> po zavedeni tohodle pravidla zacal pocet spojeni v tabulce klesat az spadl
> na normal.
>
> ----
> Otazky:
>
> 1. Fakt si tohle chovani neumim vysvetlit. Bud mi neco uniklo, nebo stavim
> na nejakem mylnem predpokladu - nechapu, jak se pokus o spojeni na zavreny
> port muze dostat do stavu TIME_WAIT. Muzete mi to prosim nejak polopaticky
> vysvetlit?
>
> 2. Je nejaky rozumny zpusob, jak se takovemu zblazneni klientu branit?
> Zkousel jsem (bezvysledne) zmensit net.inet.tcp.msl, ale klienti se nejspis
> navazovat spojeni i tak prilis rychle nebo nevim. Proste to nepomohlo. Musi
> byt urcite nejake jine reseni nez port natvrdo filtrovat, ale ja o nem
> nevim :) Poradite pls?
>
> 3. Je rozumne maximalni pocet polozek v tabulce spojeni zvysit? Za jakych
> podminek a v zavislosti na cem? (zdalo se mi, ze tech spojeni neni az
> tolik, aby se uz dalsi musela zakazovat... na vykonu to poznat nebylo)
>
> Dik moc predem za jakekoliv komentare a rady. Ne, ze by to bylo nejak
> ozehave, puvodni pricina (zblazneni klientu) byla zpusobena nestastnou
> souhrou nahod, ale kazdopadne bych chtel te situaci lip porozumet, uz jenom
> kvuli priprave na nejaky teoreticky budouci DDOS...
>
> dik
>
> Mirek



More information about the Users-l mailing list