Categories
Linux sysadmin

Configurar servidor proxy en Ubuntu Linux

En esta ocasión instalaremos squid para permitir que servidores dentro de una red interna tengan comunicación a internet. Squid permite una gran cantidad de opciones y configuraciones según las politicas y necesidad de nuestra organización. En este tutorial lo configuraremos en su modo mas sencillo

Instalar squid

Squid se encuentra disponible en la lista de paquetes de Ubuntu, por lo que se puede instalar con apt

sudo apt-get update && sudo apt-get install -y squid

Configuración básica

Una vez instalado squid editaremos su archivo de configuración para permitir que los equipos en la red interna puedan utilizarlo.

Primero crearemos una copia de seguridad de este archivo para restablecer la configuración inicial por si cometemos algún error con nuestra configuración

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original
sudo chmod a-w /etc/squid/squid.conf.original

Dirección IP y puerto de proxy

Por defecto squid funciona en el puerto 3128, si deseamos utilizar un puerto diferente tenemos que buscar en el archivo de configuración la entrada http_port y modificar el valor original por el puerto deseado. En el siguiente ejemplo utilizaremos el puerto 9998

http_port 9998

Si el servidor que funcionará como proxy cuenta con diferentes direcciones IP y se desea que el proxy funcione solo en una en lugar de todas, tenemos que agregar la dirección a la configuración del puerto como se muestra de la siguiente manera donde la dirección 192.168.1.120 escuchará las peticiones de los equipos internos:

http_port IP:PUERTO
http_port 192.168.1.120:9998

Control de acceso

Por defecto squid esta configurado para que solo localhost pueda utilizar el proxy, por lo que tenemos que indicarle el rango de direcciones IP que tienen autorización para utilizar este servicio

En el archivo de configuración agregaremos este rango al final de la configuración inicial.

El archivo luce similar a como se muestra a continuación:

acl localnet src 100.64.0.0/10		# RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16 	# RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12		# RFC 1918 local private network (LAN)

Al final de estos valores debemos indicar las direcciones de los equipos que utilizaran squid, a continuación se muestra como agregar a los equipos en el segmento 192.168.1.0/24 los cuales agruparemos con el nombre de red_interna

acl localnet src 100.64.0.0/10		# RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16 	# RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12		# RFC 1918 local private network (LAN)
acl red_interna src 192.168.1.0/24

Ahora configuraremos que los equipos definidos en red_interna puedan utilizar el proxy agregando en la parte superior del control de acceso lo siguiente:

http_access allow red_interna

Después de esto el archivo de configuración debe lucir de la siguiente manera:

http_access allow red_interna
# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

Con esto procederemos a guardar los cambios en el archivo de configuración y a reiniciar el servicio squid para ver los cambios reflejados

sudo systemctl restart squid.service

Validación

Para validar que squid esta funcionando de forma correcto podemos utilizar curl para lanzar una petición consumiendo un servicio externo de la siguiente forma

curl -v -x http://IP_PROXY:PUERTO_PROXY URL_A_CONSUMIR

