martes, 29 de septiembre de 2015

20 Comandos Netstat para Administradores de Redes Linux

1. Listado de todos los puertos de escucha TCP y conexiones UDP

Listado de todos los puertos (TCP y UDP) mediante netstat -a.

2. Listado de conexiones de puertos TCP

Listado de sólo conexiones de puerto TCP (Transmission Control Protocol) utilizando netstat -at.

3. Listado de conexiones UDP Puertos

Listado sólo conexiones de puerto UDP (User Datagram Protocol) utilizando netstat -au.

4. Listado de todas las conexiones de Escucha

Listado de todas las conexiones activas de escucha de puertos con netstat -l.

5. Listado de todos los puertos de escucha TCP

Listado de todos los puertos TCP de escucha activa mediante la opción netstat -lt.

6. Listado de todos los puertos de escucha UDP

Listado de todos los puertos UDP de escucha activa mediante la opción netstat -lu.

7. Listado de todos los puertos de escucha UNIX

Listado de todos los puertos de escucha UNIX activos utilizando netstat -lx.

8. Mostrando estadísticas por protocolo

Muestra estadísticas por protocolo. De forma predeterminada, se muestran las estadísticas para el TCP, UDP, ICMP e IP. El parámetro -s se puede utilizar para especificar un conjunto de protocolos.

9. Mostrando estadísticas por protocolo TCP

Mostrando estadísticas de único protocolo TCP mediante la opción netstat -st.

11. Visualización del nombre de servicio con PID

Viendo nombre de servicio con su número PID, utilizando la opción netstat -tp mostrará "PID / Program Name". 

12. Viendo modo promiscuo

Viendo modo promiscuo con ac, netstat imprimirá la información seleccionada o actualización de la pantalla cada cinco segundo. Actualización de la pantalla por defecto en cada segundo. netstat -ac 5 | grep tcp

13. Viendo enrutamiento IP del núcleo

14. Muestra la tabla de enrutamiento del núcleo 

Con netstat y comando de la ruta IP. netstat -r

15. Mostrando transacciones de paquetes de interfaz de red 

Que incluye tanto la transferencia y recepción de paquetes con un tamaño de MTU. netstat -i

Mostrando tabla de interfaz del kernel, similar al comando ifconfig.
netstat -ie

16. Visualización de información de IPv4 e IPv6

Muestra la información de pertenencia a un grupo multicast de IPv4 e IPv6. netstat -g

17. Imprimir Información Netstat continuamente

Para obtener información netstat cada pocos segundos, a continuación, utilice el comando siguiente, se imprimirá la información netstat continuamente, por ejemplo, cada pocos segundos. netstat -c

18. Encontrar direcciones no soportadas

Encontrar familias de direcciones sin configurar con alguna información útil. netstat --verbose

19. Encontrar programas de escucha

Averigüe cuántos escuchar programas que se ejecutan en un puerto. netstat -ap|grep http

20. Visualización de estadísticas de red RAW. netstat --statistics --raw




















 

martes, 25 de agosto de 2015

La generación de claves GPG: No hay suficientes bytes aleatorios disponibles

No bytes aleatorios suficientes disponibles
Generación de claves con GnuPG

Cualquier persona que quiera crear una nueva clave establecido a través de GnuPG (GPG) pueden presentar en este error:

Tenemos que generar una gran cantidad de bytes aleatorios.  Es una buena idea realizar
 alguna otra acción (escriba en el teclado, mueva el ratón, utilizar la
 discos) durante la generación privilegiada;  esto da el número aleatorio
 generador una mejor oportunidad de ganar suficiente entropía.

 No hay suficientes bytes aleatorios disponibles.  Por favor hacer algún otro trabajo para dar
 el sistema operativo la oportunidad de recoger más entropía!  (Necesidad 142 bytes más) 

El problema es causado por la falta de entropía (o el ruido del sistema aleatorio).

Para comprobar la entropía disponible, compruebe los parámetros del kernel colocando el siguiente comando en un terminal como root:
cat /proc/sys/kernel/random/entropy_avail

root@repo-chimanta:/# cat /proc/sys/kernel/random/entropy_avail
15

Para solucionarlo, ejecute el comando rngd: rngd -f -r / dev / urandom

Debian / Ubuntu: apt-get install rng-tools
Red Hat / CentOS: yum install -y rng-utils

root@repo-chimanta:/# rngd -f -r /dev/urandom
rngd 2-unofficial-mt.14 starting up...
entropy feed to the kernel ready

