Tener una red segura no es nada fácil… Veamos algunas de las numerosas herramientas que el software libre nos proporciona para intentar mantener nuestra red bajo control:
- Comando netstat (Network status): nos informa sobre la configuración y actividad de la red.
- Comando ping: permite verificar si una máquina remota responde, nos dice si un ordenador está actualmente conectado a Internet y la calidad y velocidad de su conexión.
- Comando traceroute: permite determinar la ruta tomada por un paquete para alcanzar su destino, ya sea en Internet o en la red local, utilizando la dirección IP o el nombre del host.
- Comando dig (Domain Information Groper): permite realizar consultas a los servidores DNS, por lo que es muy útil para comprobar si el DNS está correctamente configurado en nuestra máquina. Permite comprobar tanto el mapeo de nombres a IPs como el mapeo inverso de IPs a nombres, aunque sólo para Internet.
- Escanear puertos con Nmap (Network Mapper): probablemente el escaneador de puertos más potente que existe y el más utilizado tanto por administradores como por hackers, ya que tiene numerosas opciones de escaneo para hacking y ataques port surfing (evita ser detectado por software de detección de scaneos, hace creer al host escaneado que le escanean desde otro host, escanea a velocidad variable para no ser detectados, etc.). Nosotros usaremos Namp para saber qué puertos tenemos abiertos y asegurarnos de que el firewall funciona correctamente.
- Monitorizar el tráfico de red: utilizaremos sniffers para monitorizar el tráfico de red capturando los datos que circulan por ella.
- Sistema de detección de intrusos Snort: sniffer de línea de comandos que actúa como un IDS (Intrusion Detection System, sistema de detección de intrusos). Rastrea los paquetes que circulan por la red y al encontrar un paquete sospechoso (según unas reglas previamente definidas), lo loguea (en un log o en MySQL).
- Escáner de vulnerabilidades Nessus: escáner de vulnerabilidades que se utiliza para realizar auditorías de seguridad en una red.
- Frontales gráficos: disponemos de varios frontales gráficos para los comandos que se emplean habitualmente para controlar la red.
Comando netstat en Linux
El comando netstat (Network status) nos informa sobre la configuración y actividad de la red. Veamos las principales opciones de este comando:
- configuración de las interfaces de red: la opción -i nos mostrará la
configuración de las interfaces de red activas y con la opción -e obtendremos
información extendida (obtendremos la misma salida que con el comando ifconfig):
$ netstat -ie eth0 Link encap:Ethernet HWaddr 00:4F:49:01:E9:91 inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::24f:49ff:fe01:e991/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:141 errors:0 dropped:0 overruns:0 frame:0 TX packets:71 errors:96 dropped:0 overruns:0 carrier:192 collisions:1632 txqueuelen:1000 RX bytes:17043 (16.6 KiB) TX bytes:10292 (10.0 KiB) Interrupt:10 Base address:0xe000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:244 errors:0 dropped:0 overruns:0 frame:0 TX packets:244 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:16432 (16.0 KiB) TX bytes:16432 (16.0 KiB)
Si tenemos activa una conexión PPP (modem), veremos la interfaz ppp0:
ppp0 Link encap:Point-to-Point Protocol inet addr:80.103.4.222 P-t-P:62.36.214.19 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:10 errors:0 dropped:0 overruns:0 frame:0 TX packets:4 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:2151 (2.1 KiB) TX bytes:63 (63.0 b)
Si añadimos la opción -a mostrará también las interfaces que no estén up.
- enrutamiento: la opción -r nos mostrará la tabla de
enrutamiento (obtendremos la misma salida que con el comando route):
$ netstat -r Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface localnet * 255.255.255.0 U 0 0 0 eth0 default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
Vemos que netstat usa el mecanismo de resolución de nombres: en vez de la IP de red 192.168.1.0 usa localnet, el nombre que figura en /etc/networks. El contenido de /etc/networks es:
localnet 192.168.0.0
Para evitar el mecanismo de resolución de nombres y ver el enrutamiento con las direcciones IP añadiremos la opción -n:
$ netstat -rn Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
- conexiones activas: para ver las conexiones activas TCP (-t) y UDP (-u) haremos:
$ netstat -tu Active Internet Connections (servers) Proto R S Local Address Foreign Address State tcp 0 0 pc450.fransbern:50053 212.23.37.8:www ESTABLISHED tcp 0 0 pc450.fransbern:46854 uned.es:https ESTABLISHED tcp 0 0 pc450.fransberns.com:1024 192.168.0.3:telnet ESTABLISHED
Por ejemplo, vemos que tenemos una conexión Telnet activa con origen en nuestra máquina y destino la máquina 198.168.0.3. Vemos también que netstat usa los nombres de puertos que figuran en /etc/services. Para evitarlo y ver el número de puerto usaremos la opción -n:
$ netstat -tun Active Internet Connections (w/o servers) Proto R S Local Address Foreign Address State tcp 0 0 192.168.0.2:50053 212.23.37.8:80 ESTABLISHED tcp 0 0 192.168.0.2:46854 62.204.192.164:443 ESTABLISHED tcp 0 0 192.168.0.2:1024 192.168.0.3:23 ESTABLISHED
- puertos que están escuchando: para ver los puertos TCP y UDP que están esperando
una conexión (escuchando), usaremos la opción -l:
$ netstat -tul Active Internet connections (only servers) Proto R S Local Address Foreign Address State tcp 0 0 *:npmp-gui *:* LISTEN tcp 0 0 *:sunrpc *:* LISTEN tcp 0 0 *:auth *:* LISTEN tcp 0 0 localhost.localdom:smtp *:* LISTEN tcp6 0 0 *:ssh *:* LISTEN tcp6 0 0 *:ipp *:* LISTEN udp 0 0 *:netbios-ns *:* udp 0 0 *:netbios-dgm *:* udp 0 0 *:ipp *:* udp 0 0 *:xdmcp *:*
Comando ping en Linux
El comando ping permite verificar si una máquina remota responde, nos dice si un ordenador está actualmente conectado a Internet y la calidad y velocidad de su conexión.
Utiliza el protocolo ICMP (Internet Control Message Protocol), un protocolo similar a UDP pero más simple, ya que no posee identificación de puertos, y que se utiliza para mensajes de control y error. Funciona enviando paquetes ICMP ECHO_REQUEST (pings).
Veamos cómo utilizar ping:
- comprobar si una máquina remota responde: podemos usar la dirección IP o el nombre
del host. Por ejemplo:
$ ping pc350 PING pc350.fransberns.com (192.168.0.5) 56(84) bytes of data. 64 bytes from pc350.fransberns.com: icmp_seq=1 ttl=64 time=0.792 ms 64 bytes from pc350.fransberns.com: icmp_seq=2 ttl=64 time=3.38 ms 64 bytes from pc350.fransberns.com: icmp_seq=3 ttl=64 time=0.752 ms ... --- pc350.fransberns.com ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 5013ms rtt min/avg/max/mdev = 0.752/1.207/3.382/0.973 ms
Por defecto, el comando no se detiene y hay que apagarlo con <Ctrl+C>. Por eso es preferible especificar el número de pings que queremos hacer con la opción -c, por ejemplo 5:
$ ping -c 5 pc350
- comprobar el sistema DNS: ping permite comprobar el mapeo de nombres a IPs, y sirve tanto
para la red local como para Internet, ya que utiliza /etc/hosts y /etc/resolv.conf
- probamos con localhost y lo encuentra en /etc/hosts:
$ ping localhost PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.
- probamos con la propia máquina, pc450, y la encuentra en /etc/hosts:
$ ping pc450 PING pc450.fransberns.com (192.168.0.2) 56(84) bytes of data.
- si probamos con una máquina de la red no la encuentra: en /etc/hosts
no está listada, recurre a los DNS del ISP y allí no la conocen:
$ ping pc350 ping: unknown host pc350
Debemos añadir las máquinas locales a /etc/hosts o montar un servidor DNS local.
- si probamos con telefonica.net consulta a los DNS del ISP y la encuentra:
$ ping telefonica.net PING telefonica.net (213.4.130.95) 56(84) bytes of data.
- probamos con localhost y lo encuentra en /etc/hosts:
Comando traceroute en Linux
El comando traceroute permite determinar la ruta tomada por un paquete para alcanzar su destino, ya sea en Internet o en la red local. Podemos utilizar la dirección IP o el nombre del host. Por ejemplo:
$ traceroute telefonica.net traceroute to telefonica.net (213.4.130.95) 1 192.168.0.1 (192.168.0.1) 3.600 ms 2 192.168.153.1 (192.168.153.1) 46.066 ms 3 98.Red-80-58-14.staticIP.rima-tde.net (80.58.14.98) 44.468 ms 4 90.Red-80-58-72.staticIP.rima-tde.net (80.58.72.90) 71.658 ms ... |
Para una máquina de la red local haremos:
$ traceroute pc450 traceroute to pc350.fransberns.com (192.168.0.5) 1 pc350 (192.168.0.5) 2.561 ms |
Averiguar nuestra IP
Uno de los usos de traceroute es averiguar nuestra IP pública. Si con este método no la averiguamos (algunos firewall o router no se dejan ver), la obtendremos entrando en la página showmyip.com o en internautas.org
Hay otros comandos muy similares a traceroute que pueden reemplazarlo, como:
- tracepath (paquete tracepath).
- tcptraceroute (paquete tcptraceroute).
Y también alguno para el entorno gráfico:
Comando dig en Linux
El comando dig (Domain Information Groper) permite realizar consultas a los servidores DNS, por lo que es muy útil para comprobar si el DNS está correctamente configurado en nuestra máquina. Permite comprobar tanto el mapeo de nombres a IPs como el mapeo inverso de IPs a nombres, pero sólo sirve para Internet, ya que no mira en /etc/hosts (sólo utiliza /etc/resolv.conf). Su sintaxis es:
$ dig [@servidor_dns] <nombre> [opciones] [tipo] |
- [@servidor_dns]: nombre o IP del servidor DNS al que queremos dirigir nuestra consulta, por ejemplo @dns1.nrc.ca. Si no especificamos este parámetro, utilizará los servidores DNS listados en /etc/resolv.conf
- <nombre>: nombre de dominio cuya IP queremos resolver.
- [tipo]: tipo de consulta. Valores posibles:
- A: IP del servidor que aloja al dominio (por defecto).
- NS: servidores DNS.
- MX: servidores de correo.
- ANY: todas las anteriores.
- AAAA: IP en IPv6 (si tiene).
Veamos cómo utilizar dig:
- mapeo de nombres a IPs
- si probamos con localhost no lo encuentra: no mira en /etc/hosts, consulta
a los DNS del ISP y allí no la conocen:
$ dig localhost ;; ANSWER: 0
- lo mismo ocurre con la propia máquina, pc350, o con cualquier otra máquina de la red.
- si probamos con telefonica.net consulta a los DNS del ISP y la encuentra:
$ dig telefonica.net ;; ANSWER SECTION: telefonica.net. 10356 IN A 213.4.130.95
- si probamos con localhost no lo encuentra: no mira en /etc/hosts, consulta
a los DNS del ISP y allí no la conocen:
- mapeo inverso de IPs a nombres
- si probamos con 127.0.0.1 consulta a los DNS del ISP y encuentra localhost:
$ dig -x 127.0.0.1 ;; ANSWER SECTION: 1.0.0.127.in-addr.arpa. 0 IN PTR localhost.
- si probamos con una dirección de la red local, 192.168.0.5, consulta a los DNS
del ISP y no lo encuentra:
$ dig -x 192.168.0.5 ;; ANSWER: 0
- si probamos con una IP de Internet, como 213.4.130.95, consulta los DNS del ISP
y la encuentra:
$ dig -x 213.4.130.95 ;; ANSWER SECTION: 95.130.4.213.in-addr.arpa. 60809 IN PTR www.telefonica.net.
- si probamos con 127.0.0.1 consulta a los DNS del ISP y encuentra localhost:
- servidores DNS de un dominio: para saber dónde están los servidores DNS
de un dominio (por ejemplo, telefonica.net) haremos:
$ dig telefonica.net. ns ;; ANSWER SECTION: telefonica.net. 28800 IN NS dns2.terra.es. telefonica.net. 28800 IN NS dns1.terra.es. ;; ADDITIONAL SECTION: dns2.terra.es. 28714 IN A 213.4.141.1 dns1.terra.es. 28714 IN A 213.4.132.1
Escanear puertos con Nmap en Linux
Nmap (Network Mapper, insecure.org/nmap/, paquete nmap) es probablemente el escaneador de puertos más potente que existe y el más utilizado tanto por administradores como por hackers, ya que tiene numerosas opciones de escaneo para hacking y ataques port surfing (evita ser detectado por software de detección de scaneos, hace creer al host escaneado que le escanean desde otro host, escanea a velocidad variable para no ser detectados, etc.).
Usaremos Namp para saber qué puertos tenemos abiertos y asegurarnos de que el firewall funciona correctamente, y siempre desde una máquina distinta al equipo a escanear. Su sintaxis es:
# nmap [opciones] <ip_del_servidor> |
Los puertos a escanear pueden ser un rango (1-1024), una lista (22,23,80,443) o todos (1-65535). Si no se especifica escanea los puertos denominados bien conocidos (Well know).
Debemos tener en cuenta que para Nmap un puerto puede estar de tres maneras:
- open: el puerto es accesible y hay un demonio escuchando.
- closed: el puerto es accesible pero no hay un demonio escuchando.
- filtered: el puerto no es accesible, un firewall filtra el puerto.
Veamos algunas opciones de nmap:
- escanear puertos TCP: para escanear todos los puertos (-p 1-65535) TCP (-sS) y
detectar las versiones del software (-A) haremos:
# nmap -sS -A -p 1-65535 192.168.1.2 Starting nmap 3.81 at 2006-03-22 17:35 CET Interesting ports on 192.168.0.2: (The 65530 ports scanned but not shown below are in state: closed) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 3.8.1p1 Debian.sarge.6 Protocol 2.0 80/tcp open http Apache 1.3.33 Debian GNU/Linux PHP/4.3.10-18 111/tcp open rpcbind 2 (rpc #100000) 113/tcp open auth OpenBSD identd 631/tcp open ipp CUPS 1.1 MAC Address: 00:4F:49:01:E9:91 (3com) Device type: general purpose Running: Linux 2.4.X|2.5.X|2.6.X OS details: Linux 2.4.7 - 2.6.11 Service Info: OS: OpenBSD Nmap finished: 1 IP address (1 host up) scanned in 73.125 seconds
- escanear puertos UDP: para escanear los puertos UDP (opción -sU) bien conocidos
(opción por defecto), haremos:
# nmap -sU -A 192.168.1.2
- escaneo haciendo ping: con la opción -sP lanzaremos un ping a todas
las IPs de la red (ping scan), para saber qué hosts se encuentran activos:
# nmap -sP 192.168.1.0/24 Starting nmap 3.81 at 2006-03-22 20:39 CET Host 192.168.0.1 appears to be up. MAC Address: 00:01:38:55:2C:3A (XAVi Technologies) Host 192.168.0.2 appears to be up. MAC Address: 00:50:DA:38:C5:04 (3com) Host 192.168.0.3 appears to be up. MAC Address: 00:4F:49:01:E9:91 (Unknown) Host 192.168.0.255 seems to be a subnet broadcast address. Nmap finished: 255 IP addresses (3 hosts up) scanned in 6.966 seconds
Tenemos dos frontales gráficos para Nmap que nos facilitan su uso (ejecutarlos como root):
Monitorizar el tráfico de red en Linux
Los programas que monitorizan el tráfico de una red capturan los datos que circulan por ella, y se denominan sniffers. Veamos los principales.
- Etherape (etherape.sourceforge.net, paquete etherape): monitoriza gráficamente la actividad de toda la red (debe ejecutarse como root).
- WireShark
(antes Ethereal, wireshark.org,
paquete wireshark): monitoriza el tráfico de red (ejecutarlo como root).
TShark (paquete tshark): versión de WireShark para la línea de comandos. Por ejemplo, para capturar el tráfico entre nuestro equipo y otro haremos:
# tshark 'host pc450 and host 192.168.0.4'
- IPtraf (iptraf.seul.org, paquete iptraf): monitoriza las conexiones y el tráfico de red (ejecutarlo como root).
Aunque si sólo queremos conocer el tráfico de entrada y salida de nuestras interfaces de red en tiempo real sin capturar paquetes de datos disponemos de herramientas más sencillas, sin tener que utilizar un sniffer.
- Slurm
(wormulon.net/slurm/, paquete slurm):
programa para la terminal que monitoriza gráficamente el tráfico de entrada y salida de
cualquier interfaz de red en tiempo real. Utiliza el mismo código que el plugin para el panel de
Xfce
que monitoriza el tráfico de red (paquete xfce4-netload-plugin). Para ejecutar
Slurm:
# slurm -i eth0
Sistema de detección de intrusos Snort en Linux
Snort (snort.org, paquete snort) es un sniffer de línea de comandos que actúa como un sistema de detección de intrusos (IDS, Intrusion Detection System). Rastrea los paquetes que circulan por la red y al encontrar un paquete sospechoso (según unas reglas previamente definidas), lo loguea (en un log o en MySQL).
Para analizar los logs que genera Snort se utiliza ACID (acidlab.sourceforge.net, Analysis Console for Intrusion Databases, paquete acidbase), programa con interfaz web que también puede analizar los logs de otros IDS.
Escáner de vulnerabilidades Nessus en Linux
Nessus (nessus.org, paquetes nessus nessusd), es un escáner de vulnerabilidades construido con arquitectura cliente-servidor que se utiliza para realizar auditorías de seguridad en una red:
- el servidor (nessusd) es una herramienta de línea de comandos que se encarga de los ataques y se ejecuta en la máquina que realiza el escaneo.
- el cliente (nessus) es una aplicación gráfica que se conecta a nessusd por el puerto 1241 TCP y que nos permite gestionar de forma remota los ataques, generar informes y exportarlos a formato HTML.
Frontales gráficos para controlar la red
En Linux disponemos de varios frontales gráficos para controlar la red:
Buen dato!!, gracias me voy a probar el WireShark
Muy bueno el manual
gracias por compartir sabiduria…. by Creasy
Muy bueno. Sintetico y a la vez claro. Todo el manual es muy util. Gracias por vuestro esfuezo.
Oscar
Te felicito. Muy buena explicación. Clara y concisa. Gracias
ok ok , esta bueno el post, pero me preguntaba si tendrian por ahi un tutorial de como configurar el snort ya q no me gusta en modo predeterminado, necesito usar otras cosas q vi por alli de como configurarlo pero para windows el problema es q yo uso gnu…. gracias y espero q me ayuden…..
Muy bueno de verdad, más claro que el agua. Gracias
busco manual traffPro en castellano x favor
[email protected]
hola que tal, bueno primero saludarlos por el interesante sitio web que tienen y a la vez mencionarles una interrogante que de verdad me tiene loco jeje, bueno lo que deseo hacer es utilizar el comando PING de mi maquina LINUX a otra PC WINDOWS, tengo el fedora 7 en modo grafico, y de verdad me he cansado de buscar por donde meto ese comando o si en realidad estoy por buen camino me gustaria que me ayudaran porfavor, y si hay algunos ejemplos en otras webs porfa haber si me los pasan gracias
Prueba con Configurar la red en Linux
Recomiendo ettercap y autoescan-network este ultimo muy bueno es capaz de mostrar los sistemas operativos, router, servidores entre otras..
muchisimas gracias por la informacion..me sirvio demasiado..y gracias por el buen trabajo..sigue adelante..
Esta muy bueno el articulo, pero tengo una duda, con que comando puedo ver a que velocidad esta amarrado el puerto de red????
Gracias
Perfecto, gracias! En Windows se usa el comando Ping de manera muy similar:
http://laboratoriodeinformatica.com/2010/04/como-hacer-ping-y-para-que-sirve-hacer-ping/
Saludos!
Holas, soy nuevo en linux, pero yo tengo una dist. SUSE, y no tengo problemas en hacer ping a cualquier maquina ya sea Win, Mac, Lin, el hacer ping solo es el envío y recepcion de señales y no deberías tener problema alguno.
Te recomiendo que entres a la consola del sistema (terminal) y prueba lo siguiente:
El caso mío es la que siguie…
daniel@daniel:~> ping -c 10 http://www.google.com
PING http://www.l.google.com (66.249.90.104) 56(84) bytes of data.
64 bytes from lga15s04-in-f104.1e100.net (66.249.90.104): icmp_seq=1 ttl=51 time=662 ms
64 bytes from lga15s04-in-f104.1e100.net (66.249.90.104): icmp_seq=2 ttl=51 time=366 ms
64 bytes from lga15s04-in-f104.1e100.net (66.249.90.104): icmp_seq=3 ttl=51 time=400 ms
64 bytes from lga15s04-in-f104.1e100.net (66.249.90.104): icmp_seq=4 ttl=51 time=506 ms
64 bytes from lga15s04-in-f104.1e100.net (66.249.90.104): icmp_seq=5 ttl=51 time=448 ms
64 bytes from lga15s04-in-f104.1e100.net (66.249.90.104): icmp_seq=6 ttl=51 time=424 ms
64 bytes from lga15s04-in-f104.1e100.net (66.249.90.104): icmp_seq=7 ttl=51 time=336 ms
64 bytes from lga15s04-in-f104.1e100.net (66.249.90.104): icmp_seq=8 ttl=51 time=368 ms
64 bytes from lga15s04-in-f104.1e100.net (66.249.90.104): icmp_seq=9 ttl=51 time=442 ms
64 bytes from lga15s04-in-f104.1e100.net (66.249.90.104): icmp_seq=10 ttl=51 time=530 ms
— http://www.l.google.com ping statistics —
10 packets transmitted, 10 received, 0% packet loss, time 9003ms
rtt min/avg/max/mdev = 336.293/448.598/662.822/92.092 ms
espero que te sirva de ayuda…..
Muy bueno el tutorial! Gracias!
Muy buenos articulos, os agradezco, soys extraordinarios !!!!
Muchas gracias .
Excelente.
Muy bueno, por casualidad alguien sabe como ver conexiones ocultas a netstat?
un saludo
Excelente aporte de información respeto al comando netstat.
Me sirvio en algunos detalles…
Saludos…
Esta chevere tu explicacion gracias siempre tuve presente hacer un analisis de puertos rapido y bonito sobre linux, pero tuve limitaciones de tiempo ahora todo va biennnnnnn.
Las conexiones ocultas se ven con la opción -M
Excelente información, gracias.
Gracias! Muy buena información, especialmente el parámetro -n, sino a veces parece que tengas más puertos abiertos que el 80.
hey! gracias por esta informacion, es de lo mejor que he encontrado en la red.
saludos de parte del foro de seguridadwireless ;)
gracias por la sencillez en la explicacion. muy buena
Buenas, quisiera saber como puedo extraer el trafico real de un servidor y guardar en una variable para poder usar con otros programas.
saludos
Gracias muy util y conciso.
Gracias por lo fácil de entender como preguntar al DNS
buenaa maquina!!!! funciono a la primera gracias por estos aportes
Muchas gracias excelente aporte muy buenos tus tips… yeah desde colombia……..
Muy vueno el manual tio
Gracias, bien explicado.
Esta todo muy bien, y es que tengo un problema porque ping no funciona usando tuberias (|), por ejemplo yo hago cat ip.txt | ping. y me da error eso si en el ip.txt solo hay una ip. vamos la cuestion es que no se como concadenar varios comandos con el ping.