PF, TIME_WAIT a zavreny port

Miroslav Prýmek m.prymek at gmail.com
Fri Sep 27 10:48:03 CEST 2013


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