root@repo-chimanta:/# cat /proc/sys/kernel/random/entropy_avail
3413





lunes, 17 de agosto de 2015

Comando SED en Linux

Qué es sed

SED (Stream EDitor) es un editor de flujos y ficheros de forma no interactiva. Permite modificar el contenido de las diferentes líneas de un fichero en base a una serie de comandos o un fichero de comandos (-f fichero_comandos).

Sed recibe por stdin (o vía fichero) una serie de líneas para manipular, y aplica a cada una de ellas los comandos que le especifiquemos a todas ellas, a un rango de las mismas, o a las que cumplan alguna condición..

Su sintaxis es de la forma:
sed [opciones] ´[comandos]´ archivos-de-entrada.

Algunas de sus opciones son:

i Insertar línea antes de la línea actual.
a Insertar línea después de la línea actual.
c Cambiar línea actual.
d Borrar línea actual.
p Imprimir línea actual en salida estándar.
s Sustituir cadena en línea actual.
r archivo Añadir contenido de “archivo” a la línea actual.
w archivo Escribir salida a un archivo.
! Aplicar instrucción a las líneas no seleccionadas por la condición.

q Finalizar procesamiento del archivo.

Por ejemplo:

  Sustituir apariciones de cadena1 por cadena2 en todo el fichero:
  # sed 's/cadena1/cadena2/g' fichero > fichero2

  Sustituir apariciones de cadena1 por cadena2 en las líneas 1 a 10:
  # comando | sed '1,10 s/cadena1/cadena2/g'
  
  Eliminar las líneas 2 a 7 del fichero
  # sed '2,7 d' fichero > fichero2
  
  Buscar un determinado patrón en un fichero:
  # sed -e '/cadena/ !d' fichero
  
  Buscar AAA o BBB o CCC en la misma línea:
  # sed '/AAA/!d; /BBB/!d; /CCC/!d' fichero

  Buscar AAA y BBB y CCC:
  # sed '/AAA.*BBB.*CCC/!d' fichero
  
  Buscar AAA o BBB o CCC (en diferentes líneas, o grep -E):
  # sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d
  # gsed '/AAA\|BBB\|CCC/!d'

Formato de uso


El formato básico de uso de sed es:
  # sed [-ns] '[direccion] instruccion argumentos'

Donde:

[direccion] es opcional, siendo un número de línea (N), rango de números de línea (N,M) o búsqueda de regexp (/cadena/) indicando el ámbito de actuación de las instrucciones. Si no se especifica [direccion], se actúa sobre todas las líneas del flujo.
Instruccion puede ser:
i = Insertar línea antes de la línea actual.
a = Insertar línea después de la línea actual.
c = Cambiar línea actual.
d = Borrar línea actual.
p = Imprimir línea actual en stdout.
s = Sustituir cadena en línea actual.
r fichero = Añadir contenido de "fichero" a la línea actual.
w fichero = Escribir salida a un fichero.
! = Aplicar instrucción a las líneas no seleccionadas por la condición.
q = Finalizar procesamiento del fichero.
-n: No mostrar por stdout las líneas que están siendo procesadas.

-s: Tratar todos los ficheros entrantes como flujos separados.

Ejemplos de sustitución

Reemplazar cadenas:
  # sed 's/^Host solaris8/Host solaris9/g' fichero > fichero2

Reemplazar cadenas sólo en las lineas que contentan una cadena:
  # sed '/cadena_a_buscar/ s/vieja/nueva/g' fichero > fichero2

Reemplazar cadenas sólo en en determinadas líneas:
  # sed '5,6 s/vieja/nueva/g' fichero > fichero2

Reemplazar multiples cadenas (A o B):
  # sed 's/cadenasrc1\|cadenasrc2/cadena_nueva/g'

Sustituir líneas completas (c) que cumplan o no un patrón:
  # echo -e "linea 1\nlinea 2" | sed '/1/ cPrueba'
    Prueba
    linea 2
  # echo -e "linea X 1\nlinea 2" | sed '/1/ !cPrueba'
    linea 1
    Prueba


Ejemplos de Inserción

Insertar en una linea especifica en este caso la linea 41 del archivo fichero.txt
sed -i '41a Texto_a_ingresar' fichero.txt


Insertar 3 espacios en blanco al principio de cada línea:
  # sed 's/^/   /' fichero

