Els conceptes bàsics del proxy transparent amb 3proxy i iptables / netfilter o com "posar-ho tot a través d'un proxy"

En aquest article, m'agradaria revelar les possibilitats del proxy transparent, que us permet passar completament desapercebut pels clients per redirigir tot o part del trànsit a través de servidors proxy externs.

Quan vaig començar a resoldre aquest problema, em vaig trobar amb el fet que la seva implementació té un problema important: el protocol HTTPS. En els bons vells temps, no hi havia problemes particulars amb el proxy HTTP transparent, però amb el proxy HTTPS, els navegadors informen d'interferències de protocol i aquí és on acaba la felicitat.

En instruccions habituals per al servidor intermediari Squid, fins i tot ofereixen generar el seu propi certificat i instal·lar-lo als clients, cosa que és una ximpleria, almenys irracional, i sembla un atac MITM. Sé que Squid ja sap fer alguna cosa semblant, però aquest article tracta sobre un mètode de treball provat que utilitza 3proxy del respectat 3APA3A.

A continuació, veurem detalladament el procés de creació de 3proxy des de la font, la seva configuració, el proxy complet i selectiu mitjançant NAT, la distribució del canal a diversos servidors proxy externs, així com l'ús d'un encaminador i rutes estàtiques. Utilitzem Debian 9 x64 com a sistema operatiu. Comença!

Instal·lant 3proxy i executant un proxy normal

1. Instal·leu ifconfig (des del paquet net-tools)
apt-get install net-tools
2. Instal·leu Midnight Commander
apt-get install mc
3. Ara tenim 2 interfícies:
enp0s3 - extern, mira a Internet
enp0s8 - intern, ha de mirar a la xarxa local
En altres distribucions basades en Debian, les interfícies solen anomenar-se eth0 i eth1.
ifconfig -a

Interfíciesenp0s3: flags=4163 mtu 1500
inet 192.168.23.11 màscara de xarxa 255.255.255.0 emissió 192.168.23.255
inet6 fe80::a00:27ff:fec2:bae4 prefixlen 64 scopeid 0x20 ether 08:00:27:c2:ba:e4 txqueuelen 1000 (Ethernet)
Paquets RX 6412 bytes 8676619 (8.2 MiB)
Errors RX 0 caigut 0 sobrepassos 0 fotograma 0
Paquets TX 1726 bytes 289128 (282.3 KiB)
Errors TX 0 caigut 0 sobrepassos 0 portador 0 col·lisions 0

enp0s8: flags=4098 mtu 1500
ether 08:00:27:79:a7:e3 txqueuelen 1000 (Ethernet)
Paquets RX 0 bytes 0 (0.0 B)
Errors RX 0 caigut 0 sobrepassos 0 fotograma 0
Paquets TX 0 bytes 0 (0.0 B)
Errors TX 0 caigut 0 sobrepassos 0 portador 0 col·lisions 0

ho: banderes=73 mtu 65536
inet 127.0.0.1 màscara de xarxa 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10 bucle txqueuelen 1 (loopback local)
Paquets RX 0 bytes 0 (0.0 B)
Errors RX 0 caigut 0 sobrepassos 0 fotograma 0
Paquets TX 0 bytes 0 (0.0 B)
Errors TX 0 caigut 0 sobrepassos 0 portador 0 col·lisions 0

Actualment no s'utilitza la interfície enp0s8, l'habilitarem quan vulguem utilitzar la configuració NAT o NAT Proxy. És llavors quan seria lògic assignar-li una ip estàtica.

4. Comencem a instal·lar 3proxy

4.1 Instal·lació de paquets bàsics per compilar 3proxy des de la font

root@debian9:~# apt-get install build-essential libevent-dev libssl-dev -y

4.2. Creeu una carpeta per descarregar l'arxiu amb les fonts

root@debian9:~# mkdir -p /opt/proxy

4.3. Anem a aquesta carpeta

root@debian9:~# cd /opt/proxy

4.4. Ara descarreguem l'últim paquet 3proxy. En el moment d'escriure aquest article, l'última versió estable era la 0.8.12 (18/04/2018) Baixeu-la des del lloc web oficial de 3proxy

