Pada artikel ini saya ingin mengungkapkan kemungkinan proksi transparan, yang memungkinkan Anda mengalihkan semua atau sebagian lalu lintas melalui server proksi eksternal tanpa disadari oleh klien.
Ketika saya mulai memecahkan masalah ini, saya dihadapkan pada kenyataan bahwa implementasinya memiliki satu masalah signifikan - protokol HTTPS. Di masa lalu, tidak ada masalah khusus dengan proksi HTTP transparan, tetapi dengan proksi HTTPS, browser melaporkan gangguan pada protokol dan di situlah kebahagiaan berakhir.
Dalam instruksi umum untuk server proxy Squid, mereka bahkan menyarankan untuk membuat sertifikat Anda sendiri dan menginstalnya pada klien, yang setidaknya merupakan omong kosong, tidak rasional dan terlihat seperti serangan MITM. Saya tahu bahwa Squid sudah dapat melakukan hal serupa, tetapi artikel ini membahas tentang metode yang terbukti dan berhasil menggunakan 3proxy dari 3APA3A yang dihormati.
Selanjutnya kita akan melihat secara detail proses membangun 3proxy dari sumber, konfigurasinya, proxy penuh dan selektif menggunakan NAT, distribusi saluran ke beberapa server proxy eksternal, serta penggunaan router dan rute statis. Kami menggunakan Debian 9 x64 sebagai OSnya. Mulai!
Menginstal 3proxy dan menjalankan server proxy biasa
1. Instal ifconfig (dari paket net-tools)
apt-get install net-tools
2. Instal Komandan Tengah Malam
apt-get install mc
3. Kami sekarang memiliki 2 antarmuka:
enp0s3 - eksternal, melihat Internet
enp0s8 - internal, harus melihat ke jaringan lokal
Pada distribusi berbasis Debian lainnya, antarmuka biasanya diberi nama eth0 dan eth1.
ifconfig -a
Antarmukaenp0s3: bendera=4163 mtu 1500
inet 192.168.23.11 netmask 255.255.255.0 siaran 192.168.23.255
inet6 fe80::a00:27ff:fec2:bae4 prefixlen 64 scopeid 0x20 ether 08:00:27:c2:ba:e4 txqueuelen 1000 (Ethernet)
Paket RX 6412 byte 8676619 (8.2 MiB)
Kesalahan RX 0 turun 0 melampaui 0 bingkai 0
Paket TX 1726 byte 289128 (282.3 KiB)
Kesalahan TX 0 dijatuhkan 0 melampaui 0 pembawa 0 tabrakan 0
enp0s8: bendera=4098 mtu 1500
eter 08:00:27:79:a7:e3 txqueuelen 1000 (Ethernet)
Paket RX 0 byte 0 (0.0 B)
Kesalahan RX 0 turun 0 melampaui 0 bingkai 0
Paket TX 0 byte 0 (0.0 B)
Kesalahan TX 0 dijatuhkan 0 melampaui 0 pembawa 0 tabrakan 0
lihat: bendera=73 mtu 65536
inet 127.0.0.1 masker jaring 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1 (Loopback Lokal)
Paket RX 0 byte 0 (0.0 B)
Kesalahan RX 0 turun 0 melampaui 0 bingkai 0
Paket TX 0 byte 0 (0.0 B)
Kesalahan TX 0 dijatuhkan 0 melampaui 0 pembawa 0 tabrakan 0
Antarmuka enp0s8 saat ini tidak digunakan, kami akan mengaktifkannya ketika kami ingin menggunakan konfigurasi Proxy NAT atau NAT. Saat itulah logis untuk menetapkannya sebagai IP statis.
4. Mari kita mulai menginstal 3proxy
4.1 Menginstal paket dasar untuk mengkompilasi 3proxy dari sumber
root@debian9:~# apt-get install build-essential libevent-dev libssl-dev -y
4.2. Mari buat folder untuk mengunduh arsip dengan sumber
root@debian9:~# mkdir -p /opt/proxy
4.3. Ayo pergi ke folder ini
root@debian9:~# cd /opt/proxy
4.4. Sekarang mari kita download paket 3proxy terbaru. Pada saat penulisan, versi stabil terbaru adalah 0.8.12 (18/04/2018) Unduh dari situs web resmi 3proxy
root@debian9:/opt/proxy# wget https://github.com/z3APA3A/3proxy/archive/0.8.12.tar.gz
4.5. Mari kita buka paket arsip yang diunduh
root@debian9:/opt/proxy# tar zxvf 0.8.12.tar.gz
4.6. Buka direktori yang belum dibongkar untuk membangun program
root@debian9:/opt/proxy# cd 3proxy-0.8.12
4.7. Selanjutnya kita perlu menambahkan baris pada file header agar server kita benar-benar anonim (benar-benar berfungsi, semuanya tercentang, IP klien disembunyikan)
root@debian9:/opt/proxy/3proxy-0.8.12# nano +29 src/proxy.h
Tambahkan garis
#define ANONYMOUS 1
Tekan Ctrl+x dan Enter untuk menyimpan perubahan.
4.8. Mari kita mulai merakit programnya
root@debian9:/opt/proxy/3proxy-0.8.12# make -f Makefile.Linux
log masukmake[2]: Meninggalkan direktori '/opt/proxy/3proxy-0.8.12/src/plugins/TransparentPlugin'
make[1]: Meninggalkan direktori '/opt/proxy/3proxy-0.8.12/src'
Tidak ada kesalahan, ayo lanjutkan.
4.9. Instal program pada sistem
root@debian9:/opt/proxy/3proxy-0.8.12# make -f Makefile.Linux install
4.10. Buka direktori root dan periksa di mana program itu diinstal
root@debian9:/opt/proxy/3proxy-0.8.12# cd ~/
root@debian9:~# whereis 3proxy
3proksi: /usr/local/bin/3proxy /usr/local/etc/3proxy
4.11. Mari buat folder untuk file konfigurasi dan log di direktori home pengguna
root@debian9:~# mkdir -p /home/joke/proxy/logs
4.12. Buka direktori tempat konfigurasi seharusnya berada
root@debian9:~# cd /home/joke/proxy/
4.13. Buat file kosong dan salin konfigurasi di sana
root@debian9:/home/joke/proxy# cat > 3proxy.conf
3proxy.confdaemon
file pid /home/joke/proxy/3proxy.pid
nserver 8.8.8.8
ncache 65536
penguji pengguna: CL:1234
batas waktu 1 5 30 60 180 1800 16 60
log /home/joke/proxy/logs/3proxy.log D
format log "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
putar 3
autentik kuat
menyiram
izinkan penguji
kaus kaki -p3128
proksi -p8080
Untuk menyimpan, tekan Ctrl + Z
4.14. Mari kita buat file pid agar tidak terjadi error saat startup.
root@debian9:/home/joke/proxy# cat > 3proxy.pid
Untuk menyimpan, tekan Ctrl + Z
4.15. Mari luncurkan server proxy!
root@debian9:/home/joke/proxy# 3proxy /home/joke/proxy/3proxy.conf
4.16. Mari kita lihat apakah server mendengarkan port
root@debian9:~/home/joke/proxy# netstat -nlp
log status bersihKoneksi Internet aktif (hanya server)
Proto Recv-Q Send-Q Alamat Lokal Alamat Asing Negara PID/Nama Program
tcp 0 0 0.0.0.0:8080 0.0.0.0:* DENGARKAN 504/3proxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* DENGARKAN 338/sshd
tcp 0 0 0.0.0.0:3128 0.0.0.0:* DENGARKAN 504/3proxy
tcp6 0 0 :::22 :::* DENGARKAN 338/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* 352/dhklien
Seperti yang tertulis di konfigurasi, proksi web kami mendengarkan port 8080, proksi Socks5 mendengarkan port 3128.
4.17. Untuk memulai layanan proxy secara otomatis setelah reboot, Anda perlu menambahkannya ke cron.
root@debian9:/home/joke/proxy# crontab -e
Tambahkan garis
@reboot /usr/local/bin/3proxy /home/joke/proxy/3proxy.conf
Kami menekan Enter, karena cron akan melihat karakter akhir baris, dan menyimpan file.
Seharusnya ada pesan tentang menginstal crontab baru.
crontab: menginstal crontab baru
4.18. Mari kita reboot sistem dan coba sambungkan melalui browser ke proxy. Untuk memeriksanya, kami menggunakan browser Firefox (untuk proxy web) dan add-on FoxyProxy untuk kaus kaki5 dengan otentikasi.
root@debian9:/home/joke/proxy# reboot
4.19. Setelah memeriksa pengoperasian proxy setelah reboot, Anda dapat melihat log. Ini menyelesaikan pengaturan server proxy.
3 log proksi1542573996.018 PROXY.8080 00000 penguji 192.168.23.10:50915 217.12.15.54:443 1193 6939 0 CONNECT_ads.yahoo.com:443_HTTP/1.1
1542574289.634 SOCK5.3128 00000 penguji 192.168.23.10:51193 54.192.13.69:443 0 0 0 CONNECT_normandy.cdn.mozilla.net:443
Menyiapkan dan menjalankan konfigurasi Transparent Proxy NAT
Dalam konfigurasi ini, semua perangkat di jaringan internal akan beroperasi secara transparan di Internet melalui server proxy jarak jauh. Benar-benar semua koneksi TCP akan dialihkan ke satu atau lebih (benar-benar memperluas lebar saluran, contoh konfigurasi No. 2!) server proxy. Layanan DNS akan menggunakan kemampuan 3proxy (dnspr). UDP tidak akan “keluar” karena kita belum menggunakan mekanisme penerusan (dinonaktifkan secara default di kernel Linux).
1. Saatnya mengaktifkan antarmuka enp0s8
root@debian9:~# nano /etc/network/interfaces
/etc/network/file antarmuka# File ini menjelaskan antarmuka jaringan yang tersedia pada sistem Anda
# Diaktifkan dan bagaimana Mereka. Untuk informasi lebih lanjut, lihat antarmuka (5).
sumber /etc/network/interfaces.d/*
# Antarmuka jaringan loopback
auto lo
iface lo inet loopback
# Antarmuka jaringan utama
izinkan-hotplug enp0s3
iface enp0s3 inet dhcp
# Antarmuka jaringan sekunder
izinkan-hotplug enp0s8
iface enp0s8 inet statis
alamat 192.168.201.254
netmask 255.255.255.0
Di sini kami menetapkan antarmuka enp0s8 alamat statis 192.168.201.254 dan topeng 255.255.255.0
Simpan konfigurasi Ctrl+X dan reboot
root@debian9:~# reboot
2. Memeriksa antarmuka
root@debian9:~# ifconfig
log ifconfigenp0s3: bendera=4163 mtu 1500
inet 192.168.23.11 netmask 255.255.255.0 siaran 192.168.23.255
inet6 fe80::a00:27ff:fec2:bae4 prefixlen 64 scopeid 0x20 ether 08:00:27:c2:ba:e4 txqueuelen 1000 (Ethernet)
Paket RX 61 byte 7873 (7.6 KiB)
Kesalahan RX 0 turun 0 melampaui 0 bingkai 0
Paket TX 65 byte 10917 (10.6 KiB)
Kesalahan TX 0 dijatuhkan 0 melampaui 0 pembawa 0 tabrakan 0
enp0s8: bendera=4163 mtu 1500
inet 192.168.201.254 netmask 255.255.255.0 siaran 192.168.201.255
inet6 fe80::a00:27ff:fe79:a7e3 prefixlen 64 scopeid 0x20 ether 08:00:27:79:a7:e3 txqueuelen 1000 (Ethernet)
Paket RX 0 byte 0 (0.0 B)
Kesalahan RX 0 turun 0 melampaui 0 bingkai 0
Paket TX 8 byte 648 (648.0 B)
Kesalahan TX 0 dijatuhkan 0 melampaui 0 pembawa 0 tabrakan 0
lihat: bendera=73 mtu 65536
inet 127.0.0.1 masker jaring 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1 (Loopback Lokal)
Paket RX 0 byte 0 (0.0 B)
Kesalahan RX 0 turun 0 melampaui 0 bingkai 0
Paket TX 0 byte 0 (0.0 B)
Kesalahan TX 0 dijatuhkan 0 melampaui 0 pembawa 0 tabrakan 0
3. Semuanya berhasil, sekarang Anda perlu mengkonfigurasi 3proxy untuk proxy transparan.
root@debian9:~# cd /home/joke/proxy/
root@debian9:/home/joke/proxy# cat > 3proxytransp.conf
Contoh konfigurasi server proxy transparan No.1daemon
file pid /home/joke/proxy/3proxy.pid
nserver 8.8.8.8
ncache 65536
batas waktu 1 5 30 60 180 1800 16 60
log /home/joke/proxy/logs/3proxy.log D
format log "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
putar 3
menyiram
auth hanya
dnspr
mengizinkan *
induk 1000 kaus kaki5 IP_ADDRESS OF EXTERNAL_PROXY 3128 penguji 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. Sekarang kita luncurkan 3proxy dengan konfigurasi baru
root@debian9:/home/joke/proxy# /usr/local/bin/3proxy /home/joke/proxy/3proxytransp.conf
5. Tambahkan ke crontab lagi
root@debian9:/home/joke/proxy# crontab -e
@reboot /usr/local/bin/3proxy /home/joke/proxy/3proxytransp.conf
6. Mari kita lihat apa yang sedang didengarkan proxy kita sekarang
root@debian9:~# netstat -nlp
log status bersihKoneksi Internet aktif (hanya server)
Proto Recv-Q Send-Q Alamat Lokal Alamat Asing Negara PID/Nama Program
tcp 0 0 0.0.0.0:22 0.0.0.0:* DENGARKAN 349/sshd
tcp 0 0 0.0.0.0:888 0.0.0.0:* DENGARKAN 354/3proxy
tcp6 0 0 :::22 :::* DENGARKAN 349/sshd
udp 0 0 0.0.0.0:53 0.0.0.0:* 354/3proksi
udp 0 0 0.0.0.0:68 0.0.0.0:* 367/dhklien
7. Sekarang proxy siap menerima koneksi TCP apa pun di port 888, DNS di port 53, sehingga selanjutnya dapat dialihkan ke proxy remote sock5 dan DNS Google 8.8.8.8. Yang harus kita lakukan adalah mengkonfigurasi aturan netfilter (iptables) dan DHCP untuk mengeluarkan alamat.
8. Instal paket iptables-persistent dan dhcpd
root@debian9:~# apt-get install iptables-persistent isc-dhcp-server
9. Edit file startup dhcpd
root@debian9:~# nano /etc/dhcp/dhcpd.conf
dhcpd.conf#dhcpd.conf
#
# Contoh file konfigurasi untuk ISC dhcpd
#
# definisi opsi yang umum untuk semua jaringan yang didukung…
opsi nama domain "example.org";
opsi domain-nama-server ns1.example.org, ns2.example.org;
default-sewa-waktu 600;
max-sewa-waktu 7200;
gaya pembaruan ddns tidak ada;
# Jika server DHCP ini adalah server DHCP resmi untuk lokal
# network, arahan resmi tidak boleh dikomentari.
berwibawa;
# Konfigurasi yang sedikit berbeda untuk subnet internal.
subnet 192.168.201.0 penutup jaringan 255.255.255.0 {
kisaran 192.168.201.10 192.168.201.250;
opsi domain-nama-server 192.168.201.254;
router opsi 192.168.201.254;
opsi alamat-siaran 192.168.201.255;
default-sewa-waktu 600;
max-sewa-waktu 7200;
}
11. Reboot dan periksa layanan pada port 67
root@debian9:~# reboot
root@debian9:~# netstat -nlp
log status bersihKoneksi Internet aktif (hanya server)
Proto Recv-Q Send-Q Alamat Lokal Alamat Asing Negara PID/Nama Program
tcp 0 0 0.0.0.0:22 0.0.0.0:* DENGARKAN 389/sshd
tcp 0 0 0.0.0.0:888 0.0.0.0:* DENGARKAN 310/3proxy
tcp6 0 0 :::22 :::* DENGARKAN 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/3proksi
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/dhklien
udp6 0 0 :::31728 :::* 393/dhcpd
mentah 0 0 0.0.0.0:1 0.0.0.0:* 393/dhcpd
12. Yang tersisa hanyalah mengarahkan semua permintaan tcp ke port 888 dan menyimpan aturan di 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. Untuk memperluas bandwidth saluran, Anda dapat menggunakan beberapa server proxy sekaligus. Totalnya harus 1000. Koneksi baru dibuat dengan probabilitas 0.2, 0.2, 0.2, 0.2, 0,1, 0,1 ke server proxy yang ditentukan.
Catatan: jika kita memiliki proxy web, maka alih-alih kaus kaki5 kita perlu menulis koneksi, jika kaus kaki4, maka kaus kaki4 (socks4 TIDAK MENDUKUNG OTORISASI LOGIN/PASSWORD!)
Contoh konfigurasi server proxy transparan No.2daemon
file pid /home/joke/proxy/3proxy.pid
nserver 8.8.8.8
ncache 65536
makskon 500
batas waktu 1 5 30 60 180 1800 16 60
log /home/joke/proxy/logs/3proxy.log D
format log "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
putar 3
menyiram
auth hanya
dnspr
mengizinkan *
induk 200 kaus kaki5 IP_ADDRESS_EXTERNAL_PROXY#1 3128 penguji 1234
induk 200 kaus kaki5 IP_ADDRESS_EXTERNAL_PROXY#2 3128 penguji 1234
induk 200 kaus kaki5 IP_ADDRESS_EXTERNAL_PROXY#3 3128 penguji 1234
induk 200 kaus kaki5 IP_ADDRESS_EXTERNAL_PROXY#4 3128 penguji 1234
induk 100 kaus kaki5 IP_ADDRESS_EXTERNAL_PROXY#5 3128 penguji 1234
induk 100 kaus kaki5 IP_ADDRESS_EXTERNAL_PROXY#6 3128 penguji 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
Menyiapkan dan menjalankan konfigurasi NAT + Transparent Proxy
Dalam konfigurasi ini, kita akan menggunakan mekanisme NAT biasa dengan proksi selektif atau transparan penuh dari masing-masing alamat atau subnet. Pengguna jaringan internal akan bekerja dengan layanan/subnet tertentu tanpa menyadari bahwa mereka bekerja melalui proxy. Semua koneksi https berfungsi dengan baik, tidak ada sertifikat yang perlu dibuat/diganti.
Pertama, mari kita putuskan subnet/layanan mana yang ingin kita proksi. Mari kita asumsikan bahwa proxy eksternal berada di tempat layanan seperti pandora.com beroperasi. Sekarang tinggal menentukan subnet/alamatnya.
1.ping
root@debian9:~# ping pandora.com
PING pandora.com (208.85.40.20) 56(84) byte data.
2. Ketik BGP 208.85.40.20 ke Google
Pergi ke situs web
Terlihat subnet yang saya cari adalah AS40428 Pandora Media, Inc
Membuka awalan v4
Berikut adalah subnet yang diperlukan!
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. Untuk mengurangi jumlah subnet, Anda perlu melakukan agregasi. Kunjungi situsnya
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. Hapus aturan iptables
root@debian9:~# iptables -F
root@debian9:~# iptables -X
root@debian9:~# iptables -t nat -F
root@debian9:~# iptables -t nat -X
Aktifkan mekanisme penerusan dan 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
Untuk memastikan penerusan diaktifkan secara permanen setelah reboot, mari kita ubah file
root@debian9:~# nano /etc/sysctl.conf
Dan batalkan komentar pada baris tersebut
net.ipv4.ip_forward = 1
Ctrl+X untuk menyimpan file
5. Kami membungkus subnet pandora.com dalam 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. Mari kita menaati peraturan
root@debian9:~# iptables-save > /etc/iptables/rules.v4
Menyiapkan dan menjalankan Proxy Transparan melalui konfigurasi router
Dalam konfigurasi ini, server proxy transparan dapat berupa PC terpisah atau mesin virtual di belakang router rumah/perusahaan. Cukup dengan mendaftarkan rute statis pada router atau perangkat dan seluruh subnet akan menggunakan proxy tanpa memerlukan pengaturan tambahan apa pun.
PENTING! Gateway kita perlu menerima IP statis dari router, atau dikonfigurasikan menjadi statis itu sendiri.
1. Konfigurasikan alamat gateway statis (adaptor enp0s3)
root@debian9:~# nano /etc/network/interfaces
/etc/network/file antarmuka# File ini menjelaskan antarmuka jaringan yang tersedia pada sistem Anda
# Diaktifkan dan bagaimana Mereka. Untuk informasi lebih lanjut, lihat antarmuka (5).
sumber /etc/network/interfaces.d/*
# Antarmuka jaringan loopback
auto lo
iface lo inet loopback
# Antarmuka jaringan utama
izinkan-hotplug enp0s3
iface enp0s3 inet statis
alamat 192.168.23.2
netmask 255.255.255.0
192.168.23.254 gerbang
# Antarmuka jaringan sekunder
izinkan-hotplug enp0s8
iface enp0s8 inet statis
alamat 192.168.201.254
netmask 255.255.255.0
2. Izinkan perangkat dari subnet 192.168.23.0/24 menggunakan proksi
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. Mari kita menaati peraturan
root@debian9:~# iptables-save > /etc/iptables/rules.v4
4. Mari daftarkan subnet pada router
Daftar jaringan 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
Bahan/sumber daya yang digunakan
1. Situs resmi program 3proxy
2. Petunjuk instalasi 3proxy dari sumber
3. Cabang pengembangan 3proxy di GitHub
Sumber: www.habr.com