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
Es pot veure que la subxarxa que busco és AS40428 Pandora Media, Inc.
Obertura de prefixos v4
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
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
2. Instruccions per instal·lar 3proxy des de fonts
3. Branca de desenvolupadors 3proxy a GitHub
Font: www.habr.com