# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Routing Tables: ‘netstat -rn’ y ‘route -n’


Algo importante en los sistemas Linux (o Unix) y todo lo relacionado con networking es conocer el estado y configuración de las tablas de rutas IP (routing tables), que nos indican cómo y a través de donde se envía un paquete en las distintas redes.

Para visualizar la tabla de rutas tenemos dos posibilidades, utilizar el comando netstat -rn o route -n, ambos nos ofrecen la misma salida:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0

Las tres primeras columnas nos indican, por un lado las redes de destino (Destination), la puerta de enlace que utilizan (Gateway) y la máscara de red (Genmask). En las Flags vemos “U”, que significa que la interfaz de red está levantada y G que indica que esa ruta utiliza la puerta de enlace. 0.0.0.0 es tratado como un wildcard (también se suele representar con un *) y especifica el destino a cualquier red no especificada.

Explicando la salida del comando route anterior, vemos en primer lugar que todo paquete dirigido a las redes 192.168.1.0/255.255.255.0 y 169.254.0.0/255.255.0.0 serán enviados a través de redes LAN (vemos que no hay flag de gateway) por lo que no harán uso de puerta de enlace. En cambio todo paquete con destino 0.0.0.0, es decir, el resto de redes sí que pasará por nuestra puerta de enlace 192.168.1.1. Todas estas rutas trabajan bajo la interfaz de red eth0, si tuviéramos más interfaces levantadas aparecerían marcadas como ethX en la columna Iface.

Netstat: Estado de las conexiones


La siguiente información es de gran utilidad para un uso efectivo del comando NETSTAT, concretamente se trata de los diferentes estados por los que pasa una conexión:

El indicador en la columna estado muestra el estado de la conexión para el protocolo TCP; para protocolos no orientados a la conexión, como UDP, este campo figurará en blanco. Los estados posibles son los siguientes:

  • ESTABLISHED El socket tiene una conexión establecida
  • SYN_SENT El socket está intentando iniciar una conexión
  • SYN_RECV Una petición de conexión fue recibida por la red
  • FIN_WAIT1 El socket está cerrado, y la conexión esta finalizándose
  • FIN_WAIT2 La conexión esta cerrada, y el socket está esperando que finalice la conexión remota
  • TIME_WAIT El socket está esperando después de cerrarse que concluyan los paquetes que siguen en la red
  • CLOSED El socket no está siendo usado
  • CLOSE_WAIT La conexión remota ha finalizado, y se espera que se cierre el socket
  • LAST_ACK La conexión remota ha finalizado, y se espera que se cierre el socket. Esperando el acknowledgement.
  • LISTEN El socket está esperando posibles conexiones entrantes
  • CLOSING Ambos sockets han finalizado pero aun no fueron enviados todos los datos
  • UNKNOWN El estado del socket no se conoce

Vía | Wikipedia

Configurar spamassassin para aceptar conexiones remotas


Por defecto el demonio Spamassassin solo escucha en 127.0.0.1 por lo que si necesitamos configuarlo para que acepte conexiones remotas, por ejemplo para usarlo como servidor anti-spam de MTAs externos, podemos utilizar las siguientes opciones a la hora de levantar el demonio:

–listen-ip: Cambiar la IP que escuchará en el puerto 783 de spamassassin
–port: Cambiar el puerto por defecto (783)
–allowed-ips: Restringir el acceso al servidor anti-spam solamente a X IPs

Estas son las opciones más importantes a tener en cuenta para configurar el anti-spam para servir a servidores de correo externos, un ejemplo de comando de arranque sería:

/usr/bin/spamd --daemonize --pidfile /var/run/spamd --listen-ip 10.0.0.40 --allowed-ips 10.0.0.50 10.0.0.51

Con esa línea, spamassassin escucha en la IP 10.0.0.40:783 (podéis comprobarlo haciendo un netstat) y permitimos a las IPs 10.0.0.50 y 10.0.0.51 conectar remotamente al servicio anti-spam

Comando para saber en número de conexiones y direcciones IP en un puerto/servicio Linux


netstat -plan|grep :<puerto> | awk {'print $5'} | cut -d: -f 1 | sort | uniq -c | sort -n

Ejemplo:

Conexiones a apache:

# netstat -plan|grep :80 | awk {'print $5'} | cut -d: -f 1 | sort | uniq -c | sort -n
1 XX.XX.XXX.XXX
1 XX.XX.XXX.XXX
1 XX.XX.XXX.XXX
51 XX.XX.XXX.XXX
64 XX.XX.XXX.XXX

Por explicar un poco el comando, NETSTAT muestra un listado de las conexiones activas del servidor, con GREP filtramos solo las conexiones al puerto 80, con AWK filtramos para que muestre solamente el contenido de la columna 5 (en este caso la IP) de la salida por pantalla, con CUT quitamos el “:”, con SORT ordenamos, con UNIQ sacamos valores únicos, y con SORT ordenamos de nuevo por nº de conexiones.