Osnove transparentnog proxyinga koristeći 3proxy i iptables/netfilter ili kako "sve staviti kroz proxy"

U ovom članku želim otkriti mogućnosti transparentnog proxyinga, koji vam omogućava da potpuno neprimijećeno od strane klijenata preusmjerite sav ili dio prometa preko vanjskih proxy servera.

Kada sam počeo da rješavam ovaj problem, naišao sam na činjenicu da njegova implementacija ima jedan značajan problem - HTTPS protokol. U stara dobra vremena, nije bilo posebnih problema sa transparentnim HTTP proxyingom, ali sa HTTPS proxyingom, pretraživači prijavljuju smetnje protokola i tu se sreći završava.

U uobičajenim uputstvima za Squid proxy server, oni čak nude da generiraju vlastiti certifikat i instaliraju ga na klijente, što je potpuna glupost u najmanju ruku iracionalna i izgleda kao MITM napad. Znam da Squid već zna kako napraviti nešto slično, ali ovaj članak govori o provjerenoj i radnoj metodi koja koristi 3proxy od cijenjenog 3APA3A.

Zatim ćemo detaljnije pogledati proces izgradnje 3proxy-a iz izvora, njegovu konfiguraciju, potpuno i selektivno proxy korištenjem NAT-a, distribuciju kanala na nekoliko vanjskih proxy servera, kao i korištenje rutera i statičkih ruta. Mi koristimo Debian 9 x64 kao OS. Počni!

Instaliranje 3proxyja i pokretanje normalnog proxyja

1. Instalirajte ifconfig (iz paketa net-tools)
apt-get install net-tools
2. Instalirajte Midnigth Commander
apt-get install mc
3. Sada imamo 2 interfejsa:
enp0s3 - eksterni, gleda na Internet
enp0s8 - interni, mora pogledati u lokalnu mrežu
U drugim distribucijama baziranim na Debianu, sučelja se obično nazivaju eth0 i eth1.
ifconfig -a

interfejsienp0s3: flags=4163 mtu 1500
inet 192.168.23.11 netmask 255.255.255.0 emitiranje 192.168.23.255
inet6 fe80::a00:27ff:fec2:bae4 prefikslen 64 scopeid 0x20 eter 08:00:27:c2:ba:e4 txqueuelen 1000 (Ethernet)
RX paketi 6412 bajtova 8676619 (8.2 MiB)
RX greške 0 pao 0 prekoračenja 0 okvir 0
TX paketi 1726 bajtova 289128 (282.3 KiB)
TX greške 0 pada 0 prekoračenja 0 nosioca 0 kolizija 0

enp0s8: flags=4098 mtu 1500
eter 08:00:27:79:a7:e3 txqueuelen 1000 (Eternet)
RX paketi 0 bajtova 0 (0.0 B)
RX greške 0 pao 0 prekoračenja 0 okvir 0
TX paketi 0 bajtova 0 (0.0 B)
TX greške 0 pada 0 prekoračenja 0 nosioca 0 kolizija 0

lo: zastavice=73 mtu 65536
inet 127.0.0.1 mrežna maska ​​255.0.0.0
inet6 ::1 prefikslen 128 opseg 0x10 petlja txqueuelen 1 (Lokalna povratna petlja)
RX paketi 0 bajtova 0 (0.0 B)
RX greške 0 pao 0 prekoračenja 0 okvir 0
TX paketi 0 bajtova 0 (0.0 B)
TX greške 0 pada 0 prekoračenja 0 nosioca 0 kolizija 0

Enp0s8 interfejs se trenutno ne koristi, omogućićemo ga kada želimo da koristimo NAT ili NAT proxy konfiguraciju. Tada bi bilo logično da mu se dodeli statički IP.

4. Počnimo instalirati 3proxy

4.1 Instaliranje osnovnih paketa za kompajliranje 3proxy iz izvora

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

4.2. Kreirajte folder za preuzimanje arhive sa izvorima

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

4.3. Idemo u ovaj folder