root@debian9:/opt/proxy# wget https://github.com/z3APA3A/3proxy/archive/0.8.12.tar.gz

4.5. Descomprimiu l'arxiu descarregat

root@debian9:/opt/proxy# tar zxvf 0.8.12.tar.gz

4.6. Aneu al directori descomprimit per crear el programa

root@debian9:/opt/proxy# cd 3proxy-0.8.12

4.7. A continuació, heu d'afegir una línia al fitxer de capçalera perquè el nostre servidor sigui completament anònim (funciona realment, tot està comprovat, les ips del client estan ocultes)

root@debian9:/opt/proxy/3proxy-0.8.12# nano +29 src/proxy.h

Afegint una línia

#define ANONYMOUS 1

Premeu Ctrl+x i Intro per desar els canvis.

4.8. Construïm el programa

root@debian9:/opt/proxy/3proxy-0.8.12# make -f Makefile.Linux

makelogmake[2]: sortint del directori '/opt/proxy/3proxy-0.8.12/src/plugins/TransparentPlugin'
make[1]: sortint del directori '/opt/proxy/3proxy-0.8.12/src'

Sense errors, continua.

4.9. Instal·leu el programa al sistema

root@debian9:/opt/proxy/3proxy-0.8.12# make -f Makefile.Linux install

4.10. Aneu al directori arrel i comproveu on s'ha instal·lat el programa

root@debian9:/opt/proxy/3proxy-0.8.12# cd ~/
root@debian9:~# whereis 3proxy

3proxy: /usr/local/bin/3proxy /usr/local/etc/3proxy

4.11. Creem una carpeta per als fitxers de configuració i registres al directori inicial de l'usuari

root@debian9:~# mkdir -p /home/joke/proxy/logs

4.12. Aneu al directori on hauria d'estar la configuració

root@debian9:~# cd /home/joke/proxy/

4.13. Creeu un fitxer buit i copieu-hi la configuració

root@debian9:/home/joke/proxy# cat > 3proxy.conf

3proxy.confdimoni
pidfile /home/joke/proxy/3proxy.pid
servidor 8.8.8.8
nscache 65536
verificador d'usuari:CL:1234
temps morts 1 5 30 60 180 1800 16 60
registre /home/joke/proxy/logs/3proxy.log D
format de registre "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
rotate juliol
auth fort
rubor
permetre el provador
mitjons -p3128
proxy -p8080

Per desar, premeu Ctrl + Z

4.14. Creem un fitxer pid perquè no hi hagi errors d'inici.

root@debian9:/home/joke/proxy# cat > 3proxy.pid

Per desar, premeu Ctrl + Z

4.15. Comencem el servidor intermediari!

root@debian9:/home/joke/proxy# 3proxy /home/joke/proxy/3proxy.conf

4.16. Vegem si el servidor escolta als ports

root@debian9:~/home/joke/proxy# netstat -nlp

registre netstatConnexions a Internet actives (només servidors)
Proto Recv-Q Send-Q Adreça local Adreça estrangera Estat PID/Nom del programa
tcp 0 0 0.0.0.0:8080 0.0.0.0:* ESCOLTA 504/3proxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* ESCOLTA 338/sshd
tcp 0 0 0.0.0.0:3128 0.0.0.0:* ESCOLTA 504/3proxy
tcp6 0 0 :::22 :::* ESCOLTA 338/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* 352/dhclient

Tal com es va escriure a la configuració, el servidor intermediari web escolta al port 8080, el servidor intermediari Socks5 - 3128.

4.17. Per iniciar automàticament el servei proxy després d'un reinici, cal afegir-lo a cron.

root@debian9:/home/joke/proxy# crontab -e

Afegint una línia

@reboot /usr/local/bin/3proxy /home/joke/proxy/3proxy.conf

Premem Intro, ja que cron hauria de veure el caràcter de final de línia i desar el fitxer.

Hi hauria d'haver un missatge sobre la instal·lació d'un nou crontab.

crontab: instal·lant nou crontab

4.18. Reiniciem el sistema i intentem connectar-nos al servidor intermediari mitjançant el navegador. Per a la verificació, utilitzem el navegador Firefox (per a un servidor intermediari web) i el complement FoxyProxy per a socks5 amb autenticació.