En el siguiente ejemplo consultaremos la pagina principal del blog (https://nestortechtips.com) utilizando el proxy recién configurado

curl -v -x http://192.168.1.120:9998 https://nestortechtips.com

*   Trying 192.168.1.120:9998...
* TCP_NODELAY set
* Connected to 192.168.1.120 (192.168.1.120) port 9998 (#0)
* allocate connect buffer!
* Establish HTTP proxy tunnel to nestortechtips.com:443
> CONNECT nestortechtips.online:443 HTTP/1.1
> Host: nestortechtips.online:443
> User-Agent: curl/7.68.0
> Proxy-Connection: Keep-Alive
> 
< HTTP/1.1 200 Connection established
Categories
Automatizacion Linux sysadmin

Crear y configurar llaves SSH en Ubuntu 20.04 Linux

En esta ocasión demostraremos cómo crear llaves rsa y ecdsa para poder autenticarse a un equipo remoto

Procedimiento

Instalar dependencias (ssh-keygen, ssh-copy-id)

Para crear las llaves se utilizará ssh-keygen y para instalar la llave creada en el equipo remoto se utilizará ssh-copy-id. Ambos paquetes pueden instalarse con el siguiente comando

sudo apt-get update && sudo apt-get install -y ssh-keygen ssh-copy-id

Generar llaves

Para generar la llave es necesario especificar por lo menos 2 argumentos

  • Algoritmo a utilizar
  • Longitud de la llave, este argumento depende de la opción de algoritmo seleccionada ya que para algunos de ellos se cuenta con una longitud máxima

El algoritmo se especifica con la opción -t y la longitud con la opción -b. Una llave utilizando el algoritmo RSA y una longitud de 4096 bits luce de la siguiente forma

ssh-keygen -t rsa -b 4096

El comando anterior solicitará el nombre del archivo en donde se almacenarán las llaves, si se desea especificar el nombre basta con agregar el argumento -f. El siguiente comando creará una llave usando el algoritmo ecdsa y una llave de 521 bits en el archivo y ruta /home/usuario/millave

ssh-keygen -t ecdsa -b 521 -f /home/usuario/millave

Si la creación de las llaves es exitosa deben de haberse creado 2 archivos en la ruta especificada. Uno con el nombre de la llave sin ninguna terminación de archivo (.doc, .java. crt, etc) y otro con terminación .pub el cual es la llave pública. El archivo sin terminación debe mantenerse en un lugar bien protegido

Copiar llaves a equipo remoto

Para poder utilizar las llaves ssh generadas es necesario que el equipo remoto cuente con la llave pública. Copiaremos la llave recién creada millave con el comando ssh-copy-id

ssh-copy-id -i /home/usuario/millave usuario@equipo-remoto

El comando anterior agrega la llave publica al archivo authorized_keys en el equipo remoto.

Es posible validar que la llave fue instalada de forma correcta conectándonos al equipo especificando la llave privada (la que no tiene terminación)

ssh -i /home/usuario/millave usuario@equipo-remoto

Categories
Linux

Comandos básicos de Linux

El sistema de archivos controla cómo se almacenan y recuperan los datos en una computadora. Todos los archivos y carpetas en un sistema Linux son parte de una estructura de árbol más grande con raíz en /. Los archivos y carpetas se agregan al sistema de archivos agregándolos a esta estructura de árbol y se remueven eliminándolos. Todos los nombres de archivo distinguen entre mayúsculas y minúsculas. Al trabajar con archivos y directorios en la línea de comandos, los caracteres especiales, como espacios y corchetes, deben escaparse usando una barra invertida \.

ls

Puedes verificar el contenido del directorio actual usando el comando ls.

ls

Puedes ver más detalles sobre los archivos, como propiedadades y permisos, agregando la bandera -l al comando ls.

ls -l

Puedes ver los archivos ocultos en el directorio actual pasando la bandera -a al comando ls.

ls -a

pwd

Puedes averiguar dónde te encuentras en relación con el resto del sistema de archivos utilizando el comando pwd.

pwd

cd

Puedes navegar a diferentes directorios usando el comando cd.

cd /ruta/a/otra/carpeta

cat

Puedes verificar el contenido de un archivo usando el comando cat.

cat /ruta/al/archivo/nombre_del_archivo

less

Para archivos de entrada grandes, el comando less permite el movimiento dentro de los archivos. La sintaxis es similar a la del comando cat, pero puede moverse.

Leyendo archivos grandes usando less

less /ruta/al/archivo/nombre_del_archivo

El comando te proporcionará una vista desplazable del contenido dentro del archivo, hasta el final del contenido del archivo. Puedes desplazarte hacia abajo usando Enter y salir de la vista presionando q.

Crear carpetas/directorios (mkdir)

Los directorios/carpetas en Linux se crean usando el comando mkdir. El comando toma el nombre del directorio como argumento.

mkdir nombre_carpeta

Se pueden proporcionar varios directorios como argumentos y mkdir los creará todos.

mkdir dir1 dir2 dir3 

Parámetros

mkdir puede aceptar 3 opciones

  • p – permite a mkdir crear directorios padre en caso de no existir
  • m – se utiliza para asignar permisos durante la creación del directorio
  • v – ejecuta el comando en modo verbose

Eliminar carpetas/directorios vacios (rmdir)

Para eliminar directorios vacíos, se utiliza el comando rmdir. El nombre del directorio que se eliminará se pasa como argumento.

rmdir nombre_dir

Se pueden pasar varios nombres de directorios como argumentos y rmdir los eliminará todos.

rmdir dir1 dir2 dir3

Parámetros

rmdir toma solo una opción, que le dice que elimine los directorios padre si también están vacíos.

  • p – elimina los directorios padre si también se encuentran vacios

Crear archivos (touch)

De forma predeterminada, el comando touch se utiliza para cambiar los tiempos de modificación y acceso de un archivo. Si el archivo no existe, el comando touchse usa para crear un archivo con permisos predeterminados.

touch nombre_archivo

Parámetros

  • c – previene la creación de un nuevo archivo si no existe

Copiar y mover archivos y carpetas/directorios (cp, mv)

cp

El comando cp se usa para hacer una copia de uno o más directorios o archivos. El comando toma al menos un nombre de origen y un nombre de destino. Si el destino es un archivo, la fuente también debe ser un archivo. Se hará una copia de la fuente con el nuevo nombre proporcionado en el destino. Si no se especifica el nombre de destino, se realizará una copia de la fuente en el directorio de destino con el mismo nombre. Si ya existe un archivo con el nombre de destino en el directorio de destino, será reemplazado. Si el destino es un directorio existente, todas las fuentes (una o más) se copiarán en el directorio de destino. Si el destino es un directorio que no existe, entonces la fuente también debe ser un directorio. Se realizará una copia del directorio y su contenido en el destino con el mismo nombre.

cp /ruta/archivo/fuente /ruta/archivo/destino
cp /ruta/directorio/origen /ruta/directorio/destino

mv

El comando mv se usa para mover uno o más archivos o directorios a una ubicación diferente, o cambiarles el nombre por un nuevo nombre. Se debe pasar al menos un directorio o nombre de archivo de origen y destino. El comando mv sigue las reglas para directorios o archivos existentes o no existentes, al igual que cp.

mv /ruta/archivo/origen/nombre_archivo /ruta/archivo/destino/nombre_archivo

El directorio original no contiene el archivo ahora. Se ha movido al nuevo directorio destino.

rm

El comando rm se usa para eliminar uno o más archivos. Debe proporcionar al menos un argumento para eliminar.

rm /ruta/archivo/nombre_archivo

Buscar dentro de archivos (grep)

grep es un comando de Linux súper poderoso que se utiliza para buscar en archivos la aparición de una cadena de caracteres que coincida con un patrón específico. Podemos usar el comando en combinación con un montón de opciones y banderas diferentes para una búsqueda eficiente.

Parámetros

  • r – busca de manera recursiva
  • w – indica que el patrón/palabara entero debe de coincidir
  • n – solo el número de línea
  • e – indica que coincida el patrón
  • –include y –exclude – incluyo o excluye archivos en la búsqueda
  • –include-dir e –include-dir – incluye o exluye directorios en la búsqueda