Configure global proxy on linux
En sistemas operativos GNU/Linux cuando nos encontramos detr谩s de un servidor proxy, puede volverse un poco engorroso utilizar programas que no tengan configuraci贸n propia para proxy o comandos como apt-get, o simplemente lo queremos configurar de forma global. Muchos de las distribuciones GNU/Linux usan diferentes manejadores de paquetes los cuales se configuran de formas distintas, adem谩s existen muchos programas que necesitan sus especificaciones para configurar la salida a Internet a trav茅s de un servidor proxy. Todo este proceso se vuelve muy engorroso de hacer en ambientes donde uses un proxy con autenticaci贸n y est谩 cambien cada cierto tiempo o que uses una laptop donde constantemente puedes conectarte a redes donde no se use proxy. Imaginen cambiar toda la configuraci贸n cada vez que cambies de red.
A continuaci贸n les dejo algunos ejemplos de como configurar proxy en algunas distros GNU/Linux
Configurar proxy en la terminal de forma temporal
Si queremos usar un proxy de manera puntual, podemos realizar el siguiente paso:
export http_proxy=http://username:password@proxyserver:puerto
export https_proxy=$http_proxy
Configuraci贸n de variables de entorno para distribuciones de la familia Debian|Ubuntu:
Editar el fichero /etc/environment
con tu editor de texto preferido.
sudo vim /etc/environment
Agregamos las siguientes l铆neas al archivo, debes duplicarlas en may煤scula y min煤scula porque(desafortunadamente) algunos programas solo buscan una o la otra:
http_proxy http://username:password@proxyserver:puerto
https_proxy http://username:password@proxyserver:puerto
ftp_proxy http://username:password@proxyserver:puerto
no_proxy localhost,127.0.0.1,localaddress,.localdomain.com
#Duplicadas en may煤sculas
HTTP_PROXY http://username:password@proxyserver:puerto
HTTPS_PROXY http://username:password@proxyserver:puerto
FTP_PROXY http://username:password@proxyserver:puerto
NO_PROXY localhost,127.0.0.1,localaddress,.localdomain.com
Configuraci贸n de variables de entorno para distribuciones de la familia RedHat|Fedora|Centos:
sudo vim /etc/profile.d/proxy.sh
Modificamos los par谩metros necesarios
export http_proxy="http://username:password@proxyserver:puerto/"
export https_proxy="http://username:password@proxyserver:puerto/"
export ftp_proxy="http://username:password@proxyserver:puerto/"
Configuraci贸n de proxy para apt-get, apt, aptitude:
Creamos o editamos archivo /etc/apt/apt.conf
sudo vim /etc/apt/apt.conf
Agregamos las siguientes l铆neas:
Acquire::http::Proxy "http://username:password@proxyserver:puerto";
Acquire::https::Proxy "http://username:password@proxyserver:puerto";
Acquire::ftp::Proxy "http://username:password@proxyserver:puerto";
#En caso de tener un repo local para el que no necesitemos proxy
Acquire::http::Proxy {
repositorio.localdomain.com DIRECT;
repositorio2.localdomain.com DIRECT;
};
Configuraci贸n de proxy para yum:
Editamos el archivo /etc/yum.conf
# Indicamos direcci贸n m谩s puerto del proxy
proxy=http://proxyserver:puerto
# Si el proxy funciona con usuario y contrase帽a
proxy_username=usuario
proxy_password=contrase帽a
Configuraci贸n de proxy para pacman:
Editamos el fichero /etc/pacman.conf y debemos descomentar XferCommand
de la siguiente manera:
XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
Guardamos los cambios y procedemos a editar el fichero de configuraci贸n para wget
, herramienta utilizada para la
descarga de paquetes.
sudo vim /etc/wgetrc
Editamos el archivo de configuraci贸n /etc/wgetrc
buscamos las siguientes l铆neas y las descomentamos o agregamos al final del archivo.
https_proxy = http://username:password@proxyserver:puerto
http_proxy = http://username:password@proxyserver:puerto
ftp_proxy = http://username:password@proxyserver:puerto
use_proxy = on
Configuraci贸n de proxy para nodejs(npm)
npm config set proxy http://username:password@proxyserver:puerto
npm config set https-proxy http://username:password@proxyserver:puerto
Configurar proxy para git
git config --global http.proxy http//proxyserver:puerto
git config --global https.proxy https//proxyserver:puerto
##En caso de tener conexi贸n directa y necesitemos quitarle la configuraci贸n de proxy a git
git config --global --unset http.proxy
git config --global --unset https.proxy
Como se puede apreciar es muy complejo mantener constantemente la configuraci贸n de un proxy en tu pc, pero por suerte existen otras opciones que te permiten configurar un proxy de forma global a todo el sistema operativo. En sistemas como Windows o MacOS existen herramientas como Proxifier, ProxyCap entre otras que facilitan la salida a internet a trav茅s de un proxy por otra parte sistemas operativos GNU/Linux tenemos alternativas a estos programas como las que listo a continuaci贸n.
Redsock
Redsock es una herramienta que permite redirigir cualquier conexi贸n TCP a SOCKS o proxy HTTPS usando su firewall, por lo que la redirecci贸n puede ser en todo el sistema o en toda la red. Esta herramienta es muy 煤til porque nos permite con un solo archivo de configuraci贸n poder usar la conexi贸n a trav茅s del proxy en todo el sistema operativo.
Paquetes para las distintas distribuciones linux
- Archlinux/Manjaro: https://aur.archlinux.org/packages/redsocks-git
- Debian: http://packages.debian.org/search?searchon=names&keywords=redsocks
- Gentoo (zugaina overlay):http://gpo.zugaina.org/net-proxy/redsocks
- Gentoo: https://packages.gentoo.org/packages/net-proxy/redsocks
- Ubuntu: http://packages.ubuntu.com/search?searchon=names&keywords=redsocks
Compilaci贸n manual de redsock
Para compilar redsock necesitamos clonar su repositorio en GitHub https://github.com/darkk/redsocks y seguir las instrucciones
en el README.md. Es necesario que en nuestro sistema est茅 instalado libevent-2.0.x, al igual que los
compiladores gcc
y clang
. La compilaci贸n es tan f谩cil como ejecutar make
en el directorio ra铆z del proyecto.
Ejecutar redsock
Ejecutar redsock depende mucho de la distribuci贸n que est茅s usando y de la forma en la que el paquete instal贸 redsock. El programa tiene las siguientes opciones de l铆nea de comando:
- -c especifica el camino al archivo de configuraci贸n (
./redsocks.conf
es el usado por defecto) - -t esta opci贸n verifica la sintaxis del archivo de configuraci贸n
- -p establece un archivo para escribir el
getpid()
donde se especifican las siguientes se帽ales:SIGUSR1
vuelca la lista de clientes conectados al registro,SIGTERM
ySIGINT
terminan el demonio, se cierran todas las conexiones activas.
Puedes ver un ejemplo del archivo de configuraci贸n en redsocks.conf.example.
Ejemplo de iptables
Tienes que construir iptables con seguimiento de conexi贸n y objetivo REDIRECT
.
# Create new chain
root# iptables -t nat -N REDSOCKS
# Ignore LANs and some other reserved addresses.
# See http://en.wikipedia.org/wiki/Reserved_IP_addresses#Reserved_IPv4_addresses
# and http://tools.ietf.org/html/rfc5735 for full list of reserved networks.
root# iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
root# iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
root# iptables -t nat -A REDSOCKS -d 100.64.0.0/10 -j RETURN
root# iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
root# iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
root# iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
root# iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
root# iptables -t nat -A REDSOCKS -d 198.18.0.0/15 -j RETURN
root# iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
root# iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
# Anything else should be redirected to port 12345
root# iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
# Any tcp connection made by `luser' should be redirected.
root# iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner luser -j REDSOCKS
# You can also control that in more precise way using `gid-owner` from
# iptables.
root# groupadd socksified
root# usermod --append --groups socksified luser
root# iptables -t nat -A OUTPUT -p tcp -m owner --gid-owner socksified -j REDSOCKS
# Now you can launch your specific application with GID `socksified` and it
# will be... socksified. See following commands (numbers may vary).
# Note: you may have to relogin to apply `usermod` changes.
luser$ id
uid=1000(luser) gid=1000(luser) groups=1000(luser),1001(socksified)
luser$ sg socksified -c id
uid=1000(luser) gid=1001(socksified) groups=1000(luser),1001(socksified)
luser$ sg socksified -c "firefox"
# If you want to configure socksifying router, you should look at
# doc/iptables-packet-flow.png, doc/iptables-packet-flow-ng.png and
# https://en.wikipedia.org/wiki/File:Netfilter-packet-flow.svg
# Note, you should have proper `local_ip' value to get external packets with
# redsocks, default 127.0.0.1 will not go. See iptables(8) manpage regarding
# REDIRECT target for details.
# Depending on your network configuration iptables conf. may be as easy as:
root# iptables -t nat -A PREROUTING --in-interface eth_int -p tcp -j REDSOCKS
Redsock es una de mis herramientas favoritas para configurar todo mi tr谩fico a internet a trav茅s de un proxy usando el protocolo TCP. A continuaci贸n les muestro otra alternativa m谩s reciente que resulta muy interesante y de f谩cil configuraci贸n.
Proxifier-For-Linux
Proxifier-For-Linux es una herramienta que act煤a como un intermediario entre el servidor proxy y los programas clientes que necesiten acceso a internet. Proxifier trabaja a trav茅s de los servidores proxy en nombre de los otros programas. Proxifier act煤a como un punto global para configurar las reglas de proxy, que se aplicar谩n a todos los programas del sistema. Como mencion茅 anteriormente es un proyecto nuevo por lo que actualmente solo tiene soporte para proxies http.
Como se explica en el repositorio oficial de Proxifier-for-linux nuestro sistema operativo debe contar con las siguientes dependencias
Dependencias
A continuaci贸n se muestra la lista de dependencias requeridas para compilar y ejecutar Proxifier, asi como la posible instalaci贸n en dependencia del sistema operativo que uses.
Instalar las dependencias
Para comprobar si tienes ya las dependencias instaladas puedes usar el comando which <nombre del paquete>
. Ejemplo which autoconf
y si te devuelve la ruta es que ya esa dependencia est谩 instalada
- autoconf [$ sudo apt install autoconf]
- automake [$ sudo apt install automake]
- libtool [$ sudo apt install libtool]
- txt2man [$ sudo apt install txt2man]
Descargar Proxifier
Obt茅n la 煤ltima versi贸n estable de Proxifier clonando el repositorio de GitHub.
$ git clone https://github.com/m0hithreddy/Proxifier-For-Linux.git && cd Proxifier-For-Linux
Construir e Instalar
Despu茅s de instalar todas las dependencias, obt茅n el c贸digo fuente de Proxifier y dentro del directorio donde est谩 el c贸digo ejecuta los siguientes comandos:
$ autoreconf -vfi
$ ./configure
$ make all
$ sudo make uninstall
$ sudo make install
Como usar Proxifier
El servicio de Proxifier se puede habilitar ejecutando el comando:
$ sudo systemctl daemon-reload # Reload the service units
$ sudo systemctl start proxifier
Para m谩s informaci贸n de Proxifier puedes consultar la ayuda ejecutando el comando $ man proxifier
. El archivo de configuraci贸n
se puede encontrar en la ruta /usr/local/etc/proxifier.conf
donde puedes especificar la configuraci贸n de tu proxy.
La siguiente herramienta que te quiero mostrar es Proxychains
Proxychains
Proxychains-ng es un servidor proxy que soporta los protocolos de internet HTTPs, SOCKS4 y SOCKS5 y funciona en plataformas basadas en Unix. Permite que cualquier conexi贸n TCP hecha por un programa siga una serie de proxies(de los protocolos antes mencionados) hasta su destino. La lista de proxies as铆 como la estrategia de selecci贸n de los proxies se definen con anterioridad.
Instalar proxychains
Proxychains est谩 disponible con pkgsrc para todos los que
lo usen en Linux, NetBSD, FreeBSD, OpenBSD, DragonFlyBSD o Mac OS X. Solo necesita instalar pkgsrc-wip
y ejecutar make install
en un el directorio wip/proxychains
Instalar proxychains desde el c贸digo fuente
Clonar el c贸digo fuente de GitHub y ejecutar los siguientes comando:
git clone https://github.com/haad/proxychains.git && cd proxychains
# se necesita un compilador de C, preferiblemente gcc
./configure
make
sudo make install
Paquetes para las distintas distribuciones linux
- Archlinux/Manjaro: https://www.archlinux.org/packages/community/x86_64/proxychains-ng/
- Debian: https://packages.debian.org/search?keywords=proxychains
- Gentoo: https://packages.gentoo.org/packages/net-proxy/proxychains
- Fedora: https://fedora.pkgs.org/32/fedora-x86_64/proxychains-ng-4.13-5.fc32.x86_64.rpm.html
- Ubuntu: http://packages.ubuntu.com/search?searchon=names&keywords=proxychains
Configuraci贸n
Proxychains busca la configuraci贸n en el siguiente orden:
Puerto proxy SOCKS5 en la variable de entorno $ {PROXYCHAINS_SOCKS5} (si se establece, no se buscar谩n m谩s configuraciones)
Archivo listado en la variable de entorno $ {PROXYCHAINS_CONF_FILE} o proporcionado como un argumento -f para el script o binario de proxychains.
./proxychains.conf
$(HOME)/.proxychains/proxychains.conf
/etc/proxychains.conf
Ver m谩s de la configuraci贸n en el archivo /etc/proxychains.conf
Ejemplo de como configurar varios proxies
Al final del fichero /etc/proxychains.conf
se encuentra la lista donde podemos agregar nuestros proxies. Las estrategias de
selecci贸n de proxies var铆an entre dynamic_chain, strict_chain, round_robin_chain, random_chain
y solo uno puede estar
descomentado.
dynamic_chain: Din谩mico: cada conexi贸n se realizar谩 a trav茅s de proxies encadenados, todos los proxies encadenados en el orden en que aparecen en la lista, al menos un proxy debe estar en l铆nea para jugar en cadena (se omiten los proxies muertos) de lo contrario, EINTR se devuelve a la aplicaci贸n
strict_chain: Estricto: cada conexi贸n se realizar谩 a trav茅s de proxies encadenados, todos los proxies encadenados en el orden en que aparecen en la lista, todos los proxies deben estar en l铆nea para jugar en cadena; de lo contrario, EINTR se devuelve a la aplicaci贸n
round_robin_chain: Round Robin: cada conexi贸n se realizar谩 a trav茅s de proxies encadenados de longitud
chain_len
, todos los proxies encadenados en el orden en que aparecen en la lista, al menos un proxy debe estar en l铆nea para jugar en cadena (se omiten los proxies muertos). el inicio de la cadena de proxy actual es el proxy despu茅s del 煤ltimo proxy en la cadena de proxy invocada anteriormente. Si se alcanza el final de la cadena de proxy mientras se buscan proxies, comience de nuevo desde el principio. De lo contrario, EINTR se devuelve a la aplicaci贸n. Esta sem谩ntica no est谩 garantizada en un entorno multiproceso.random_chain: Aleatorio: cada conexi贸n se realizar谩 mediante un proxy aleatorio (o una cadena de proxy, consulte
chain_len
) de la lista.[ProxyList]
add proxy here …
meanwile
defaults set to “tor”
socks4 127.0.0.1 9050 #psiphon proxy http 127.0.0.1 52525 socks5 127.0.0.1 42552 #Otro Proxy http 192.168.1.11 8080 user password #Mobile proxy http 192.168.44.244 3128 user password
Ejemplos de uso
Ejecutar proxychains <programa a ejecutar a trav茅s de un proxy>
$ proxychains telnet targethost.com
En este ejemplo se ejecuta el programa telnet a trav茅s de un proxy ( o una cadena de proxies ) especificada por proxychains.con in this example it will run telnet through proxy(or chained proxies) specified by proxychains.conf
Proxychains nos da una gran ventaja al poder encadenar muchos proxies a la vez lo que se usa mucho en ciberseguridad para ocultar la identidad de las peticiones realizadas. Una de las desventajas que tiene proxychains es que se ejecuta en la consola lo cual resulta inc贸modo cuando usamos programas con interfaz gr谩fica.
El siguiente en la lista es uno de mis favoritos pues es una VPN que permite configurar un proxy global para todo el sistema operativo as铆 como montar un firewall en la pc.
Windscribe
Windscribe es un conjunto de herramientas que permiten bloquear los seguidores de anuncios y los beacons web, restaurar el acceso a contenido bloqueado y ayudarle a proteger su privacidad en l铆nea. Hay dos componentes: la aplicaci贸n de escritorio VPN (Windows, MacOS y Linux) y la extensi贸n del navegador (Chrome, Edge, Firefox, Safari, …)
La aplicaci贸n de escritorio es un cliente VPN (Virtual Private Network). Crea un t煤nel encriptado desde tu computadora a los servidores de winscribe, y toda tu actividad se env铆a a trav茅s del t煤nel. Esto tiene dos ventajas:
- La direcci贸n IP de su proveedor de servicios de Internet (ISP) est谩 enmascarada, por lo que cualquier sitio web que visite o cualquier aplicaci贸n que utilice (Skype, proveedores de correo electr贸nico, BitTorrent, etc.) ver谩 nuestra direcci贸n IP compartida por miles de personas.
- Su proveedor de servicios de Internet no puede ver lo que hace en l铆nea. Esto es mucho m谩s importante de lo que piensas.
Lo primero que se tiene que hacer es crear una cuenta en Windscribe registr谩ndose aqu铆. Windscribe nos da 2GB de consumo mensual gratis, pero si confirmamos nuestro correo electr贸nico este aumenta 5GB, adem谩s puedes aumentar hasta 15GB mensuales si creas un post en twitter dando en el bot贸n Tweet4Data en la configuraci贸n de tu cuenta.
Instalar Windscribe
Despu茅s de registrarse se descarga el cliente de escritorio o la extensi贸n para su navegador favorito en la sesi贸n de Descargas. Seguir las instrucciones del enlace de descarga en dependencia del sistema operativo que uses.
Configuraci贸n del cliente de Windscribe para Linux
Lo primero que tenemos que hacer es arrancar el servicio de windscribe para ello ejecutamos el comando:
sudo systemctl start windscribe
Una vez este corriendo el servicio de windscribe debemos configurar el proxy ejecutando el comando
windscribe proxy --host <direccion del proxy> --port <puerto> --user <usuario> --password <contrase帽a>
:
windscribe proxy --host 19.18.4.54 --port 3128 --user acosta --password "super password"
windscribe proxy on
Con los comandos anteriores configuramos y activamos windscribe para que use nuestro proxy. Ahora cuando para conectar toda las aplicaciones salgan a internet a trav茅s de Windscribe ejecutamos el comando:
windscribe connect best # Nos conecta al servidor de windscribe con mejor rendimiento
Para consultar la ayuda de windscribe podemos ejecutar el comando windscribe --help
Estas son algunas de las opciones que existen para configurar la salida a internet a trav茅s de un proxy en sistemas operativos GNU-Linux. De todas las variantes mostradas en este art铆culo mi favorita sin dudas es windscribe por todas las facilidades que ofrece. Espero que les sirva de ayuda en caso que quieran tener configurado de forma global un proxy en linux.