el protocolo SOCKSv5 permite atravesar de forma segura y transparente firewalls que aíslan una red. Esta implementación cuenta con las siguientes características:
- Atiende a múltiples clientes en forma concurrente.
- Los clientes pueden autenticarse utilizando un usuario y una contraseña como lo indica el RFC 1929.
- Soporta conexiones a direcciones IPv4, IPv6 o FQDN.
- Resuelve los FQDN mediante consulta DoH (DNS over HTTP)
- Cuenta con un protocolo de configuracion para monitorear la operación del sistema y cambiar la configuración del servidor en tiempo de ejecución.
- Mantiene un registro de acceso que permite dar a conocer quien se conectó, a qué sitio y cuándo.
- Monitorea el tráfico y genera un registro de credenciales de acceso para los protocolos HTTP y POP3.
Requerimientos previos:
Compilación del proyecto e inicio del proxy
$ git clone https://github.com/ncomerci/pc-2020b-8.git
$ cd pc-2020b-8
$ make all
$ ./socks5d
Para ver todos los comandos soportados por el proxy, ejecute el siguiente comando:
$ ./socks5d -h
Por defecto, el proxy escucha en el puerto 1080 en la dirección 0.0.0.0 para IPv4 y en :: para IPv6. Por otro lado, para conexiones destinadas a configuración del proxy escucha en el puerto 8080 en 127.0.0.1.
Para comenzar a utilizarlo se debe configurar el programa que se desea utilizar para que deriven los pedidos de conexión al proxy. A continuación se listan algunos ejemplos de para curl, wget, ncat y firefox con los valores de configuración por defecto:
curl -x socks5://localhost:1080 www.google.com
o en caso de querer que el proxy resuelva la dirección solicitada, ejecutar:
curl -x socks5h://localhost:1080 www.google.com
https_proxy=localhost:1080 wget https://apache.zero.com.ar/jmeter/binaries/apache-jmeter-5.3.zip
ncat -C --proxy-type socks5 --proxy localhost:1080 www.google.com 80
En firefox:
Preferences > Network Settings
Para compilar el cliente de configuración del proxy, ejecute el siguiente comando:
$ make clnt
Para ver todos los comandos soportados por el cliente, ejecute el siguiente comando:
$ ./client/client -h
Para acceder a la configuración y a las métricas del proxy en tiempo de ejecución, ejecute el cliente e ingrese las credenciales del usuario administrador, que por defecto son admin:admin (asegurarse que el proxy esté corriendo en otra terminal).
Una vez dentro, se ve el siguiente menú interactivo:
01. (GET) transefered bytes
02. (GET) historical connections
03. (GET) concurrent connections
04. (GET) users list
05. (SET) add new users
06. (SET) remove user
07. (SET) change password to an user
08. (SET) enable/disable password sniffer
09. (SET) DOH IP
10. (SET) DOH port
11. (SET) DOH host
12. (SET) DOH path
13. (SET) DOH query
14. QUIT
Choose an option:
Las acciones que realizan cada opción son:
- Obtiene el total de bytes transferidos desde el inicio de la ejecución del proxy (se computan cada vez que el proxy realiza la syscall send).
- Obtiene el total de conexiones que hubo desde el inicio de la ejecución del proxy.
- Obtiene el total de conexiones activas en el proxy en ese momento.
- Obtiene una lista de usuarios registrados en el proxy (Máxima capacidad: 10 usuarios).
- Agrega un nuevo usuario indicando
username
ypassword
. - Elimina un usuario indicando el
username
. - Cambia la contraseña de un usuario.
- Habilita o deshabilita el sniffer de contraseñas HTTP y POP3.
- Permite cambiar la dirección IP del servidor DoH (por defecto 127.0.0.1).
- Permite cambiar el puerto del servidor DoH (por defecto 8053).
- Permite cambiar el host del servidor DoH (por defecto localhost).
- Permite cambiar el path del servidor DoH (por defecto /getnsrecord).
- Permite cambiar la query del servidor DoH (por defecto ?dns=).
- Envía el comando de cierre de conexión al proxy y termina la ejecución.
$ ./test/auth_test.out
$ make clean