root@debian9:/home/joke/proxy# reboot

4.19. Després de comprovar el treball del servidor intermediari després del reinici, podeu veure els registres. Això completa la configuració del servidor intermediari.

3 registre de proxy1542573996.018 PROXY.8080 00000 provador 192.168.23.10:50915 217.12.15.54:443 1193 6939 0 CONNECT_ads.yahoo.com:443_HT
1542574289.634 SOCK5.3128 00000 tester 192.168.23.10:51193 54.192.13.69:443 0 0 0 CONNECT_normandy.cdn.mozilla.net:443

Configuració i execució de la configuració NAT de proxy transparent

En aquesta configuració, tots els dispositius de la xarxa interna funcionaran de manera transparent a Internet mitjançant un servidor intermediari remot. Absolutament, totes les connexions tcp es redirigiran a un o diversos servidors intermediaris (amplia realment l'amplada del canal, exemple de configuració núm. 2!). El servei DNS utilitzarà capacitats 3proxy (dnspr). L'UDP no "sortrà" fora, ja que encara no utilitzem el mecanisme d'enviament (desactivat per defecte al nucli de Linux).

1. És hora d'habilitar la interfície enp0s8

root@debian9:~# nano /etc/network/interfaces

Fitxer /etc/network/interfaces# Aquest fitxer descriu les interfícies de xarxa disponibles al vostre sistema
# i com activar-los. Per a més informació, vegeu interfícies(5).

font /etc/network/interfaces.d/*

# La interfície de xarxa de loopback
interlocutòria el
iface el inet loopback

# La interfície de xarxa principal
allow-hotplug enp0s3
iface enp0s3 inet dhcp

# La interfície de xarxa secundària
allow-hotplug enp0s8
iface enp0s8 inet static
adreça 192.168.201.254
màscara de xarxa 255.255.255.0

Aquí hem assignat a la interfície enp0s8 una adreça estàtica 192.168.201.254 i una màscara 255.255.255.0
Desa la configuració Ctrl+X i reinicia

root@debian9:~# reboot

2. Comprovació d'interfícies

root@debian9:~# ifconfig

registre ifconfigenp0s3: flags=4163 mtu 1500
inet 192.168.23.11 màscara de xarxa 255.255.255.0 emissió 192.168.23.255
inet6 fe80::a00:27ff:fec2:bae4 prefixlen 64 scopeid 0x20 ether 08:00:27:c2:ba:e4 txqueuelen 1000 (Ethernet)
Paquets RX 61 bytes 7873 (7.6 KiB)
Errors RX 0 caigut 0 sobrepassos 0 fotograma 0
Paquets TX 65 bytes 10917 (10.6 KiB)
Errors TX 0 caigut 0 sobrepassos 0 portador 0 col·lisions 0

enp0s8: flags=4163 mtu 1500
inet 192.168.201.254 màscara de xarxa 255.255.255.0 emissió 192.168.201.255
inet6 fe80::a00:27ff:fe79:a7e3 prefixlen 64 scopeid 0x20 ether 08:00:27:79:a7:e3 txqueuelen 1000 (Ethernet)
Paquets RX 0 bytes 0 (0.0 B)
Errors RX 0 caigut 0 sobrepassos 0 fotograma 0
Paquets TX 8 bytes 648 (648.0 B)
Errors TX 0 caigut 0 sobrepassos 0 portador 0 col·lisions 0

ho: banderes=73 mtu 65536
inet 127.0.0.1 màscara de xarxa 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10 bucle txqueuelen 1 (loopback local)
Paquets RX 0 bytes 0 (0.0 B)
Errors RX 0 caigut 0 sobrepassos 0 fotograma 0
Paquets TX 0 bytes 0 (0.0 B)
Errors TX 0 caigut 0 sobrepassos 0 portador 0 col·lisions 0

3. Tot ha funcionat, ara cal configurar 3proxy per al proxy transparent.

root@debian9:~# cd /home/joke/proxy/
root@debian9:/home/joke/proxy# cat > 3proxytransp.conf

Exemple 1 de configuració de proxy transparentdimoni
pidfile /home/joke/proxy/3proxy.pid
servidor 8.8.8.8
nscache 65536
temps morts 1 5 30 60 180 1800 16 60
registre /home/joke/proxy/logs/3proxy.log D
format de registre "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
rotate juliol
rubor
auth de manera única
dnspr
permet *
pare 1000 mitjons5 IP_ADDRESS_EXTERNAL_PROXY 3128 provador 1234
connector /opt/proxy/3proxy-0.8.12/src/TransparentPlugin.ld.so transparent_plugin
tcppm -i0.0.0.0 888 127.0.0.1 11111

4. Ara executeu 3proxy amb una configuració nova
root@debian9:/home/joke/proxy# /usr/local/bin/3proxy /home/joke/proxy/3proxytransp.conf

5. Torna a afegir a crontab
root@debian9:/home/joke/proxy# crontab -e
@reboot /usr/local/bin/3proxy /home/joke/proxy/3proxytransp.conf

6. Vegem què escolta ara el nostre proxy
root@debian9:~# netstat -nlp

registre netstatConnexions a Internet actives (només servidors)
Proto Recv-Q Send-Q Adreça local Adreça estrangera Estat PID/Nom del programa
tcp 0 0 0.0.0.0:22 0.0.0.0:* ESCOLTA 349/sshd
tcp 0 0 0.0.0.0:888 0.0.0.0:* ESCOLTA 354/3proxy
tcp6 0 0 :::22 :::* ESCOLTA 349/sshd
udp 0 0 0.0.0.0:53 0.0.0.0:* 354/3proxy
udp 0 0 0.0.0.0:68 0.0.0.0:* 367/dhclient

7. Ara el servidor intermediari està preparat per acceptar qualsevol connexió TCP al port 888, DNS al port 53, per tal de redirigir-los a socks5 remots: servidor intermediari i DNS Google 8.8.8.8. Ens queda configurar el netfilter (iptables) i les regles DHCP per emetre adreces.

8. Instal·leu el paquet iptables-persistent i dhcpd

root@debian9:~# apt-get install iptables-persistent isc-dhcp-server

9. Editeu el fitxer d'inici dhcpd
root@debian9:~# nano /etc/dhcp/dhcpd.conf

dhcpd.conf#dhcpd.conf
#
# Exemple de fitxer de configuració per a ISC dhcpd
#

# definicions d'opcions comunes a totes les xarxes compatibles...
opció nom-domini "example.org";
opció domain-name-servers ns1.example.org, ns2.example.org;

temps d'arrendament predeterminat 600;
temps màxim d'arrendament 7200;

ddns-update-style none;

# Si aquest servidor DHCP és el servidor DHCP oficial per al local
# xarxa, la directiva autoritzada no hauria de ser comentada.

amb autoritat;

# Una configuració lleugerament diferent per a una subxarxa interna.
subxarxa 192.168.201.0 màscara de xarxa 255.255.255.0 {
rang 192.168.201.10 192.168.201.250;
opció domain-name-servers 192.168.201.254;
encaminadors opcionals 192.168.201.254;
opció adreça de difusió 192.168.201.255;
temps d'arrendament predeterminat 600;
temps màxim d'arrendament 7200;
}

11. Reinicieu i comproveu el servei al port 67
root@debian9:~# reboot
root@debian9:~# netstat -nlp

registre netstatConnexions a Internet actives (només servidors)
Proto Recv-Q Send-Q Adreça local Adreça estrangera Estat PID/Nom del programa
tcp 0 0 0.0.0.0:22 0.0.0.0:* ESCOLTA 389/sshd
tcp 0 0 0.0.0.0:888 0.0.0.0:* ESCOLTA 310/3proxy
tcp6 0 0 :::22 :::* ESCOLTA 389/sshd
udp 0 0 0.0.0.0:20364 0.0.0.0:* 393/dhcpd
udp 0 0 0.0.0.0:53 0.0.0.0:* 310/3proxy
udp 0 0 0.0.0.0:67 0.0.0.0:* 393/dhcpd
udp 0 0 0.0.0.0:68 0.0.0.0:* 405/dhclient
udp6 0 0 :::31728 :::* 393/dhcpd
en brut 0 0 0.0.0.0:1 0.0.0.0:* 393/dhcpd

12. Queda per redirigir totes les sol·licituds tcp al port 888 i desar la regla a iptables

root@debian9:~# iptables -t nat -A PREROUTING -s 192.168.201.0/24 -p tcp -j REDIRECT --to-ports 888

root@debian9:~# iptables-save > /etc/iptables/rules.v4

13. Per ampliar l'ample de banda del canal, podeu utilitzar diversos servidors intermediaris alhora. La quantitat total hauria de ser de 1000. S'estableixen connexions noves amb una probabilitat de 0.2, 0.2, 0.2, 0.2, 0,1, 0,1 als servidors intermediaris especificats.

Nota: si tenim un servidor intermediari web, en comptes de socks5, haureu d'escriure connect, si socks4, llavors socks4 (socks4 NO ADMET L'AUTORITZACIÓ DE L'INICI DE SESIÓ / LA CONTRAsenya!)

Exemple 2 de configuració de proxy transparentdimoni
pidfile /home/joke/proxy/3proxy.pid
servidor 8.8.8.8
nscache 65536
maxconn 500
temps morts 1 5 30 60 180 1800 16 60
registre /home/joke/proxy/logs/3proxy.log D
format de registre "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
rotate juliol
rubor
auth de manera única
dnspr
permet *

pare 200 mitjons5 IP_ADDRESS_EXTERNAL_PROXY#1 3128 provador 1234
pare 200 mitjons5 IP_ADDRESS_EXTERNAL_PROXY#2 3128 provador 1234
pare 200 mitjons5 IP_ADDRESS_EXTERNAL_PROXY#3 3128 provador 1234
pare 200 mitjons5 IP_ADDRESS_EXTERNAL_PROXY#4 3128 provador 1234
pare 100 mitjons5 IP_ADDRESS_EXTERNAL_PROXY#5 3128 provador 1234
pare 100 mitjons5 IP_ADDRESS_EXTERNAL_PROXY#6 3128 provador 1234

connector /opt/proxy/3proxy-0.8.12/src/TransparentPlugin.ld.so transparent_plugin
tcppm -i0.0.0.0 888 127.0.0.1 11111

Configuració i execució de la configuració de NAT + Proxy transparent

En aquesta configuració, utilitzarem el mecanisme NAT habitual amb proxy selectiu o totalment transparent d'adreces o subxarxes individuals. Els usuaris de la xarxa interna treballaran amb determinats serveis/subxarxes sense ni tan sols adonar-se que estan treballant mitjançant un servidor intermediari. Totes les connexions https funcionen bé, no cal generar ni substituir cap certificat.

Primer, decidim quines subxarxes/serveis volem utilitzar com a intermediari. Suposem que els servidors intermediaris externs es troben on s'executa un servei com pandora.com. Ara queda determinar les seves subxarxes/adreces.

1. Ping

root@debian9:~# ping pandora.com
PING pandora.com (208.85.40.20) 56(84) bytes de dades.

2. Escrivim Google BGP 208.85.40.20

Anem al lloc bgp.he.net/net/208.85.40.0/24#_netinfo
Es pot veure que la subxarxa que busco és AS40428 Pandora Media, Inc.

bgp.he.net/net/208.85.40.0/24#_netinfo

Obertura de prefixos v4

bgp.he.net/AS40428#_prefixes

Aquí teniu les subxarxes necessàries!

199.116.161.0/24
199.116.162.0/24
199.116.164.0/23
199.116.164.0/24
199.116.165.0/24
208.85.40.0/24
208.85.41.0/24
208.85.42.0/23
208.85.42.0/24
208.85.43.0/24
208.85.44.0/24
208.85.46.0/23
208.85.46.0/24
208.85.47.0/24

3. Per reduir el nombre de subxarxes, heu de realitzar l'agregació. Anem al lloc ip-calculator.ru/aggregate i copieu-hi la nostra llista. Com a resultat: 6 subxarxes en lloc de 14.

199.116.161.0/24
199.116.162.0/24
199.116.164.0/23
208.85.40.0/22
208.85.44.0/24
208.85.46.0/23

4. Netegeu les regles d'iptables

root@debian9:~# iptables -F
root@debian9:~# iptables -X
root@debian9:~# iptables -t nat -F
root@debian9:~# iptables -t nat -X

Habiliteu el mecanisme d'enviament i NAT

root@debian9:~# echo 1 > /proc/sys/net/ipv4/ip_forward
root@debian9:~# iptables -A FORWARD -i enp0s3 -o enp0s8 -j ACCEPT
root@debian9:~# iptables -A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT
root@debian9:~# iptables -t nat -A POSTROUTING -o enp0s3 -s 192.168.201.0/24 -j MASQUERADE

Per tal que el reenviament estigui habilitat permanentment després del reinici, canviarem el fitxer

root@debian9:~# nano /etc/sysctl.conf

I descomenta la línia

net.ipv4.ip_forward = 1

Ctrl+X per desar el fitxer

5. Emboliqueu les subxarxes pandora.com en un servidor intermediari

root@debian9:~# iptables -t nat -A PREROUTING -s 192.168.201.0/24 -d 199.116.161.0/24,199.116.162.0/24,199.116.164.0/23,208.85.40.0/22,208.85.44.0/24,208.85.46.0/23 -p tcp -j REDIRECT --to-ports 888

6. Guarda les regles

root@debian9:~# iptables-save > /etc/iptables/rules.v4

Configuració i execució del servidor intermediari transparent mitjançant la configuració de l'encaminador

En aquesta configuració, el servidor intermediari transparent pot ser un ordinador independent o una màquina virtual darrere d'un encaminador domèstic/corporatiu. N'hi ha prou amb registrar rutes estàtiques al router o dispositius, i tota la subxarxa utilitzarà el servidor intermediari sense necessitat de cap configuració addicional.

IMPORTANT! És necessari que la nostra passarel·la rebi una IP estàtica del router, o bé estigui configurada per a l'estàtica pròpiament dita.

1. Configureu una adreça de passarel·la estàtica (adaptador enp0s3)

root@debian9:~# nano /etc/network/interfaces

Fitxer /etc/network/interfaces# Aquest fitxer descriu les interfícies de xarxa disponibles al vostre sistema
# i com activar-los. Per a més informació, vegeu interfícies(5).

font /etc/network/interfaces.d/*

# La interfície de xarxa de loopback
interlocutòria el
iface el inet loopback

# La interfície de xarxa principal
allow-hotplug enp0s3
iface enp0s3 inet static
adreça 192.168.23.2
màscara de xarxa 255.255.255.0
gateway 192.168.23.254

# La interfície de xarxa secundària
allow-hotplug enp0s8
iface enp0s8 inet static
adreça 192.168.201.254
màscara de xarxa 255.255.255.0

2. Permet que els dispositius de la subxarxa 192.168.23.0/24 utilitzin el servidor intermediari

root@debian9:~# iptables -t nat -A PREROUTING -s 192.168.23.0/24 -d 199.116.161.0/24,199.116.162.0/24,199.116.164.0/23,208.85.40.0/22,208.85.44.0/24,208.85.46.0/23 -p tcp -j REDIRECT --to-ports 888

3. Guarda les regles
root@debian9:~# iptables-save > /etc/iptables/rules.v4

4. Escrivim subxarxes a l'encaminador

Llista de xarxes d'encaminadors199.116.161.0 255.255.255.0 192.168.23.2
199.116.162.0 255.255.255.0 192.168.23.2
199.116.164.0 255.255.254.0 192.168.23.2
208.85.40.0 255.255.252.0 192.168.23.2
208.85.44.0 255.255.255.0 192.168.23.2
208.85.46.0 255.255.254.0 192.168.23.2

Materials/recursos utilitzats

1. Web oficial del programa 3proxy 3proxy.ru

2. Instruccions per instal·lar 3proxy des de fonts www.ekzorchik.ru/2015/02/how-to-take-your-socks-proxy

3. Branca de desenvolupadors 3proxy a GitHub github.com/z3APA3A/3proxy/issues/274

Font: www.habr.com

Afegeix comentari