In questu articulu, vogliu revelà e pussibulità di proxy trasparente, chì vi permette di passà completamente inosservatu da i clienti per redirige tuttu o parte di u trafficu attraversu servitori proxy esterni.
Quandu aghju cuminciatu à risolve stu prublema, aghju scontru u fattu chì a so implementazione hà un prublema significativu - u protocolu HTTPS. In i boni vechji tempi, ùn ci era micca prublemi particulari cù u proxy HTTP trasparente, ma cù u proxy HTTPS, i navigatori raportanu interferenza di protokollu è hè quì chì a felicità finisce.
In l'istruzzioni cumuni per u servitore proxy Squid, offrenu ancu di generà u so propiu certificatu è l'installanu nantu à i clienti, chì hè una sciocchezza cumpleta almenu irrazionale è pare un attaccu MITM. Sapemu chì Squid sapi digià cumu fà qualcosa simili, ma questu articulu hè nantu à un metudu pruvucatu è di travagliu cù 3proxy da u rispettatu 3APA3A.
In seguitu, faremu un sguardu detallatu à u prucessu di custruisce 3proxy da a fonte, a so cunfigurazione, a proxy cumpleta è selettiva cù NAT, a distribuzione di u canali à parechji servitori proxy esterni, è ancu l'usu di un router è rotte statiche. Utilizemu Debian 9 x64 cum'è OS. Cuminciate !
Installà 3proxy è eseguisce un proxy normale
1. Installa ifconfig (da u pacchettu net-tools)
apt-get install net-tools
2. Installa Midnight Commander
apt-get install mc
3. Avemu avà 2 interfacce:
enp0s3 - esternu, fighja in Internet
enp0s8 - internu, deve circà in a reta lucale
In altre distribuzioni basate in Debian, l'interfaccia sò generalmente chjamate eth0 è eth1.
ifconfig -a
interfacciaenp0s3: flags=4163 mtu 1500
inet 192.168.23.11 netmask 255.255.255.0 broadcast 192.168.23.255
inet6 fe80::a00:27ff:fec2:bae4 prefixlen 64 scopeid 0x20 ether 08:00:27:c2:ba:e4 txqueuelen 1000 (Ethernet)
Pacchetti RX 6412 bytes 8676619 (8.2 MiB)
Errori RX 0 dropped 0 overruns 0 frame 0
Pacchetti TX 1726 bytes 289128 (282.3 KiB)
Errori TX 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s8: flags=4098 mtu 1500
ether 08:00:27:79:a7:e3 txqueuelen 1000 (Ethernet)
Pacchetti RX 0 bytes 0 (0.0 B)
Errori RX 0 dropped 0 overruns 0 frame 0
Pacchetti TX 0 bytes 0 (0.0B)
Errori TX 0 dropped 0 overruns 0 carrier 0 collisions 0
eccu: bandiere = 73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1 (Loopback locale)
Pacchetti RX 0 bytes 0 (0.0 B)
Errori RX 0 dropped 0 overruns 0 frame 0
Pacchetti TX 0 bytes 0 (0.0B)
Errori TX 0 dropped 0 overruns 0 carrier 0 collisions 0
L'interfaccia enp0s8 ùn hè micca utilizata attualmente, l'attivaremu quandu vulemu utilizà a cunfigurazione NAT o NAT Proxy. Hè tandu chì saria logicu per assignà una ip statica.
4. Cuminciamu à stallà 3proxy
4.1 Installazione di pacchetti di basa per cumpilà 3proxy da a fonte
root@debian9:~# apt-get install build-essential libevent-dev libssl-dev -y
4.2. Crea un cartulare per scaricà l'archiviu cù fonti
root@debian9:~# mkdir -p /opt/proxy
4.3. Andemu à stu cartulare
root@debian9:~# cd /opt/proxy
4.4. Avà scarichemu l'ultimu pacchettu 3proxy. À u mumentu di sta scrittura, l'ultima versione stabile era 0.8.12 (18/04/2018) Scaricate da u situ web ufficiale 3proxy
root@debian9:/opt/proxy# wget https://github.com/z3APA3A/3proxy/archive/0.8.12.tar.gz
4.5. Unpack l'archiviu scaricatu
root@debian9:/opt/proxy# tar zxvf 0.8.12.tar.gz
4.6. Andate à u cartulare unpacked per custruisce u prugramma
root@debian9:/opt/proxy# cd 3proxy-0.8.12
4.7. In seguitu, avete bisognu di aghjunghje una linea à u schedariu di l'intestazione per chì u nostru servitore hè completamente anonimu (funziona veramente, tuttu hè verificatu, l'ips di u cliente sò oculati)
root@debian9:/opt/proxy/3proxy-0.8.12# nano +29 src/proxy.h
Aghjunghjendu una linea
#define ANONYMOUS 1
Press Ctrl + x è Enter per salvà i cambiamenti.
4.8. Custruemu u prugramma
root@debian9:/opt/proxy/3proxy-0.8.12# make -f Makefile.Linux
makelogmake [2]: Lasciate u cartulare '/opt/proxy/3proxy-0.8.12/src/plugins/TransparentPlugin'
make [1]: Lascià u cartulare '/opt/proxy/3proxy-0.8.12/src'
Nisun errore, cuntinuà.
4.9. Stallà u prugrammu nant'à u sistema
root@debian9:/opt/proxy/3proxy-0.8.12# make -f Makefile.Linux install
4.10. Andate à u cartulare radicali è verificate induve u prugramma hè stallatu
root@debian9:/opt/proxy/3proxy-0.8.12# cd ~/
root@debian9:~# whereis 3proxy
3proxy: /usr/local/bin/3proxy /usr/local/etc/3proxy
4.11. Creemu un cartulare per i schedarii di cunfigurazione è i logs in u cartulare di casa di l'utilizatori
root@debian9:~# mkdir -p /home/joke/proxy/logs
4.12. Andate à u cartulare induve a cunfigurazione deve esse
root@debian9:~# cd /home/joke/proxy/
4.13. Crea un schedariu viotu è copià a cunfigurazione quì
root@debian9:/home/joke/proxy# cat > 3proxy.conf
3proxy.confdaemon
pidfile /home/joke/proxy/3proxy.pid
servitore 8.8.8.8
nscache 65536
tester d'utilizatore:CL:1234
timeouts 1 5 30 60 180 1800 16 60
log /home/joke/proxy/logs/3proxy.log D
logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
girà 3
auth forte
Borboni
permette u tester
calzini -p3128
proxy -p8080
Per salvà, appughjà Ctrl + Z
4.14. Creemu un schedariu pid in modu chì ùn ci hè micca errore di startup.
root@debian9:/home/joke/proxy# cat > 3proxy.pid
Per salvà, appughjà Ctrl + Z
4.15. Cuminciamu u servitore proxy!
root@debian9:/home/joke/proxy# 3proxy /home/joke/proxy/3proxy.conf
4.16. Videmu s'ellu u servitore stà à sente nantu à i porti
root@debian9:~/home/joke/proxy# netstat -nlp
log netstatConnessioni Internet attive (solu servitori)
Proto Recv-Q Send-Q Indirizzu Locale Indirizzu Stranieru Statu PID/Nome di prugramma
tcp 0 0 0.0.0.0:8080 0.0.0.0:* ASCOLTA 504/3proxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* ASCOLTA 338/sshd
tcp 0 0 0.0.0.0:3128 0.0.0.0:* ASCOLTA 504/3proxy
tcp6 0 0 :::22 :::* ASCOLTA 338/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* 352/dhclient
Cumu hè statu scrittu in a cunfigurazione, u proxy web ascolta u portu 8080, Socks5 proxy - 3128.
4.17. Per avvià automaticamente u serviziu proxy dopu un reboot, avete bisognu di aghjunghje à cron.
root@debian9:/home/joke/proxy# crontab -e
Aghjunghjendu una linea
@reboot /usr/local/bin/3proxy /home/joke/proxy/3proxy.conf
Pressu Enter, postu chì cron deve vede u caratteru di fine di linea è salvà u schedariu.
Ci deve esse un missaghju per installà un novu crontab.
crontab: stallazione di novu crontab
4.18. Reboot u sistema è pruvate à cunnette cù u navigatore à u proxy. Per a verificazione, usemu u navigatore Firefox (per un proxy web) è l'add-on FoxyProxy per socks5 cù autentificazione.
root@debian9:/home/joke/proxy# reboot
4.19. Dopu avè verificatu u travagliu di u proxy dopu à u reboot, pudete vede i logs. Questu cumpleta a cunfigurazione di u servitore proxy.
3 log proxy1542573996.018 PROXY.8080 00000 tester 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
Configurazione è esecuzione di a cunfigurazione NAT Transparent Proxy
In questa cunfigurazione, tutti i dispositi nantu à a reta interna travaglià in modu trasparente in Internet attraversu un servitore proxy remoto. Assolutamente tutte e cunnessione tcp seranu redirette à unu o parechji (veramente espansione a larghezza di u canali, esempiu di cunfigurazione N ° 2!) Proxy servers. U serviziu DNS utilizerà capacità 3proxy (dnspr). UDP ùn "andà" fora, postu chì ùn avemu micca ancu aduprà u mecanismu avanti (disabilitatu per difettu in u kernel Linux).
1. Hè u tempu di attivà l'interfaccia enp0s8
root@debian9:~# nano /etc/network/interfaces
/etc/network/interfaces file# Stu schedariu descrive l'interfacce di rete dispunibili nantu à u vostru sistema
# è cumu per attivà. Per più infurmazione, vede l'interfaccia (5).
fonte /etc/network/interfaces.d/*
# L'interfaccia di rete di loopback
caru
iface eccu iNet loopback
# L'interfaccia di rete primaria
allow-hotplug enp0s3
iface enp0s3 inet dhcp
# L'interfaccia di rete secundaria
allow-hotplug enp0s8
iface enp0s8 inet static
indirizzu 192.168.201.254
maschera di rete 255.255.255.0
Quì avemu assignatu l'interfaccia enp0s8 un indirizzu staticu 192.168.201.254 è una maschera 255.255.255.0
Salvà a cunfigurazione Ctrl + X è reboot
root@debian9:~# reboot
2. Cuntrollà interfaccia
root@debian9:~# ifconfig
log ifconfigenp0s3: flags=4163 mtu 1500
inet 192.168.23.11 netmask 255.255.255.0 broadcast 192.168.23.255
inet6 fe80::a00:27ff:fec2:bae4 prefixlen 64 scopeid 0x20 ether 08:00:27:c2:ba:e4 txqueuelen 1000 (Ethernet)
Pacchetti RX 61 bytes 7873 (7.6 KiB)
Errori RX 0 dropped 0 overruns 0 frame 0
Pacchetti TX 65 bytes 10917 (10.6 KiB)
Errori TX 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s8: flags=4163 mtu 1500
inet 192.168.201.254 netmask 255.255.255.0 broadcast 192.168.201.255
inet6 fe80::a00:27ff:fe79:a7e3 prefixlen 64 scopeid 0x20 ether 08:00:27:79:a7:e3 txqueuelen 1000 (Ethernet)
Pacchetti RX 0 bytes 0 (0.0 B)
Errori RX 0 dropped 0 overruns 0 frame 0
Pacchetti TX 8 bytes 648 (648.0B)
Errori TX 0 dropped 0 overruns 0 carrier 0 collisions 0
eccu: bandiere = 73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1 (Loopback locale)
Pacchetti RX 0 bytes 0 (0.0 B)
Errori RX 0 dropped 0 overruns 0 frame 0
Pacchetti TX 0 bytes 0 (0.0B)
Errori TX 0 dropped 0 overruns 0 carrier 0 collisions 0
3. Tuttu hà travagliatu, avà avete bisognu di cunfigurà 3proxy per proxy trasparente.
root@debian9:~# cd /home/joke/proxy/
root@debian9:/home/joke/proxy# cat > 3proxytransp.conf
Esempiu di cunfigurazione di proxy trasparente #1daemon
pidfile /home/joke/proxy/3proxy.pid
servitore 8.8.8.8
nscache 65536
timeouts 1 5 30 60 180 1800 16 60
log /home/joke/proxy/logs/3proxy.log D
logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
girà 3
Borboni
auth unicamente
dnspr
permette *
parent 1000 socks5 EXTERNAL_PROXY IP_ADDRESS 3128 tester 1234
plugin /opt/proxy/3proxy-0.8.12/src/TransparentPlugin.ld.so transparent_plugin
tcppm -i0.0.0.0 888 127.0.0.1 11111
4. Avà eseguisce 3proxy cù nova cunfigurazione
root@debian9:/home/joke/proxy# /usr/local/bin/3proxy /home/joke/proxy/3proxytransp.conf
5. Aghjunghjite à crontab di novu
root@debian9:/home/joke/proxy# crontab -e
@reboot /usr/local/bin/3proxy /home/joke/proxy/3proxytransp.conf
6. Videmu ciò chì u nostru proxy sta à sente avà
root@debian9:~# netstat -nlp
log netstatConnessioni Internet attive (solu servitori)
Proto Recv-Q Send-Q Indirizzu Locale Indirizzu Stranieru Statu PID/Nome di prugramma
tcp 0 0 0.0.0.0:22 0.0.0.0:* ASCOLTA 349/sshd
tcp 0 0 0.0.0.0:888 0.0.0.0:* ASCOLTA 354/3proxy
tcp6 0 0 :::22 :::* ASCOLTA 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. Avà u proxy hè prontu à accettà ogni cunnessione TCP in u portu 888, DNS in u portu 53, per redirigerli à socks5 remoti - proxy è DNS Google 8.8.8.8. Resta per noi di cunfigurà u netfilter (iptables) è e regule DHCP per l'emissione di indirizzi.
8. Installa u pacchettu iptables-persistent è dhcpd
root@debian9:~# apt-get install iptables-persistent isc-dhcp-server
9. Edit u schedariu di startup dhcpd
root@debian9:~# nano /etc/dhcp/dhcpd.conf
dhcpd.conf#dhcpd.conf
#
# Esempiu di schedariu di cunfigurazione per ISC dhcpd
#
# definizione di opzioni cumune à tutte e rete supportate...
opzione domain-name "example.org";
opzione domain-name-servers ns1.example.org, ns2.example.org;
time-lease-time 600;
max-lease-time 7200;
ddns-update-style nimu;
# Se stu servitore DHCP hè u servitore DHCP ufficiale per u locale
# rete, a direttiva autorità ùn deve esse micca cummentata.
auturitariu;
# Una cunfigurazione ligeramente diversa per una subnet interna.
subnet 192.168.201.0 netmask 255.255.255.0 {
gamma 192.168.201.10 192.168.201.250;
opzione domain-name-servers 192.168.201.254;
router di opzione 192.168.201.254;
opzione broadcast-address 192.168.201.255;
time-lease-time 600;
max-lease-time 7200;
}
11. Reboot è verificate u serviziu nantu à u portu 67
root@debian9:~# reboot
root@debian9:~# netstat -nlp
log netstatConnessioni Internet attive (solu servitori)
Proto Recv-Q Send-Q Indirizzu Locale Indirizzu Stranieru Statu PID/Nome di prugramma
tcp 0 0 0.0.0.0:22 0.0.0.0:* ASCOLTA 389/sshd
tcp 0 0 0.0.0.0:888 0.0.0.0:* ASCOLTA 310/3proxy
tcp6 0 0 :::22 :::* ASCOLTA 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
crudo 0 0 0.0.0.0:1 0.0.0.0:* 393/dhcpd
12. Resta per redirige tutte e dumande tcp à u portu 888 è salvà a regula in 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 espansione a larghezza di banda di u canali, pudete aduprà parechji servitori proxy à una volta. A quantità tutale deve esse 1000. I novi cunnessione sò stabiliti cù una probabilità di 0.2, 0.2, 0.2, 0.2, 0,1, 0,1 à i servitori proxy specificati.
Nota: se avemu un proxy web, allora invece di socks5 avete bisognu di scrive cunnette, se socks4, allora socks4 (socks4 NON SUPPORTA LOGIN / AUTORIZZAZIONE PASSWORD!)
Esempiu di cunfigurazione di proxy trasparente #2daemon
pidfile /home/joke/proxy/3proxy.pid
servitore 8.8.8.8
nscache 65536
maxconn 500
timeouts 1 5 30 60 180 1800 16 60
log /home/joke/proxy/logs/3proxy.log D
logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
girà 3
Borboni
auth unicamente
dnspr
permette *
parent 200 calzini5 IP_ADDRESS_EXTERNAL_PROXY#1 3128 tester 1234
parent 200 calzini5 IP_ADDRESS_EXTERNAL_PROXY#2 3128 tester 1234
parent 200 calzini5 IP_ADDRESS_EXTERNAL_PROXY#3 3128 tester 1234
parent 200 calzini5 IP_ADDRESS_EXTERNAL_PROXY#4 3128 tester 1234
parent 100 calzini5 IP_ADDRESS_EXTERNAL_PROXY#5 3128 tester 1234
parent 100 calzini5 IP_ADDRESS_EXTERNAL_PROXY#6 3128 tester 1234
plugin /opt/proxy/3proxy-0.8.12/src/TransparentPlugin.ld.so transparent_plugin
tcppm -i0.0.0.0 888 127.0.0.1 11111
Configurazione è esecuzione di a cunfigurazione NAT + Transparent Proxy
In questa cunfigurazione, useremu u mekanismu NAT abituale cù proxy selettivu o cumpletu trasparente di indirizzi individuali o subnets. L'utilizatori di a reta interna travaglianu cù certi servizii / subnets senza ancu avè capitu chì travaglianu attraversu un proxy. Tutte e cunnessione https funzionanu bè, nisun certificatu deve esse generatu / rimpiazzatu.
Prima, decidemu quali subnets / servizii vulemu proxy. Assumimu chì i proxy esterni sò situati induve un serviziu cum'è pandora.com hè in esecuzione. Avà resta à determinà i so subnets / indirizzi.
1. Ping
root@debian9:~# ping pandora.com
PING pandora.com (208.85.40.20) 56 (84) bytes di dati.
2. Scrivemu in Google BGP 208.85.40.20
Andemu à u situ
Pò esse vistu chì a subnet chì cercu hè AS40428 Pandora Media, Inc.
Apertura di prefissi v4
Eccu i subnets necessarii!
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 riduce u nùmeru di subnets, avete bisognu di fà l'agregazione. Andemu à u situ
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. Pulite e regule iptables
root@debian9:~# iptables -F
root@debian9:~# iptables -X
root@debian9:~# iptables -t nat -F
root@debian9:~# iptables -t nat -X
Habilita u mecanismu di avanti è 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 esse attivatu in modu permanente dopu à reboot, cambieremu u schedariu
root@debian9:~# nano /etc/sysctl.conf
È uncomment a linea
net.ipv4.ip_forward = 1
Ctrl + X per salvà u schedariu
5. Wrap pandora.com subnets in un proxy
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. Salvà e regule
root@debian9:~# iptables-save > /etc/iptables/rules.v4
Configurazione è esecuzione di u Proxy Trasparente via a cunfigurazione di u router
In questa cunfigurazione, u servitore proxy trasparente pò esse un PC separatu o una macchina virtuale daretu à un router di casa / corporativu. Hè abbastanza per registrà rotte statiche nantu à u router o i dispositi è tutta a subnet utilizarà un proxy senza bisognu di paràmetri supplementari.
IMPORTANTE ! Hè necessariu chì a nostra gateway riceve una IP statica da u router, o esse cunfigurata per static stessu.
1. Configurate un indirizzu gateway staticu (adapter enp0s3)
root@debian9:~# nano /etc/network/interfaces
/etc/network/interfaces file# Stu schedariu descrive l'interfacce di rete dispunibili nantu à u vostru sistema
# è cumu per attivà. Per più infurmazione, vede l'interfaccia (5).
fonte /etc/network/interfaces.d/*
# L'interfaccia di rete di loopback
caru
iface eccu iNet loopback
# L'interfaccia di rete primaria
allow-hotplug enp0s3
iface enp0s3 inet static
indirizzu 192.168.23.2
maschera di rete 255.255.255.0
passerella 192.168.23.254
# L'interfaccia di rete secundaria
allow-hotplug enp0s8
iface enp0s8 inet static
indirizzu 192.168.201.254
maschera di rete 255.255.255.0
2. Permette à i dispositi da a subnet 192.168.23.0/24 per aduprà proxy
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. Salvà e regule
root@debian9:~# iptables-save > /etc/iptables/rules.v4
4. Scrivemu subnets nantu à u router
Lista di rete di router199.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
Materiali / risorse utilizati
1. U situ ufficiale di u prugramma 3proxy
2. Instructions per installà 3proxy da fonti
3. 3proxy developer branch in GitHub
Source: www.habr.com