root@debian9:~# cd /opt/proxy

4.4. Sada preuzmimo najnoviji 3proxy paket. U vrijeme pisanja ovog teksta, najnovija stabilna verzija bila je 0.8.12 (18.) Preuzmite je sa službene 04proxy web stranice

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

4.5. Raspakujte preuzetu arhivu

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

4.6. Idite na raspakirani direktorij da napravite program

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

4.7. Zatim morate dodati red u datoteku zaglavlja kako bi naš server bio potpuno anoniman (stvarno radi, sve je provjereno, ip-ovi klijenta su skriveni)

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

Dodavanje linije

#define ANONYMOUS 1

Pritisnite Ctrl+x i Enter da sačuvate promjene.

4.8. Hajde da napravimo program

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

makelogmake[2]: napuštanje direktorija '/opt/proxy/3proxy-0.8.12/src/plugins/TransparentPlugin'
make[1]: napuštanje direktorija '/opt/proxy/3proxy-0.8.12/src'

Nema grešaka, nastavi.

4.9. Instalirajte program na sistem

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

4.10. Idite u korijenski direktorij i provjerite gdje je program instaliran

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

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

4.11. Kreirajmo folder za konfiguracijske datoteke i logove u korisničkom početnom direktoriju

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

4.12. Idite na direktorij u kojem treba biti konfiguracija

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

4.13. Napravite praznu datoteku i tamo kopirajte konfiguraciju

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

3proxy.confdaemon
pidfile /home/joke/proxy/3proxy.pid
server 8.8.8.8
ncache 65536
korisnički tester:CL:1234
tajmauti 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"
rotirati 3
auth strong
flush
dozvoli tester
čarape -p3128
proxy -p8080

Za spremanje pritisnite Ctrl + Z

4.14. Kreirajmo pid fajl tako da nema grešaka pri pokretanju.

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

Za spremanje pritisnite Ctrl + Z

4.15. Pokrenimo proxy server!

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

4.16. Hajde da vidimo da li server sluša portove

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

netstat logAktivne internetske veze (samo serveri)
Proto Recv-Q Send-Q Lokalna adresa Strana adresa Država PID/ime programa
tcp 0 0 0.0.0.0:8080 0.0.0.0:* SLUŠAJ 504/3proxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* SLUŠAJ 338/sshd
tcp 0 0 0.0.0.0:3128 0.0.0.0:* SLUŠAJ 504/3proxy
tcp6 0 0 :::22 :::* SLUŠAJ 338/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* 352/dhclient

Kako je napisano u konfiguraciji, web proxy sluša na portu 8080, Socks5 proxy - 3128.

4.17. Da biste automatski pokrenuli proxy uslugu nakon ponovnog pokretanja, morate je dodati u cron.

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

Dodavanje linije

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

Pritisnemo Enter, pošto bi cron trebao vidjeti znak na kraju reda i spremiti datoteku.

Trebala bi biti poruka o instaliranju novog crontab-a.

crontab: instaliranje novog crontab-a

4.18. Hajde da ponovo pokrenemo sistem i pokušamo da se povežemo preko pretraživača na proxy. Za verifikaciju koristimo Firefox pretraživač (za web proxy) i FoxyProxy dodatak za socks5 sa autentifikacijom.

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

4.19. Nakon što provjerite rad proxyja nakon ponovnog pokretanja, možete vidjeti logove. Ovim se dovršava postavljanje proxy servera.

3 proxy log1542573996.018 PROXY.8080 00000 tester 192.168.23.10:50915 217.12.15.54:443 1193 6939 0 CONNECT_ads.yahoo.com:443_HTTP
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

Postavljanje i pokretanje Transparent Proxy NAT konfiguracije

U ovoj konfiguraciji, svi uređaji na internoj mreži će transparentno raditi na Internetu preko udaljenog proxy servera. Apsolutno sve tcp veze će biti preusmjerene na jedan ili nekoliko (stvarno širi širinu kanala, primjer konfiguracije br. 2!) proxy servera. DNS usluga će koristiti 3proxy (dnspr) mogućnosti. UDP neće “ići” van, jer još ne koristimo mehanizam za prosljeđivanje (default je onemogućen u Linux kernelu).

