-->
Mostrando las entradas con la etiqueta sysadmin. Mostrar todas las entradas
Mostrando las entradas con la etiqueta sysadmin. Mostrar todas las entradas

miércoles, 23 de diciembre de 2015

script para automatizar tareas (PARTE 2) - Controlar logins fallidos y mandar alerta por email

Hola seguimos con el tema de los script, ahora vamos a dar un pequeño paso más en esto de los script con cosas bastante útiles, la cosa es muy simple controlar los intentos de login en nuestro equipo por el momento a nuestros usuarios osea controlar la cantidad de intentos de acceso y en caso de ser necesario que nos llegue un email a nuestro correo reportando alguna actividad y de paso esta opción la podremos ocupar en el futuro para otros scripts y obviamente utilizaremos algunas cosas de la parte 1.
Vamos a necesitar un corrego en gmail, y tener conocimentos en comandos variados de linux y programación básica,  pueden leet la parte uno para empezar desde cero porque hay cosas que ya las explique en esa parte y no da que repita lo mismo, todo lo nuevo obvio lo explico paso a paso para no perderce.

Bueno pasemos directamente a trabajar:

  1. Primero creamos un archivo y le damos los permisos necesarios para ejecutar dicho script:
  2. Bien pasemos de lleno al script voy a explicar línea por línea:
    • La variable unahoramenos sirve para tener guardada una hora menos que la actual, osea si son las 20 horas va a guardar la hora 19, se entiende?? esto lo utilizo para que cuando ejecute el script empiece a controlar no desde la hora actual sino desde una hora antes y revisar la cantidad de intentos de acceso, obvio eso ustedes los pueden manipular como ustedes más gusten.
    • La variable horaactual obtiene la hora actual del sistema sin los segundos.
    • El comando "lastb" es lo principal de este script porque es el que lista los intentos fallidos en el sistema para todos los usuarios con información relevante como fecha, hora, etc. con la "-s" indicamos un horario en el cual queremos revisar para que no nos liste absolutamente todo desde el origen de los tiempos, obvio primero lo hacemos para algún usuario en particular en mi caso el mio (| grep hackende) y luego lo redirigimos a un txt (loginfailshackende.txt).
    • Con el comando "wc -l" lo que hacemos es contar la cantidad de lineas que tiene el archivo de txt que creamos en la línea anterior para saber exactamente la cantidad de intentos fallidos en el sistema y lo redirigimos a un txt (cantfailhackende.txt).
    •  "awk" lo que permite es manipular los strings, y precisamente sacamos lo que tiene la primer columna es decir la cantidad de intentos fallidos y lo guardamos en la variable "contador".
    • Para la variable "dia" utilizamos el comando "awk" de nuevo pero obteniendo la columna 5 que tiene justamente el número del día en que sucedio el intento de acceso del archivo "loginfailshackende.txt" con el comando "head -n 1" hacemos que solo lo haga para la primer línea porque sino guardaria la columna entera y seria ineficiente tener cosas de más.
    • En la variable "hora" justamente guardamos la hora.
    • En la variable "diahoy" guardamos el número del día de hoy.
    • Ahora llega el momento de explicar "if [ $contador -ge 3 ] && [ $dia -eq $diahoy ]; then" bueno es solo un condicional que realizara alguna acción si se cumplen uno o varios factores determinantes que permitan tomar el control para alguna acción en particular, para nuestro caso es muy simple, decimos "si [lo que tiene la variable "contador" es mayor igual a 3] y [la variable "dia" es igual a la variable "diahoy"]" hacemos...., osea simplemente controlamos 2 factores, primero que la variable contador sea mayor a 3 porque en ese caso posiblemente alguien este intentando demasiadas veces entrar y debemos actuar al respecto; y el segundo punto que solo se realice para la fecha de hoy.
    • Acá mandamos directamente el email porque se supone que se cumplieron los 2 factores en la linea de control IF, bueno yo utilice mutt para mandar el email, para instalar simplemente hacemos:Luego lo configuramos modificando el archivo "nano /root/.muttrc":Debemos de cargar los datos para configurar correctamente a mutt para eso hacemos:Esto es solo pegar lo anterior y acomodarlo a su gusto, obviamente cuando lo utilicen se darán cuenta para que se utiliza cada cosa pero obviamente yo solo lo probé en gmail (en hotmail hay que investigar un poco pero bueno como yo ya tenia ese correo lo deje...) una ves echo eso ya estamos listo para mandar email desde la consola, en nuestro script lo realizamos con un "echo" que indica el texto que aparecera en nuestro email como texto simple en nuestro caso la advertencia¡¡¡ luego con una tuberia llamamos a mutt con "-s" para indicar el encabezado del email a enviar.
    • Todo lo demas dentro de ese bucle ya lo conocemos de la parte 1.
  3. Luego el siguiente paso es mandar el script a que se ejecute con cron:
  4. Y solo agregamos la ruta del script al igual como lo hicimos en la parte 1: "3 * * * * root /home/hackendemoniado/Documentos/scripts/login_hackendefail.sh" yo lo configuro para que se ejecute cada 3 minutos para probarlo pero en realidad hay que dejarlo cada una hora eso seria cada 59 minutos o ponerlo dentro de la carpeta que se ejecuta cada hora (al script copiarlo dentro obvio) o como ustedes quieran.
  5. Para root es exactamente lo mismo solo que buscamos todo para root:
  6. Bien pasemos de lleno al script voy a explicar línea por línea:
  7. como ven es casi lo mismo pero adaptado al ususario root, luego lo agregamos a cron como hicimos para nuestro usuario anterior y listo
  8. Imagenes:





Como ven efectivamente llego el email luego de probar a traves de laterminal el acceso como root y poner 3 veces la clave mal, obvio funciona tanto para root como para nuestro usuario, es algo que me parecio curioso de hacerlo y de paso compartirlo, espero que les sea útil a ustedes y cualquier cosa me consultan porque se pueden precentar una variadad de errores que lógicamente están todos controlados con el script y con la configuración de mutt (igual como digo siempre todo puede fallar¡¡¡¡ jeje) asique ya saben consulten sus dudas y ya estare publicando la parte 3.....

sábado, 28 de noviembre de 2015

script para automatizar tareas (PARTE 1) - actualizar el sistema y guardar el history

Hola amigos como están, hoy vengo con este rollo de automatizar tareas que obvio es súper útil, para esta entretenida tarea vamos a ocupar cualquier editor de texto de su preferencia, y también vamos a ocupar cron que se utiliza para programar tareas en linux, obviamente vienen también software diseñado justamente para esta tarea pero para mi y por experiencia laboral siempre es mejor saber manipular cron porque raras veces tendrán en sus manos algún server con GUI, pero bueno esa es mi opinión personal, todo lo hice como root asique si ustedes no solo agregue sudo,pasemos directamente a mancharnos los dedos.

  1. El primer paso es crear una carpeta que contenga todos nuestros scripts asique la creamos donde queramos y le damos un nombre descriptivo:
  2. Ahora tenemos que crear nuestro primer script para eso hacemos:
  3. Luego debemos convertir dicho archivo a ejecutable:
  4. Llego el momento de empezar a modificar dicho archivo, yo voy a ocupar vim para editarlo:
  5. Primero debemos de saber que tiene que tener una estructura particular para poder funcionar y para esto indicamos 2 cosas una seria decirle que es un bash lo que estamos escribiendo y el tipo de codificación, aunque este último no llega a ser estricto pueden presentarse situaciones en las cuales se necesite este parámetro por ende siempre acostumbro a ponerlo:
  6. Pasamos a escribir el script:
  7. A no desesperarse porque es muy sencillo, la primer línea hace el update como si lo tipiaramos nosotros y con el signo ">" le indico que guarde la salida de la pantalla en un archivo llamado update.txt situado en el directorio tmp, la segunda línea estamos declarando una pequeña variable que en nuestro caso nos permite guardar en "fechahoy" la fecha de hoy en formate dia-mes-año osea si ustedes ponen en la terminal date +"%d-%m-%Y" se darán cuenta a que me refiero y el símbolo $ es parecido al uso que tiene en php osea nos ayuda a guardar todo ese string en la variable, en la tercera línea creo un archivo comprimido llamado backupsupdate.$fechahoy.tar.gz que con esa línea y la explicación de la línea 2 ya sea darán cuanta para que hacemos ese paso y obviamente le indicamos que archivo queremos comprimir osea le indicamos la ruta de update.txt, la cuarta línea simplemente copiamos el tar recién echo en una carpeta ya definida por mi para guardar de manera ordenada los backups (obviamente esas carpetas las tienen que crear primero jaja), la quinta borramos el tar osea borramos el que creamos en la tercer línea, en la sexta línea borramos el txt.