Añadir una línea antes o despues del final de un fichero ($=última línea):
  # sed -e '$i Prueba' fichero > fichero2
  # sed -e '$a Prueba' fichero > fichero2

Insertar una linea en blanco antes de cada linea que cumpla una regex:
  # sed '/cadena/{x;p;x;}' fichero

Insertar una linea en blanco detras de cada linea que cumpla una regex:
  # sed '/cadena/G' fichero

Insertar una linea en blanco antes y despues de cada linea que cumpla una regex:
  # sed '/cadena/{x;p;x;G;}' fichero
  
Insertar una línea en blanco cada 5 líneas:
  # sed 'n;n;n;n;G;' fichero
  
Insertar número de línea antes de cada línea:
  # sed = filename | sed 'N;s/\n/\t/' fichero
  
Insertar número de línea, pero sólo si no está en blanco:
  # sed '/./=' fichero | sed '/./N; s/\n/ /'

Si una línea acaba en \ (backslash) unirla con la siguiente:
  # sed -e :a -e '/\\$/N; s/\\\n//; ta' fichero

Ejemplos de Selección/Visualización

  Ver las primeras 10 líneas de un fichero:
  # sed 10q
  
Ver las últimas 10 líneas de un fichero:
  # sed -e :a -e '$q;N;11,$D;ba'
  
Ver un rango concreto de líneas de un fichero:
  # cat -n fich2 | sed -n '2,3 p'
    2    linea 2
    3    linea 3
  (Con cat -n, el comando cat agrega el número de línea).
  (Con sed -n, no se imprime nada por pantalla, salvo 2,3p).

Ver un rango concreto de líneas de varios ficheros:
  # sed '2,3 p' *
    linea 2 fichero 1
    linea 3 fichero 1
    linea 2 fichero 2
    linea 3 fichero 2
  (-s = no tratar como flujo sino como ficheros separados)

Sólo mostrar la primera linea de un fichero:
  # sed -n '1p' fichero > fichero2.txt

No mostrar la primera linea de un fichero:
  # sed '1d' fichero > fichero2.txt

Mostrar la primera/ultima línea de un fichero:
  # sed -n '1p' fichero
  # sed -n '$p' fichero

Imprimir las líneas que no hagan match con una regexp (grep -v):
  # sed '/regexp/!d' fichero
  # sed -n '/regexp/p' fichero

Mostrar la línea que sigue inmediatamente a una regexp:
  # sed -n '/regexp/{n;p;}' fichero

Mostrar desde una expresión regular hasta el final de fichero:
  # sed -n '/regexp/,$p' fichero
  
Imprimir líneas de 60 caracteres o más:
  # sed -n '/^.\{60\}/p' fichero
  
Imprimir líneas de 60 caracteres o menos:
  # sed -n '/^.\{65\}/!p' fichero
  # sed '/^.\{65\}/d' fichero
  
Ejemplos de Borrado

Eliminar un rango concreto de líneas de un fichero:
  # sed '2,4 d' fichero > fichero2.txt

Eliminar todas las líneas de un fichero excepto un rango:
  # sed '2,4 !d' fichero > fichero2.txt
  
Eliminar la última línea de un fichero
  # sed '$d' fichero

Eliminar desde una línea concreta hasta el final del fichero:
  # sed '2,$d' fichero > fichero2.txt

Eliminar las líneas que contentan una cadena:
  # sed '/cadena/ d' fichero > fichero2.txt
  # sed '/^cadena/ d' fichero > fichero2.txt
  # sed '/^cadena$/ d' fichero > fichero2.txt

Eliminar líneas en blanco (variación del anterior):
  # comando | sed '/^$/ d'
  # sed '/^$/d' fichero > fichero2.txt

Eliminar múltiples líneas en blanco consecutivas dejando sólo 1:
  # sed '/./,/^$/!d' fichero

Añadir una línea después de cada línea:
  # echo -e "linea 1\nlinea 2" | sed 'aPrueba'
    linea 1
    Prueba
    linea 2
    Prueba

Eliminar espacios al principio de línea:
  # sed 's/^ *//g' fichero

Eliminar todos los espacios que haya al final de cada línea:
  # sed 's/ *$//' fichero

Eliminar espacios sobrantes a principio y final de línea, o ambos:
  # sed 's/^[ \t]*//' fichero
  # sed 's/[ \t]*$//' fichero
  # sed 's/^[ \t]*//;s/[ \t]*$//' fichero