1. Vrijeme je da omogućite enp0s8 interfejs

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

/etc/network/interfaces fajl# Ova datoteka opisuje mrežna sučelja dostupna na vašem sistemu
# i kako ih aktivirati. Za više informacija pogledajte interfejsi(5).

izvor /etc/network/interfaces.d/*

# Mrežni interfejs povratne petlje
auto
iface lo inet loopback

# Primarni mrežni interfejs
dozvoli-hotplug enp0s3
iface enp0s3 inet dhcp

# Sekundarni mrežni interfejs
dozvoli-hotplug enp0s8
iface enp0s8 inet static
adresa 192.168.201.254
mrežna maska ​​255.255.255.0

Ovdje smo enp0s8 interfejsu dodijelili statičku adresu 192.168.201.254 i masku 255.255.255.0
Sačuvajte konfiguraciju Ctrl+X i ponovo pokrenite sistem

root@debian9:~# reboot

2. Provjera interfejsa

root@debian9:~# ifconfig

ifconfig logenp0s3: flags=4163 mtu 1500
inet 192.168.23.11 netmask 255.255.255.0 emitiranje 192.168.23.255
inet6 fe80::a00:27ff:fec2:bae4 prefikslen 64 scopeid 0x20 eter 08:00:27:c2:ba:e4 txqueuelen 1000 (Ethernet)
RX paketi 61 bajt 7873 (7.6 KiB)
RX greške 0 pao 0 prekoračenja 0 okvir 0
TX paketi 65 bajtova 10917 (10.6 KiB)
TX greške 0 pada 0 prekoračenja 0 nosioca 0 kolizija 0

enp0s8: flags=4163 mtu 1500
inet 192.168.201.254 netmask 255.255.255.0 emitiranje 192.168.201.255
inet6 fe80::a00:27ff:fe79:a7e3 prefikslen 64 scopeid 0x20 eter 08:00:27:79:a7:e3 txqueuelen 1000 (Ethernet)
RX paketi 0 bajtova 0 (0.0 B)
RX greške 0 pao 0 prekoračenja 0 okvir 0
TX paketi 8 bajtova 648 (648.0 B)
TX greške 0 pada 0 prekoračenja 0 nosioca 0 kolizija 0

lo: zastavice=73 mtu 65536
inet 127.0.0.1 mrežna maska ​​255.0.0.0
inet6 ::1 prefikslen 128 opseg 0x10 petlja txqueuelen 1 (Lokalna povratna petlja)
RX paketi 0 bajtova 0 (0.0 B)
RX greške 0 pao 0 prekoračenja 0 okvir 0
TX paketi 0 bajtova 0 (0.0 B)
TX greške 0 pada 0 prekoračenja 0 nosioca 0 kolizija 0

3. Sve je ispalo, sada morate konfigurisati 3proxy za transparentno proxying.

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

Primjer konfiguracije transparentnog proxyja #1daemon
pidfile /home/joke/proxy/3proxy.pid
server 8.8.8.8
ncache 65536
tajmauti 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"
rotirati 3
flush
auth jedinstveno
dnspr
dopustiti *
roditelj 1000 čarape5 IP_ADDRESS_EXTERNAL_PROXY 3128 tester 1234
dodatak /opt/proxy/3proxy-0.8.12/src/TransparentPlugin.ld.so transparent_plugin
tcppm -i0.0.0.0 888 127.0.0.1 11111

4. Sada pokrenite 3proxy sa novom konfiguracijom
root@debian9:/home/joke/proxy# /usr/local/bin/3proxy /home/joke/proxy/3proxytransp.conf

5. Dodajte ponovo u crontab
root@debian9:/home/joke/proxy# crontab -e
@reboot /usr/local/bin/3proxy /home/joke/proxy/3proxytransp.conf

6. Da vidimo šta naš proxy sada sluša
root@debian9:~# netstat -nlp

netstat logAktivne internetske veze (samo serveri)
Proto Recv-Q Send-Q Lokalna adresa Strana adresa Država PID/ime programa
tcp 0 0 0.0.0.0:22 0.0.0.0:* SLUŠAJ 349/sshd
tcp 0 0 0.0.0.0:888 0.0.0.0:* SLUŠAJ 354/3proxy
tcp6 0 0 :::22 :::* SLUŠAJ 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. Sada je proxy spreman da prihvati sve TCP veze na portu 888, DNS na portu 53, kako bi ih preusmjerio na udaljeni socks5 - proxy i DNS Google 8.8.8.8. Ostaje nam da konfigurišemo netfilter (iptables) i DHCP pravila za izdavanje adresa.

8. Instalirajte iptables-persistent i dhcpd paket

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

9. Uredite dhcpd datoteku za pokretanje
root@debian9:~# nano /etc/dhcp/dhcpd.conf

dhcpd.conf# dhcpd.conf
#
# Primjer konfiguracijske datoteke za ISC dhcpd
#

# definicije opcija zajedničke za sve podržane mreže…
opcija naziv-domene "example.org";
opcija domen-name-servers ns1.example.org, ns2.example.org;

zadano vrijeme zakupa 600;
maksimalno vrijeme zakupa 7200;

ddns-update-style nema;

# Ako je ovaj DHCP server službeni DHCP server za lokalni
# mreže, mjerodavna direktiva treba biti dekomentirana.

autoritativni;

# Malo drugačija konfiguracija za internu podmrežu.
podmreža 192.168.201.0 mrežna maska ​​255.255.255.0 {
raspon 192.168.201.10 192.168.201.250;
opcija domen-name-servers 192.168.201.254;
opcijski usmjerivači 192.168.201.254;
opcija e-adresa 192.168.201.255;
zadano vrijeme zakupa 600;
maksimalno vrijeme zakupa 7200;
}

11. Ponovo pokrenite i provjerite uslugu na portu 67
root@debian9:~# reboot
root@debian9:~# netstat -nlp

netstat logAktivne internetske veze (samo serveri)
Proto Recv-Q Send-Q Lokalna adresa Strana adresa Država PID/ime programa
tcp 0 0 0.0.0.0:22 0.0.0.0:* SLUŠAJ 389/sshd
tcp 0 0 0.0.0.0:888 0.0.0.0:* SLUŠAJ 310/3proxy
tcp6 0 0 :::22 :::* SLUŠAJ 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
sirovo 0 0 0.0.0.0:1 0.0.0.0:* 393/dhcpd

12. Ostaje preusmjeriti sve tcp zahtjeve na port 888 i sačuvati pravilo u 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. Da biste proširili propusni opseg kanala, možete koristiti nekoliko proxy servera odjednom. Ukupan iznos bi trebao biti 1000. Nove veze se uspostavljaju sa vjerovatnoćom od 0.2, 0.2, 0.2, 0.2, 0,1, 0,1 na navedene proxy servere.

Napomena: ako imamo web proxy, onda umjesto socks5 trebate napisati connect, ako socks4, onda socks4 (socks4 NE PODRŽAVA AUTORIZACIJU LOGIN/LOZINKE!)

Primjer konfiguracije transparentnog proxyja #2daemon
pidfile /home/joke/proxy/3proxy.pid
server 8.8.8.8
ncache 65536
maxconn 500
tajmauti 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"
rotirati 3
flush
auth jedinstveno
dnspr
dopustiti *

roditelj 200 socks5 IP_ADDRESS_EXTERNAL_PROXY#1 3128 tester 1234
roditelj 200 socks5 IP_ADDRESS_EXTERNAL_PROXY#2 3128 tester 1234
roditelj 200 socks5 IP_ADDRESS_EXTERNAL_PROXY#3 3128 tester 1234
roditelj 200 socks5 IP_ADDRESS_EXTERNAL_PROXY#4 3128 tester 1234
roditelj 100 socks5 IP_ADDRESS_EXTERNAL_PROXY#5 3128 tester 1234
roditelj 100 socks5 IP_ADDRESS_EXTERNAL_PROXY#6 3128 tester 1234

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

Postavljanje i pokretanje konfiguracije NAT + Transparent Proxy

U ovoj konfiguraciji koristićemo uobičajeni NAT mehanizam sa selektivnim ili potpuno transparentnim proxyingom pojedinačnih adresa ili podmreža. Korisnici interne mreže će raditi sa određenim servisima/podmrežama, a da nisu ni svjesni da rade preko proxyja. Sve https veze rade dobro, ne moraju se generirati/zamjenjivati ​​certifikati.

Prvo, odlučimo koje podmreže / usluge želimo proxy. Pretpostavimo da su eksterni proksiji locirani tamo gde je pokrenut servis kao što je pandora.com. Sada ostaje odrediti njegove podmreže / adrese.

1. Ping

root@debian9:~# ping pandora.com
PING pandora.com (208.85.40.20) 56(84) bajtova podataka.

2. Ukucavamo Google BGP 208.85.40.20

Idemo na stranicu bgp.he.net/net/208.85.40.0/24#_netinfo
Može se vidjeti da je podmreža koju tražim AS40428 Pandora Media, Inc.

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

Otvaranje prefiksa v4

bgp.he.net/AS40428#_prefiksi

Ovdje su potrebne podmreže!

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. Da biste smanjili broj podmreža, trebate izvesti agregaciju. Idemo na stranicu ip-calculator.ru/aggregate i kopirajte našu listu tamo. Kao rezultat - 6 podmreža umjesto 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. Očistite iptables pravila

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

Omogućite mehanizam za prosljeđivanje 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

Da bi prosljeđivanje bilo trajno omogućeno nakon ponovnog pokretanja, promijenit ćemo datoteku

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

I dekomentirajte red

net.ipv4.ip_forward = 1

Ctrl+X za spremanje datoteke

5. Zamotajte pandora.com podmreže u 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. Sačuvajte pravila

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

Postavljanje i pokretanje Transparent Proxy putem konfiguracije rutera

U ovoj konfiguraciji, transparentni proxy server može biti zaseban računar ili virtuelna mašina iza kućnog/korporativnog rutera. Dovoljno je registrirati statičke rute na ruteru ili uređajima, a cijela podmreža će koristiti proxy bez potrebe za dodatnim podešavanjima.

BITAN! Neophodno je da naš gateway dobije statičku IP adresu od rutera, ili da bude konfigurisan za sam statički.

1. Postavite statičku adresu gatewaya (adapter enp0s3)

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

/etc/network/interfaces fajl# Ova datoteka opisuje mrežna sučelja dostupna na vašem sistemu
# i kako ih aktivirati. Za više informacija pogledajte interfejsi(5).

izvor /etc/network/interfaces.d/*

# Mrežni interfejs povratne petlje
auto
iface lo inet loopback

# Primarni mrežni interfejs
dozvoli-hotplug enp0s3
iface enp0s3 inet static
adresa 192.168.23.2
mrežna maska ​​255.255.255.0
gateway 192.168.23.254

# Sekundarni mrežni interfejs
dozvoli-hotplug enp0s8
iface enp0s8 inet static
adresa 192.168.201.254
mrežna maska ​​255.255.255.0

2. Dozvolite uređajima iz podmreže 192.168.23.0/24 da koriste 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. Sačuvajte pravila
root@debian9:~# iptables-save > /etc/iptables/rules.v4

4. Napišimo podmreže na ruteru

Lista mreža rutera199.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

Korišteni materijali/resursi

1. Službena web stranica 3proxy programa 3proxy.ru

2. Upute za instaliranje 3proxy iz izvora www.ekzorchik.ru/2015/02/how-to-take-your-socks-proxy

3. 3proxy grana programera na GitHubu github.com/z3APA3A/3proxy/issues/274

izvor: www.habr.com

Dodajte komentar