22 abr

Cerrar conexiones Time_wait en Linux

Algunas veces cuando utilizamos programas o ejecutamos servicios que tienden a crear muchas conexiones, nos podemos encontrar que si lanzamos.

netstat -a

Muchas de las conexiones que nos aparecen están en Time_wait, estas conexiones representan conexiones TCP que están esperando el tiempo suficiente para que el servidor remoto haya recibido su petición de finalizacion de la conexión, realmente son conexiones ocupando, si nos hacen daño incluso a la vista podemos hacer lo siguiente.

Comprobamos el tiempo en segundo que tenemos ahora configurado, por defecto en la mayoría de los sistemas son 60 segundos

cat /proc/sys/net/ipv4/tcp_fin_timeout60

Si queremos librarnos de esas conexiones de Time_wait de forma puntual hasta el próximo reinicio, deberemos hacer lo siguiente, así en caliente en real time que ahora se lleva mucho.

echo 20 ; /proc/sys/net/ipv4/tcp_fin_timeout

Si por lo contrario queremos un cambio mas permanente, deberemos hacer.

sudo vi /etc/sysctl.confnet.ipv4.tcp_fin_timeout=20

Y cuando reiniciemos el sistema tendremos el valor activo.

Y listo!!

NOOOO que aún hay más!

Imaginemos que lo que queremos es cortar esas conexiones que nos molestan a la vista, o que nos molesta al rendimiento de la máquina, que por viene siendo lo mismo, pues podemos utilizar…

Cutter, lo podemos instalar con

sudo apt-get install cutter

Esta aplicación nos permite cortar conexiones especificas según unos patrones, por ejemplo:

Queremos cortar todas las conexiones desde la ip 10.10.1.10, pues haremos

cutter 10.10.1.10

Ahora, queremos cortar todas las conexiones desde la ip 10.10.1.10, pero que lleguen por el puerto 22, pues haremos

cutter 10.10.1.10 22

Ahora, queremos cortar todas las conexiones que llegue a nuestro server desde la ip publica 8.8.8.8, por el puerto 80, pues haremos

cutter 8.8.8.8 ipserver 80

Y con esto podemos ir librándonos de forma puntal, de las conexiones que veamos sospechosas, son prudencia….

Ale a disfrutarlo!!!

Extra Lap

Copio un comentario del compañero de labores Tomàs, que es muy interesante, se puede ver en los comentarios o seguir leyendo ;)

Dice algo tal que así,

Otra opción para no limitar el tiempo de las Time_Wait es decir al sistema operativo que las recicle a medida que lo necesita. Eso se hace con las opciones:

net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1

Para activarlo puedes hacerlo con sysctl:

[[email protected] ~]# sysctl -a|grep _tw_net.ipv4.tcp_max_tw_buckets = 131072
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
[[email protected] ~]# sysctl -w net.ipv4.tcp_tw_recycle=1
[[email protected] ~]# sysctl -w net.ipv4.tcp_tw_reuse=1
[[email protected] ~]# sysctl -a|grep _tw_
net.ipv4.tcp_max_tw_buckets = 131072
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1

O con el echo:

[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_tw_recycle /proc/sys/net/ipv4/tcp_tw_reuse
0
0
[[email protected] ~]# echo "1" ; /proc/sys/net/ipv4/tcp_tw_recycle
[[email protected] ~]# echo "1" ; /proc/sys/net/ipv4/tcp_tw_reuse
[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_tw_recycle

/proc/sys/net/ipv4/tcp_tw_reuse 1
1

Claro, si quieres que se mantenga tras los reinicios, lo tienes que poner en el /etc/sysctl.conf:

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

Y a partir de ese momento, el sistema reciclará las conexiones en time_wait y se acabarán los problemas.

6 thoughts on “Cerrar conexiones Time_wait en Linux

  1. Hola! Enhorabuena por tu tutorial, me ha dado a conocer la configuración de unos parámetros que me vendrán muy bien para mi raspberry y para mi ubuntu.

    He estado buscando por internet para complementar la información, y en muchos sitios veo que esto:

    “sudo vi /proc/sys/net/ipv4/tcp_fin_timeout
    net.ipv4.tcp_fin_timeout=20″

    Debería ponerse en /etc/sysctl.conf

    Como estoy aprendiendo, no me hagas mucho caso. Aunque el contenido del sysctl.conf concuerda con lo que pone.

    Un abrazo y espero con muchas ganas el próximo tutorial!

    • Si si tienes razón, ahora mismo lo cambio, se me fue la mano lo siento :)

      Estoy preparando 4 más:

      1.- Sobre bacula y como comprobar la integridad de los datos
      2.- Freebsd como instalar paquetes sin dependencias X11
      3.- Como enviar a graphite datos de rendimiento al sistema ZFS de freebsd
      4.- Como sacar datos de la API de vmware tratarlos con powerCLI y enviarlos a graphite.

      El tema de graphite esta muy chulo, el problema es que para instalarlo en rasppery tienes que tener apache, y yo en mi caso con nginx tengo un problema con un paquete. :(

      http://graphite.wikidot.com/quickstart-guide

      Pero el día del post haré referencia a un manual donde explica como montarlo.

      • ¿Lo de bácula viene a ser como un backup en red, una especie de RAID en red local?
        Me parece muy interesante.

        Cualquiera de esos próximos tutos me suenan a chino, así que genial, más para aprender. Por lo que he visto de bácula, parece un sistema de backup por red.
        Sería perfecto para hacerse una especie de RAID casero de bajo presupuesto, con los pc’s de la casa y un disco duro en la raspi.

        He investigado algo con lo de graphite, no sé si te puede servir esto de github: https://gist.github.com/drawks/1830579 .Es el fichero de configuración de graphite para nginx.

  2. Otra opcion para no limitar el tiempo de las Time_Wait es decir al sistema operativo que las recicle a medida que lo necesita. Eso se hace con las opciones:
    net.ipv4.tcp_tw_reuse=1
    net.ipv4.tcp_tw_recycle=1

    Para activarlo puedes hacerlo con sysctl:

    [[email protected] ~]# sysctl -a|grep _tw_
    net.ipv4.tcp_max_tw_buckets = 131072
    net.ipv4.tcp_tw_recycle = 0
    net.ipv4.tcp_tw_reuse = 0
    [[email protected] ~]# sysctl -w net.ipv4.tcp_tw_recycle=1
    [[email protected] ~]# sysctl -w net.ipv4.tcp_tw_reuse=1
    [[email protected] ~]# sysctl -a|grep _tw_
    net.ipv4.tcp_max_tw_buckets = 131072
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_tw_reuse = 1

    O con el echo:
    [[email protected] ~]# cat /proc/sys/net/ipv4/tcp_tw_recycle /proc/sys/net/ipv4/tcp_tw_reuse
    0
    0
    [[email protected] ~]# echo “1” > /proc/sys/net/ipv4/tcp_tw_recycle
    [[email protected] ~]# echo “1” > /proc/sys/net/ipv4/tcp_tw_reuse
    [[email protected] ~]# cat /proc/sys/net/ipv4/tcp_tw_recycle /proc/sys/net/ipv4/tcp_tw_reuse
    1
    1

    Claro, si quieres que se mantenga tras los reinicios, lo tienes que poner en el /etc/sysctl.conf:
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1

    Y a partir de ese momento, el sistema reciclará las conexiones en time_wait y se acabarán los problemas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>