Eliminar tags HTML:
  # sed -e :a -e 's/<[^>]*>//g;/</N;//ba' fichero
  
Borrar líneas duplicadas no consecutivas de un fichero:
  # sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' fichero

Eliminar líneas en blanco y comentarios bash:
  # comando | sed '/^$/ d'
  # sed '/^$/d; / *#/d' fichero > fichero2.txt

Uso de salida selectiva

Salir a nuestra voluntad antes de acabar el fichero:
  # sed -e '/uno/ s/uno/1/' -e '/salir/ q' fichero > fichero2.txt
  # sed 10q fichero
  # sed q fichero

Equivalencia de -e con ";":
  # sed -e '/AAA/b' -e '/BBB/b' -e 'd'  ==  sed '/AAA/b;/BBB/b;d'

Usar 'q' apropiadamente reduce tiempo de procesamiento:
  # sed -n '10,20p' fichero
  # sed -n '21q;10,20p' fichero  -> Más rápido que el anterior.
  
Conversión de CRLF de DOS a formato UNIX (LF):
  # sed 's/.$//' fichero
  
Conversión de LF de UNIX a formato DOS (CRLF):
  # sed 's/$'"/`echo \\\r`/" fichero
  
Obtener el Subject de un correo, pero sin cadena "Subject: ":
  # sed '/^Subject: */!d; s///;q' fichero
  
Imprimir párrafo (cadenas entre 2 líneas en blanco) si contiene XXX:
  # sed -e '/./{H;$!d;}' -e 'x;/XXX/!d;' fichero

Imprimir párrafo si contiene (1) XXX y ZZZ o bien (2) XXX o ZZZ :
  # sed -e '/./{H;$!d;}' -e 'x;/XXX/!d;/ZZZ/!d'
  # sed -e '/./{H;$!d;}' -e 'x;/XXX/b' -e '/ZZZ/b' -e d


Insertar espacios en blancos en un archivo con SED, expresiones regulares

Insertar espacios en un fichero

Añadir una línea en blanco después de cada frase (forzada por un retorno de carro):
sed G fichero.txt

Añadir una línea en blanco después de cada frase (forzada por un retorno de carro), sin tener en cuenta las líneas en blanco existentes:
sed '/^$/d;G' fichero.txt

Añadir dos líneas en blanco después de cada frase (forzada por un retorno de carro),
sed 'G;G' fichero.txt

Insertar una línea en blanco antes de cada línea que cumpla con una “/ocurrencia/” (la ”ocurrencia” puede ser una expresión regular):
sed '/Fin/{x;p;x}' fichero.txt

Insertar una línea en blanco antes y después de cada línea que cumpla con una /ocurrencia/ (la ”ocurrencia” puede ser una expresión regular):
sed '/Inicio/G' fichero.txt

Insertar una línea en blanco antes y después de cada línea que cumpla con una /ocurrencia/ (la ”ocurrencia” puede ser una expresión regular):
sed '/Stream EDitor/{x;p;x;G}' fichero.txt

miércoles, 12 de agosto de 2015

Eliminar determinado texto en un archivo con SED, expresiones regulares

Sintaxis

sed '{[/]<n>|<cadena>|<regex>[/]}d' <nombre_ fichero>
sed '{[/]<direccion1>[,<direccion2>][/]d' <nombre_fichero
/.../ = delimitadores
n = el número de línea
cadena = la cadena contenida en la línea
regex = expresión regular correspondiente a la ocurrencia buscada
direccion = la dirección de una línea (número u ocurrencia)
d = delete (borrar)

Ejemplos

Eliminación de la 3ra línea 

sed '3d' mi_fichero.txt


Eliminación de la línea conteniendo la cadena "awk" 

sed '/awk/d' mi_fichero.txt


Eliminación de la última línea 

sed '$d' mi_fichero.txt


Eliminación de todas las líneas vacías 

sed '/^$/d' mi_fichero.txt
sed '/./!d' mi_fichero.txt


Eliminación de la línea conteniendo una expresión regular 
(aquí se elimina la línea conteniendo caracteres numéricos (al menos 1 cifra) situados al final de la línea) 

sed '/[0-9/][0-9]*$/d' mi_fichero.txt


Eliminación del intervalo comprendido entre las líneas 7 y 9 

sed '7,9d' mi_fichero.txt


Lo mismo pero esta vez la dirección es reemplazada por una ocurrencia 

sed '/-Inicio/,/-Fin/d' mi_fichero.txt

Nota