Ahora después de tener este script ya echo y entendido toca modificar cron para automatizar esta tarea, para esto editamos el siguiente archivo: Nos aparece algo como esto:

Les paso a explicar pero igual con solo leer ya se deben de imaginar como funciona crontab o cron, la clave de esto son los 5 primeros parámetros que a medida que sigamos dando ejemplos veremos variantes pero la base es que se debe de indicar primero los minutos, luego la hora, luego día del mes, numero del mes, y día de la semana segudi del usuario que ejecutara el comando o el script y segudo de dicho comando o directorio del scripts, para nuestro ejemplo:
"19 15 * * * root /home/hackendemoniado/Documentos/scripts/actualiza.sh"
creo que es bastante descriptivo lo único que falta aclarar es que los asteriscos "*" representan todos los valores osea algo que se repite siempre para todos los valores, yo lo diseñe para que se ejecute siempre a las 15 horas con 19 minutos, la parte comentada puede variar dependiendo la distribución (yo use fedora 23), ya con esto lo único que resta es guardar los cambio y revisar la carpeta donde dijimos que estará el backups, yo al poner el comando ls veo los siguiente:


Donde pueden ver que se creo a la hora que yo le especifique y con el formato con el dia mes y año como está programado en el script.

Luego pasamos a realizar algo parecido pero para resguardar todos nuestros comandos que vamos ocupando tanto para root como para algún usuario que nosotros queramos controlar:

  1. vamos a crear en total  3 scirpt asique como ya saben como hacer tiro directamente los comandos:
  2. Luego pasamos a modificar los archivos primero debemos saber que maejar el comando history con un script es diferente a lo anterior por ende no necesitamos las primeras 2 líneas para que ejecute bien, bueno realizamos el script para "guardahistory_hackendemoniado.sh":
  3. Hacemos lo mismo con el archivo "guardahistory_root.sh":
  4. Por último modificamos el script llamado "backups_history.sh":
  5. Es bastante parecido al script que hicimos primero, la única diferencia es que borramos cualquier archivo que empiece con history_ dentro de la carpeta tmp, osea "/tmp/history_*" hace justamente eso, ahora lo agregamos a cron:
  6. Como se darán cuenta el history de mi usuario lo represento como que lo ejecuto como mi nombre de usuario osea hackendemoniado y el de root con root, y los configuro a los 3 con esos horarios de ejecución para todos los días del año logicamente debemos de ejecutar en ese orden para que no falle asique cuidado con eso, ahora vemos con el comando ls -al como quedan los backups:
Bueno con esto quise empezar y hacer un buen hola mundo algo diferente y con cosas útiles para que todos les puedan dar uso, de igual manera ya voy a seguir haciendo script de este estilo con cosas distintas, se podrán imaginar la infinidad de cosas que se pueden hacer, por ejemplo instalar algún servidor y tener scripts preparados para instalar todo de una sin tener que tipiar todo, o configurar infinidad de servicios, backups redundantes, etc. es realmente infinitas las posibilidades solo es cuestión de organizarse y enfocarse en hacerlo bien para que ejecute el script y luego ya poder usarlo cuantas veces queramos, realmente es algo muy útil que todo el mundo que se dedica a trabajar como sysadmin o incluso programadores lo utilizan porque simplifica las tareas, aparte cuando uno se dedica a esto siempre busca ahorrar tiempo y con esto se logra efectivamente solo es cuestión de leer un poco y adaptarlo a nuestras circunstancias, espero que les sea de su agrado y cualquier cosa tengo todos mis script hechos de este post en: https://github.com/hackendemoniado/scripts 

bueno amigos cualquier cosa consulten y pronto estare subiendo más post....