Op een server heb ik een daemon proces draaien die veel TCP connecties heeft die ongebruikt zijn, maar wel ESTABLISHED.
De makkelijk optie om op te ruimen is de daemon opnieuw starten, dit is in dit geval geen optie. Ik geef wel toe dat er wat 'fouten' gemaakt zijn, daemon past geen keep-alive oid toe (blijft wachten tot die client iets zegt, maar stuur geen berichten om te kijken of de andere kant er nog is), geen adequate firewalling waardoor veel malicious hosts een denial kunnen uitvoeren, etc.
Een firewall is nu in plaats waardoor er alleen maar connecties van bekende hosts gemaakt kunnen worden.
Ik heb een aantal sysctl waardes proberen aan te passen om deze connecties sneller te laten verdwijen
Eigenlijk is de tijd van de originele sysctl ook al verstreken (7200 + 9*75 seconden), maar deze connecties blijven zo staan.
Het tooltje tcpkill werkt hier ook niet, omdat er (zonder firewall) totaal geen verkeer is waardoor dit tooltje de juiste sequence niet kan spoofen.
Ik heb GDB geprobeert om met 'call close($fileDescritor)' te filedescriptor te sluiten, maar hier gebeurd niets.
Welke opties heb ik nog meer om TCP connecties op te ruimen? Met FreeBSD kan ik tcpdrop gebruiken, maar linux lijkt dit niet op een dergelijke manier te kennen zo ver ik gevonden heb.
De makkelijk optie om op te ruimen is de daemon opnieuw starten, dit is in dit geval geen optie. Ik geef wel toe dat er wat 'fouten' gemaakt zijn, daemon past geen keep-alive oid toe (blijft wachten tot die client iets zegt, maar stuur geen berichten om te kijken of de andere kant er nog is), geen adequate firewalling waardoor veel malicious hosts een denial kunnen uitvoeren, etc.
Een firewall is nu in plaats waardoor er alleen maar connecties van bekende hosts gemaakt kunnen worden.
Ik heb een aantal sysctl waardes proberen aan te passen om deze connecties sneller te laten verdwijen
code:
1
2
3
| net.ipv4.tcp_keepalive_intvl = 10 net.ipv4.tcp_keepalive_probes = 3 net.ipv4.tcp_keepalive_time = 60 |
Eigenlijk is de tijd van de originele sysctl ook al verstreken (7200 + 9*75 seconden), maar deze connecties blijven zo staan.
Het tooltje tcpkill werkt hier ook niet, omdat er (zonder firewall) totaal geen verkeer is waardoor dit tooltje de juiste sequence niet kan spoofen.
Ik heb GDB geprobeert om met 'call close($fileDescritor)' te filedescriptor te sluiten, maar hier gebeurd niets.
Welke opties heb ik nog meer om TCP connecties op te ruimen? Met FreeBSD kan ik tcpdrop gebruiken, maar linux lijkt dit niet op een dergelijke manier te kennen zo ver ik gevonden heb.
Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/