Los ejemplos precedentes únicamente modifican la visualización del archivo (salida estándar 1 = la pantalla). 
Para realizar modificaciones permanentes, en las antiguas versiones (<4) utilizar un fichero temporal, para GNU sed utilizar el parámetro "-i[sufijo]" (--in-place[=sufijo]), como en el ejemplo siguiente: 

sed -i".bak" '3d' mi_fichero.txt


No mostrará el resultado en la salida estándar, y modificará el fichero original "mi_fichero.txt" eliminando la 3ra línea y creará un fichero de respaldo llamado "mi_fichero.txt.bak" 
---------------------------------------------------

Fichero a ser utilizado en los ejemplos (mi_fichero.txt): 

Introducción
Este es un ejemplo de fichero para familiarizarse con el filtro “sed”.

Presentación

-Inicio-
Sed es un editor de flujo (Stream EDitor), derivado del editor de texto “ed”, muy utilizado
en los sistemas Unix.
-Fin-

Uso

El comando más utilizado del filtro “sed” es sin dudas el comando de sustitución (s), que
permite reemplazar en cada línea la primera ocurrencia de una cadena1 por una cadena2.
Para una sustitución de todas las ocurrencias (encontradas) en cada línea hay que utilizar
el parámetro “g” (global).

Conclusión

El filtro “sed” es sin dudas uno de los comandos más utilizados en asociación con otros
comandos como “grep” o "awk" para la escritura de scripts shell.
El conocimiento y el dominio de expresiones regulares es un plus.

martes, 11 de agosto de 2015

Insertar determinado texto en un archivo con SED, expresiones regulares

En determinadas ocasiones necesitamos insertar en el final de un archivo un texto, para ello podemos usar echo:

echo "Texto al final del archivo" >> archivo.txt

Pero, ¿qué hacer si deseo insertar el texto en el inicio?

Con sed y los parámetros adecuados podemos hacer esto y más.

Por ejemplo, para insertar en el inicio de un archivo un texto sería:

sed -i '1i Aqui texto que ira en la primera linea' archivo.txt


sed -i '22i moises    ALL=(ALL:ALL) ALL' /etc/sudoers  
Mientras que para insertar en el final es:

sed -i '$a Aqui el texto que ira en la ultima linea' archivo.txt






O bien el echo de toda la vida:

echo "Aqui el texto que ira en la ultima linea" >> archivo.txt

Para sustituir una linea es:

sed -i '1 s|texto_actual|texto_nuevo|g' /ruta/archivo 

sed -i '1 s|samba|samba.proyec.net.ve|g' /etc/hostname

Bueno nada más que agregar, es un post bastante corto en realidad.

Espero le resulte de utilidad a alguien, saludos.

miércoles, 22 de julio de 2015

Configurar SSH por otro puerto diferente al puerto 22

SSH es sin lugar a dudas el pan de cada día de los que administramos redes. Pues necesitamos controlar, administrar remotamente otros ordenadores y/o servidores, y usando SSH podemos hacer esto … podemos hacer esto y mas

Sucede que SSH usa por defecto el puerto 22, por lo que todos los intentos de hacking a SSH siempre irán por defecto al puerto 22. Una medida básica de seguridad es simplemente NO usar SSH en este puerto, configuraremos  por ejemplo SSH para que escuche (trabaje) en el puerto 9122.

Lograr esto es sumamente simple.

1. Debemos obviamente tener SSH instalado en nuestro servidor (paquete openssh-server)

2. Editemos el archivo /etc/ssh/sshd_config

Para esto en una terminal (como root) ponemos:

    nano /etc/ssh/sshd_config

Ahí entre las primeras líneas vemos una que dice:

Port 22

Le cambiamos el 22 por otro número, que sería el nuevo puerto, en este ejemplo dijimos que usaríamos el 9122, por lo que la línea nos quedaría:

Port 9122

3. Ahora reiniciamos SSH para que lea la nueva configuración:

    /etc/init.d/ssh restart

Esto en caso que usen Debian, Ubuntu, SolusOS, Mint. Si usan Arch sería:

    /etc/rc.d/ssh restart

Y listo, ya tendrán SSH por otro puerto (9122 según el ejemplo que hemos usado acá)

Bueno creo que no hay nada más que agregar.

Cualquier duda que tengan, me dejan saber

Saludos

PD: Recuerden, todo esto tienen que hacerlo con privilegios administrativos… bien sea como root, o usando sudo.