En esta serie de entradas vamos a revisar como ver reglas de firewall/cortafuegos en nuestras maquinas Linux, esto a pesar que no es común verlo en local, generalmente se delega este tema a los equipos de redes.
En esta ocasión vamos a centrarnos en distribuciones basadas en RHEL y que usan el paquete “firewalld”, en entradas posteriores abordaremos ufw para ubuntu, nft para debian y el descontinuado iptables que aun se encuentra en muchos sistemas.
el comando básico para ver todas las reglas en ejecución sería el siguiente:
firewall-cmd –list-all
En el anterior comando podemos observar que se tiene abiertos los servicios de http, https, mysql, entre otros, así como los puertos 3000 en TCP y 10050 también en TCP.
De lo anterior podemos inferir que podemos declarar reglas haciendo referencia a servicios, siempre y cuando conozcamos sus nombres en /etc/services, o bien agregar un puerto diferente junto con su protocolo.
Para poder ver las reglas que sobrevivirán a un reinicio sencillamente sería agregarle la opción –perm
firewall-cmd –list-all –perm
Por ultimo en caso que tengamos zonas adicionales en firewalld, podemos ver solo la reglas de esa zona.
firewall-cmd –list-all –zone=trusted
En la anterior captura podemos observar que la zona trusted no tiene reglas definidas, pero por lo contrario su target es ACCEPT, es decir cualquier interfaz que asignemos a la zona trusted, todo su trafico será permitido.
Por ultimo veremos el comando para listar las zonas definidas dentro de firewalld
firewall-cmd –list-all-zones
Como podemos observar se listan algunas interfaces definidas por el firewall.
Con esto terminamos la entrada de este post, como siempre se recomienda consultar las paginas man de cada comando así como recordar si hay alguna duda nos pueden escribir a través de nuestros canales.
Una de las tareas mas básicas a la hora de la gestión de paquetes es la de buscar un paquete para instalar dentro del sistema; previamente aclarando que los repositorios deben de estar habilitados dentro del sistema y que el sistema debe alcanzar los mismos, por lo general están en internet.
Buscando un paquete en RHEL y derivados
Asumiendo que el sistema es un sistema reciente en donde nos apoyaremos mas que todo en la herramienta dnf, si es una distribución con algunos años deberíamos usar yum.
La búsqueda la hacemos con el siguiente comando asumiendo que no conocemos el nombre del paquete en su totalidad:
dnf search iptraf
Como podemos ver en la imagen anterior el gestor encontró un paquete que se llama iptraf-ng, lo cual en caso de ser lo que buscamos procederíamos a instalarlo.
Otro caso que puede presentarse es que no conozcamos el nombre o descripción del paquete pero si un archivo que pertenezca al mismo, ejemplo, sabemos el nombre del binario pero no el del nombre del paquete, para esta tarea debemos ejecutar el comando dnf con la opción whatprovides y la ruta o comodín que se ajuste a la ruta, veamos un ejemplo para el programa snmpwalk
dnf what provides */snmpwalk
En este ultimo caso observamos que el paquete que contiene el programa snmpwalk es net-snmp-utils, el cual sería el paquete a instalar.
Buscando un paquete en Debian y derivados
Como bien sabemos en debian y derivados tenemos la herramienta apt, la cual nos ayuda con la gestión del sistema dpkg, solo que en este caso hay un aspecto adicional a considerar y es que a diferencia que en dnf, apt no actualiza/verifica los repositorios cada vez que se usa el comando search, por el contrario en apt necesitamos primero ejecutar el comando apt update para actualizar los listados de los repositorios y posteriormente con la base de datos actualizada si realizar la búsqueda con el comando apt search, veamos un ejemplo.
Ahora si lo que queremos es buscar un binario dentro de la paquetería, de igual forma que lo hicimos con dnf, necesitaremos instalar la herramienta apt-file y por su puesto tener la base de paquetes actualizada con apt-file update, seguido del comando apt-file search, veamos un ejemplo.
Con esto tendremos la utilidad instalada.
Ahora, esto es solo una pequeña parte de lo que estas dos herramientas nos permiten hacer, como siempre altamente recomendado consultar las paginas man de las herramientas que se revisaron en esta entrada dnf, apt, apt-file y adicionalmente rpm y dpkg.
Después de una pausa larga en nuestro blog, retomamos las entradas con conceptos básicos que nos pueden ayudar en el día a día, esta vez como asegurarnos que un paquete o programa esta instalado en nuestro sistema.
Lo primero que debemos tener en cuenta es tener claro que un paquete y un programa no son lo mismo.
Un paquete, es un conjunto de binarios, archivos de configuración y scripts, los cuales alimentan la base de datos del gestor de paquetes del sistema y estos mismos se copian al sistema de archivos.
Un programa, es un binario (o un script) que ejecuta instrucciones dentro del sistema, es posible encontrarlo dentro del sistema como un archivo con permisos de ejecución (los veremos al detalle en una entrada posterior).
Una vez teniendo claras las diferencias entre los dos veamos el primer caso:
1. Verificar si un paquete esta instalado dentro del sistema:
Es importante delimitar en este caso que solo nos vamos a referir a rpm y deb, no vamos a tener en cuenta otros gestores.
1.1 Basados en Red Hat
En Red Hat se cuenta con el sistema “rpm” (RPM Package Manager, anteriormente Red Hat Package Manager) , el cual controla la base de datos de los paquetes dentro del sistema, su ejecución se logra con el comando “rpm“.
Para verificar si un paquete existe podemos realizar una combinación de dos comandos rpm y el indispensable grep:
rpm -qa | grep kernel
Como lo podemos ver en la imagen nos muestra el paquete instalado con su versión instalada, en caso de no estar instalado el paquete en el sistema no nos mostraría nada.
los dos opciones que usamos con rpm son:
-q para hacer una consulta, combinado con
-a todos los paquetes instalados
Posteriormente pasamos ese resultado por una tubería a grep en donde especificaremos cual es el paquete que buscamos, en este caso “kernel“, obteniendo así el resultado de la consulta.
1.2 Basados en Debian
En debian contamos con el gestor “dpkg” (acronimo de Debian Package) el cual nos administra la base de datos de paquetes.
Para verificar la existencia de un paquete tendremos que ejecutar lo siguiente:
dpkg -l | grep kernel
Lo cual nos arroja la siguiente:
las dos primeros caracteres “ii” nos quiere decir el estado deseado y el estado real del paquete, sin profundizar en este momento, si el paquete esta instalado correctamente debería de estar “ii“.
En la siguiente columna tenemos el nombre del paquete
El siguiente sería la versión instalada.
La arquitectura para la cual esta generado el paquete.
Y por ultimo una breve descripción del paquete.
Antes de finalizar esta sección y si algún lector a llegado hasta este puntoy este perdiendo la cabeza porque no mencionamos a yum, dnf , apt o aptitude, esos son frontends para los gestores base, los cuales analizaremos por separado ya que merecen una entrada cada uno de ellos.
2. Verificar si un programa esta instalado dentro del sistema:
Cuando hablamos de un programa automaticamente tendremos que pensar en buscar un fichero y para ello vamos a hacer una pequeña introducción a find.
find es una herramenta altamente eficiente a la hora de hacer busquedas de todo tipo dento del sistema instalado.
Al usar find debemos tener en cuenta que buscaremos los nombres u otras caracteristicas del fichero y que se hará un recorrido por el sistema de archivos para verificar su existencia.
Un ejemplo rapido si queremos buscar la existencia del programa llamado “man”.
El parametro “/” quiere decir en que ruta buscaremos el archivo, en este caso estamos buscandolo en todo el sistema.
La opción “name” nos indica que estaremos buscando la palabra “man”
La opción “executable” nos buscara todos los ficheros que tengan permirsos de ejecución, en este caso nos dectanamos por esta opción y no por “perm” que tambien hubiese funcionado.
La opción “type” la cual nos indica que el nombre buscado debe ser de tipo archivo ya que dentro del sistema tambien pueden existir directorios o otro tipo de ficheros.
Otra opción sería utilizar el comando locate el cual no esta instalado en todas las distribuciones, pero basta con realizar un “locate man” para obtener el resultado de la busqueda.
Esto sería todo en esta entrada, no olvidar consultar las paginas man en donde podrán encontrar toda esta información y mucho mas detalle.
Si hay preguntas o comentarios pueden hacerlas en nuestras redes sociales: facebook o linkedin, hasta la próxima.
Las tareas de eliminación siempre me han parecido las mas emocionantes puesto que cuando son controladas te queda la satisfacción del buen uso del sistema, pero cuando son por errores la sensación de la adrenalina es imperdible.
Puesto que en la entrada anterior vimos como agregar un usuario al sistema, hoy vamos a ver como eliminar un usuario, para ello nos apoyaremos en la herramienta userdel.
Su uso es muy sencillo, tan solo tenemos que teclear el comando userdel mas el nombre del usuario que queremos eliminar, veamos un ejemplo básico.
userdel olduser
Como podemos ver no pide confirmación y sin mas elimina el usuario, sin embargo si revisamos el directorio del usuario que acabamos de eliminar podemos ver que sus archivos aun existen.
Para evitar este comportamiento debemos pasar la opción “-r” al comando para que nos elimine el home directory del usuario.
Algo importante para mencionar es que la opción -r NO elimina todos los archivos del usuario en el sistema, solo los que están dentro de su directorio de inicio, para poder borrar todos los archivos asociados al usuario debemos apoyarnos en herramientas de búsqueda de archivos, quizá la mas útil para esta situación es el comando find, el cual veremos en futuras entradas.
Ahora, si por alguna razón no queremos o podemos usar el comando userdel podemos optar por la opción manual que consistiría en eliminar las entradas en los archivos /etc/passwd, /etc/shadow, /etc/group y eliminar los archivos del directorio /home/usuario.
Esto sería todo en esta entrada, no olvidar consultar las paginas man en donde podrán encontrar toda esta información y mucho mas detalle.
Si hay preguntas o comentarios no olvidar hacerlas en nuestras redes sociales: facebook o linkedin, hasta la próxima.
Despues de un tiempo ausentes, regresamos con esta entrada en donde trataremos unas de las tareas mas basicas en las labores de adminsitración de cualquier sistema, el agregar un usuario al sistema; agregar un usuario no es tarea compleja pero como toda buena labor de administración debe ser conciente de los privilegios que se darán y las opciones que tenemos para controlar o personalizar al usuario.
El comando en su mínima expresión es “useradd nuevousuario“, veamos un ejemplo.
useradd akasistemas
Esto lo que hará de fondo es ingresar los siguientes registros en el sistema:
Primero: agrega la entrada en /etc/passwd, en donde se almacena la información del nombre del usuario, UID,GUID, el home directory y la shell que le asignamos.
Vamos a explicar muy brevemente que significa cada campo:
El primer campo es obvio que es el nombre así que no hay mucho que explicar.
el segundo campo en este y otros casos una “x”, es la contraseña encriptada, pero ya la explicaremos mas adelante, ya que esta guarda en otro archivo.
el primero número 1000 es el identificador numérico del usuario, este número es único dentro del sistema.
El segundo número 1000 es el identificador de grupo para el usuario y hacemos mención que al crear un usuario automáticamente se crea un grupo para el usuario, esto lo veremos mas adelante.
En este caso se dejo vacío pero este es el nombre del usuario detallado, en caso que lo hayamos especificado.
El home directory del usuario en donde se depositarán sus archivos personales y de configuración por defecto.
Y por ultimo la shell del sistema, muy importante este ultimo parámetro porque puede llegar la necesidad de crear un usuario dentro del sistema que no necesariamente acceda libre a la shell si no encapsularlo dentro de otro programa o sencillamente impedirle la entrada al sistema.
Segundo: agrega una entrada en el archivo /etc/shadow.
Veamos que significan cada uno de los campos.
Primero el nombre del usuario
Segundo el hash de la contraseña del usuario (el comando en si mismo no crear la contraseña, eso lo veremos en una entrada posterior dedicada al comando passwd).
Tercero la fecha del ultimo cambio de contraseña, esto expresado en unixtime días después desde el 1 de enero de 1970.
El número de días mínimo para que el usuario pueda cambiar la contraseña (0 significa deshabilitado)
El número de días en que la contraseña es valida.
El número de días en que el usuario será notificado antes de expirar la contraseña.
El número de días después de la expiración de la contraseña en que se deshabilitará la cuenta.
El número de días en unixtime que la contraseña será expirada.
Tercero: el archivo /etc/group.
Como podemos observar en este caso solo se tienen tres parámetros:
El nombre del grupo creado automáticamente.
La posibilidad de establecer una contraseña para el grupo, lo normal es que este en blanco.
el GUID del grupo mismo que concuerda con el establecido en el archivo /etc/passwd.
y por ultimo los usuarios miembros del grupo, los cuales pueden ser especificados y separados por comas.
Esto sería todo en esta entrada, no olvidar consultar las paginas man en donde podrán encontrar toda esta información y mucho mas detalle.
Si hay preguntas o comentarios no olvidar hacerlas en nuestras redes sociales: facebook o linkedin, hasta la próxima.
Como ya pudimos ver en una entrada anterior como agregar rutas en tiempo de ejecución al sistema, ahora es tiempo de ver como estas rutas pueden sobrevivir a un reinicio del sistema y veremos como hacer para Debian y derivados de Red Hat.
Primeramente revisaremos como hacer en plataformas RHEL, como bien sabemos las configuraciones de red en estos sistemas se almacenan en el directorio /etc/sysconfig/network-scripts así que nos resta crear un fichero especial llamado route-nombre_interfaz con lo cual el demonio de NetworkManager leerá y cargará estas rutas al sistema (recordemos que en versiones 8 de sistemas RHEL el demonio network esta desactivado por defecto en favor de NetworkManager), la sintaxis para especificar la ruta es muy sencilla, solo debemos de especificar la red destino via ip_enrutadora, veamos un ejemplo.
Ahora aplicaremos un reinicio al sistema y validamos.
Ahora es tiempo de ver como lo haríamos en un sistema Debian.
Recodemos que en este sistema las configuraciones se guardan en un único fichero /etc/network/interfaces, en este caso nos apoyaremos de la sub-instrucción up dentro del archivo de configuración, donde básicamente le estamos indicando que cuando la interfaz se este iniciando, ejecute la instrucción de carga de las rutas.
up ip r add 172.19.0.0/24 via 192.168.122.1
Veamos como quedaría en el archivo:
Reiniciamos la maquina para verificar la configuración:
Y bien de esta forma podemos agregar rutas permanentes a nuestros sistemas.
Y con esto terminamos la entrada de hoy, si tienes dudas al respecto no dudes hacerlas en nuestra página de facebook o linkedin.
Continuando con la sección de manipulación del stack de red iproute2 en GNU/linux, hoy vamos a revisar el como modificar las rutas del sistema en tiempo de ejecución.
Una de las primeras preguntas que nos podríamos hacer es, ¿y bueno, como para que quiero yo modificar rutas en el SO?, ¡Que lo hagan en el router o firewall, eso no me toca a mi! (un clásico por cierto o la aproximación, si alguien mas lo puede hacer que lo haga), aproximación perezosa, vamos a ver como hacer estos cambios que nos pueden sacar de problemas en algún momento.
Lo primero que debemos de tener en cuenta es que existe el concepto de ruta por defecto y ruta estática (aclaramos que esta entrada no es sobre protocolos de ruteo estilo BGP o OSPF), la ruta por defecto es única en el sistema, y las rutas estáticas pueden existir sin limite siempre y cuando no se contradigan entre si, otro aspecto a tener en cuenta es que para poder redirigir un trafico a otra ip esta debe de estar dentro del mismo segmento de red.
Con estos pequeños comentarios veamos como ver las rutas presentes en el sistema:
ip route list
La forma abreviada sería:
ip r
Podemos observar claramente la puerta de enlace por defecto “default via” y una ruta estática que tiene salida por la interfaz tap0, claramente la ip 172.31.100.1 debe ser alcanzable por el sistema.
Ahora vamos a ver como podemos agregar una ruta estatica dentro del sistema, la instrucción se compone del comando base, mas la red que queremos alcanzar, mas el intermediario que nos permitirá ese acceso.
ip r add 172.18.0.0/24 via 172.31.100.1
Primero validamos que no alcancemos el destino.
Ahora agregamos la ruta y validamos la conectividad
Revisemos como quedo nuestra tabla de rutas
Por ultimo para eliminar la ruta agregada lo unico que tenemos que hacer es dar la orden de borrar con la misma sintaxis del comando de agregar
ip r del 172.18.0.0/24 via 172.31.100.1
Y con esto terminamos la entrada de hoy, si tienes dudas al respecto no dudes hacerlas en nuestra página de facebook o linkedin.
Para la mayoría de los iniciados hace años conocemos los comandos clásicos ifconfig (sin obviar el cierto parecido con otro SO conocido 😉 ), route o porque no netstat, pues de cierta forma hace ya unos cuantos años hay noticias al respecto y es que estas herramientas hoy en día se consideran obsoletas (funcionan si, pero se tiende a dejar de usarlas, por acá una rápida lectura), en definitiva tendremos que adoptar los “nuevos comandos” y hoy vamos a ver una opción de solamente uno de estos nuevos comandos, el comando ip.
Lo primero es vamos a revisar como ver nuestra ip actual.
ip add show o ip a (para los amigos)
En el anterior comando podemos ver muchos datos de interés dentro de los que queremos destacar en este punto serían, la interfaz loopback, la interfaz eth0 como primera y única interfaz de red, la cual tiene un MTU de 1500, su estado esta activa y su ip correspondiente.
Pero también podemos escribir la versión corta y obtendremos la misma información.
Ahora vamos a agregar una ip a nuestra interfaz eth0, esto lo hacemos con el siguiente comando.
ip a add 192.168.122.243/24 dev eth0
Hemos agregado la ip a la interfaz de red y tenemos comunicación con la puerta de enlace a nivel LAN, después veremos como agregar rutas o la puerta de enlace por defecto.
Ahora si llegaron hasta este punto se preguntaran y bueno ¿si reiniciamos la maquina que pasa?, bien, pasa que los cambios no se guardan, lo cual veremos en la siguiente entrada.
Y así terminamos la entrada de hoy, si tienes dudas al respecto no dudes hacerlas en nuestra página de facebook o linkedin.
Para culminar con esta sería de entradas relacionadas al primer contacto con la consola de GNU/Linux, presentamos el comando rm, este comando es el que usamos para borrar información, su sintaxis obedece a los anteriores comandos.
Por ejemplo veamos como borraríamos un archivo cualquiera.
rm notas.txt
Ahora si quisiéramos borrar un directorio tendremos que pasar la opción -r esto quiere decir que el borrado será recursivo.
Veamos un ejemplo
rm -r Libros
Y esto sería todo para el comando rm.
Ahora rm realmente lo que hace es borrar la entrada en el indice del sistema de archivos, pero si ejecutamos un software de recuperación de archivos es altamente probable que podamos recuperar la información.
Veamos como podemos hacer un borrado seguro con shred, este comando lo que hace es ir a los sectores físicos del disco y escribir ceros las veces que les indiquemos, esto claramente implica mas trabajo para el disco, pero nos asegura el borrado seguro de la información.
veamos un ejemplo en donde borramos un archivo.
shred -n 3 -v -z -u secreto.gpg
Con esto nos aseguramos que aunque se pase un recuperador de archivos la información no podrá ser restaurada, las opciones que les pasamos son:
-n 3: las veces que queremos sobrescribir con ceros.
-v: que nos de los detalles:
-z: agregar ceros sobre los sectores.
-u: borrar el archivo del indice del sistema de archivos.
Y así terminamos la entrada de hoy, si tienes dudas al respecto no dudes hacerlas en nuestra página de facebook o linkedin.
Después de una breve pausa de una semana, continuamos con los comandos básicos para dominar con seguridad la terminal en GNU/Linux, pues bien hoy como bien lo mencionamos en el titulo de la entrada vamos a ver como realizar copias y movimientos de archivos o bien directorios, no es casualidad que este omitiendo el renombrado, pues empecemos.
El primero comando a conocer en este caso es cp, anteponemos que solo se puede usar en el sistema local (no sirve para copiar archivos remotos), su sintaxis es similar a los comandos anteriores que hemos revisado en esta serie, primeramente le indicaremos el origen y como segundo parámetro el destino, es bueno mencionar que tanto el origen o el destino pueden ser rutas absolutas o relativas o una combinación de ambas. Veamos un ejemplo básico de una copia dentro del mismo directorio.
cp notas.txt apuntes.txt
Como podemos ver el comando no retorna ningún mensaje cuando la copia es exitosa, por el contrario en caso de existir algún error nos lo indicaría antes de entregarnos el control de la terminal.
Bien, veamos como sería una copia combinando rutas relativas y absolutas.
Podemos observar un punto interesante y es que el archivo final no fue necesario especificar el nombre, podemos indicar nada mas el directorio objetivo y se copiara el archivo con el mismo nombre del origen.
Ahora respecto a la copia de directorios debemos mencionar que se debe utilizar la opción -r, veamos como sería.
cp -r Libros Revistas
Vemos que el comando nos creo un nuevo directorio con el nombre que le indicamos pero adicionalmente copio todo el contenido.
cp funciona para lo que esta hecho que es para copiar ¿y para mover?, para ese propósito tenemos a mv, su sintaxis es igual que la de cp, vemos como sería mover un directorio, esto también es valido para los archivos.
mv Revistas Documentos/
Ahora vemos como usar un comodín para mover solo los archivos de texto a nuestro nuevo directorio.
Con esto nos hacemos una idea de las capacidades de los comandos cp y mv. ¿Y el comando para renombrar? si nos detenemos a pensar un momento ya lo hemos hecho con el comando mv ya que el renombrado de un archivo o directorio no es mas que un movimiento dentro del sistema, sin embargo algunas distribuciones incluyen un comando auxiliar llamado rename, mismo que puede cumplir ese propósito.
Y así terminamos la entrada de hoy, si tienes dudas al respecto no dudes hacerlas en nuestra página de facebook o linkedin.