SSL Bump dan Cache HTTPS Dengan Webproxy IPFire

Pada tulisan-tulisan saya yang sebelumnya, saya mengangkat beberapa topik mengenai IPFire terutama enhancement untuk web proxy misalnya implementasi lusca / squid-2.7-STABLE9 di IPFire, caching dynamic content, dan sebagainya. Nah, kali ini saya coba mengangkat kembali topic web proxy IPFire terutama untuk implementasi fitur SSL bump dan caching HTTPS pada web proxy IPFire.

Latar belakang caching HTTPS di IPFire

Sebagaimana yang kita ketahui, bahwa bandwidth yang di tawarkan oleh ISP di Indonesia pada prinsipnya memiliki kecepatan akses yang rendah dan secara ekonomis, biaya untuk memiliki bandwidth pita lebar yang cepat sangat mahal.

Hal seperti ini, terkadang membuat kelimpungan bagi admin jaringan internet – baik yang berskala kecil seperti warnet / gamecenter sampai dengan yang berskala besar –  mengupayakan penghematan dan optimasi penggunaan bandwidth. Parahnya, belakangan ini penggunaan HTTPS terus berkembang dan menjadi populer. Situs-situs yang sering diakses seperti Facebook, Twitter dan sebagainya secara masif menggunakan HTTPS/SSL di laman web milik mereka.

Dengan kondisi yang demikian, maka caching “konten web biasa” seperti yang dapat dilakukan squid biasa menjadi tidak efektif, karena kemampuannya yang hanya dapat melakukan caching konten non-HTTPS.

Squidward Tentacles
Squidward Tentacles

Diskusi dimulai!

Dengan mempertimbangkan alasan tersebut, saya mencoba memberanikan diri menanyakan kepada developer IPFire untuk mengimplementasikan SSL bump / caching HTTPS dengan sempurna di IPFire, namun di tolak karena secara prinsip menjadi man-in-the-middle HTTPS adalah sebuah pelanggaran privasi dan terlarang di beberapa negara (baca diskusinya disini).

Para sahabat terus mendukung upaya ini, namun developer tetap menolaknya. Well, apa boleh buat.. untuk mengakomodasi keinginan dari kawan-kawan yang membutuhkan, akhirnya saya memutuskan untuk mem-build IPFire sendiri yang full support untuk cache HTTPS.

HTTPS Caching Dengan IPFire

Disclaimer dan warning!

Tutorial ini dibuat apa adanya (AS-IS), dan penulis nggak bertanggung jawab kalo ada error atau segala bentuk kerusakan. Penulis juga tidak bisa memastikan kinerja IPFire bisa seperti yang masbro harapkan, karena pada prinsipnya untuk mendapatkan kinerja terbaik sebuah sistem adalah membuat konfigurasinya sesuai dengan keperluan ditempat masbro masing-masing.

Jangan cuman copas, tapi copas-lah sambil mempelajari yang masbro copas. :)

Sebelum di implementasikan di mesin produksi, cobalah jalankan di mesin virtual dulu!

FYI, 

- Non-official BUILD. Gunakan dengan resiko masbro sendiri. 
- ISO ini menggunakan web proxy squid-3.4.7 (core update 81-dirty).
- Update core compatibility : update up to core 82 
- Man-in-the-middle HTTPS secara teknis MELANGGAR PRIVASI pengguna internet!*

* karena HTTPS dirancang untuk mengamankan akses ke laman internet yang dianggap riskan terhadap pencurian data,
misalnya situs internet banking, email, dan sebagainya.

Dengan mengikuti tutorial ini, ANDA setuju bahwa segala pelanggaran privasi tersebut adalah tanggung jawab ANDA pribadi.

Pada build ini saya menggunakan branch core update 81 dari git IPFire, diracik untuk menggunakan squid-3.4.7 (termasuk di dalamnya patch bug 3937 dan patch memory leak SSL). Build ini dapat di unduh pada alamat URL dibawah ini :

http://ipfire-mirror.linuxkita.net/ipfire-2.15.i586-full-core83.iso

Setelah fresh install dan IPFire telah terhubung dengan internet, JANGAN mengaktifkan web proxy! Ikuti langkah-langkah di bawah ini :

Pertama, download dan jalankan script autoconfig yang saya buat lewat SSH

wget http://ipfire-mirror.linuxkita.net/autocfg.sh ; bash autocfg.sh

Ikutilah petunjuk yang muncul di layar. Isi semua field yang diperlukan dengan baik dan benar.

Autoconfig SSL Bump
Autoconfig SSL Bump

Selanjutnya, lakukan sedikit modifikasi pada init script web proxy (sebelumnya jangan lupa buat backup nya dulu).

# cp /etc/init.d/squid /etc/init.d/squid.backup

Di dalam file etc/init.d/squid, temukan baris seperti ini :

iptables -t nat -A SQUID -i $1 -p tcp -d $LOCALIP --dport 80 -j RETURN

iptables -t nat -A SQUID -i $1 -p tcp --dport 80 -j REDIRECT --to-port "${TRANSPARENT_PORT}"

Kemudian tambahkan rule iptables yang baru, menjadi seperti ini :

iptables -t nat -A SQUID -i $1 -p tcp -d $LOCALIP --dport 80 -j RETURN
iptables -t nat -A SQUID -i $1 -p tcp -d $LOCALIP --dport 443 -j RETURN

iptables -t nat -A SQUID -i $1 -p tcp --dport 80 -j REDIRECT --to-port "${TRANSPARENT_PORT}"
iptables -t nat -A SQUID -i $1 -p tcp --dport 443 -j REDIRECT --to-port 3129

Setelah editing selesai, lakukan “SAVE” konfigurasi web proxy lewat web interface, periksa konfigurasi proxy dengan menggunakan “squid -k parse” dan pastikan tidak ada ERROR pada konfigurasi.

Jika tidak ada error, silakan lanjutkan dengan mengakses halaman web interface > Web proxy, klik “SAVE and RESTART”. Cek kembali di halaman web interface > IPTables, dibagian “iptable network address translation”, klik “SQUID” > Update, jika NAT sudah benar akan terlihat “tcp dpt:443 redir ports 3129”, seperti pada gambar berikut ini:

Langkah selanjutnya adalah, pengaturan disisi klien.

Perlu dicatat, bahwa sobat WAJIB mengimport sertifikat SSL secara manual ke browser klien. Kalo tidak, maka dapat dipastikan klien akan error saat browsing ke situs-situs HTTPS. :)

Silakan download sertifikat untuk selanjutnya di import ke browser klien. URL download adalah :

http://<ip-green-ipfire>:81/client.crt

Saya menggunakan Firefox versi paling anyar, dan langsung di tanyakan apakah akan mengimpor sertifikat tersebut. Jika di tempat masbro juga demikian, silakan klik semua “Trust” kemudian klik “OK”.

Import sertifikat SSL
Import sertifikat SSL

Semua selesai… silakan isi cache web proxy / browsing-browsing santai, dan perhatikan log-nya dengan menggunakan tail. Hasilnya akan nampak seperti ini :

HTTPS cache HIT
HTTPS cache HIT

FAQ’s

### FAQ's alias tanya jawab nggak penting ###

Tanya : Bisa nggak buat hotspot / RTRW?
Jawab : Nggak bisa... kecuali masbro bisa import sertifikatnya ke semua browser di perangkat mobile. :D

Tanya : Ah... masa sih nggak bisa nggak buat hotspot / RTRW, yang bener mas?
Jawab : Kalo perangkatnya NGGAK mobile, sepertinya masih bisa sih (misalnya RTRW tapi ada warnet/gamecenternya, SSL bisa di bump dari sini).

Tanya : Error massss... error disini, error disana... dll...
Jawab : Silakan post di grup (beserta screenshot) jadi bisa di bahas bersama.

Tanya : Masih error, anjir banget nih.. mana nggak ada yg mau nolong.. mas mau nolong saya nggak sih?
Jawab : Ini proyek komunitas, jadi jangan mengharap pertolongan instan... #mikir

Tanya : Sukses mas... trims, semoga tambah ganteng. 
Jawab : Sama-sama masbro... semoga mas juga tambah ganteng (dan "tahan lama"). :D

Tanya : Ane mau donasi.. trx kemana yak?
Jawab : Bagus... silakan donate ke proyek IPFire di http://www.ipfire.org/donate - atau sumbangkan langsung ke mereka yang membutuhkan.

### End of FAQ ###

Credits dan info lainnya

### Credits ###

~ Developer IPFire @ ipfire.org
~ StoreID @ Chuddy F., Eliezer C., Syaifuddin Jw, Ces Pun, dll 
~ Build machine @ Harry DS / ISP Remala (trims untuk pinjeman mesin dan bandwidthnya)
~ Seluruh sahabat di grup IPFire Indonesia @ https://www.facebook.com/groups/ipfire.id/

### End of Credits ###

Pertanyaan atau bantuan? Silakan lempar ke grup atau forum... maaf tidak menerima via PM. 
Akan di update kalo diperlukan dan kalo saya ada waktu... 
Brought to you by fazar.net ~ yes, we still alive and owning!

### End of file ###

Demikian tutorial SSL bump dan cache HTTPS dengan web proxy IPFire ini saya tulis, dan semoga bermanfaat.

~ Copaser must die! ;) ~

93 Comments

  1. ini access.log squid mas, yg dikotak merupakan koneksi dari BBM,,, http://i.imgbox.com/PgJFArzD.png

    • fazar

      coba dibikinkan address list untuk ip tujuan bbm nya, kemudian nat port 443 nya tambahkan ! address list bbm tsb.

      • dibuat di mana mas, hehehe, mklum masih tahap belajar juga…

        • fazar

          misalnya kalo mas Ical pake NAT

          /ip firewall address-list add list=bbm address=114.121.194.0/24

          /ip firewall nat add action=dst-nat chain=dstnat comment="Proxy HTTPS" \
          dst-port=443 protocol=tcp dst-address-list=!bbm to-addresses=192.168.1.1 to-ports=3129

          • sip mas,,,paham2, saya kira dibuat di ipfire, ternyata di mikrotik,,,,hehehe

  2. sya pake yang mas punya,,,, ni yang muncul saat diparse
    https://fbcdn-photos-e-a.akamaihd.net/hphotos-ak-xfa1/v/t1.0-0/10437688_704151029704011_476373920292560358_n.jpg?efg=eyJpIjoiYiJ9&oh=42038d4f2e32ef4166e5b1277f2a95a4&oe=552F49FC&__gda__=1432670636_6216c901b0e470f0365c617b055f7bca

    • fazar

      screenshotnya nggak bisa saya buka mas.. coba up ke imgbox.com aja. :)

      • sdh jalan proxynya mas, hehehe, yg jadi masalah BBM di android, gak bisa konek mas, hrs di nonaktifkan dlu nat yang di squid,yang port 443 diarahkan ke port 3129, hrs didisable , bru konek BBMnya, klo situs https lain sperti fb, google,bisa kebuka pake chrome, playstore jga bisa, BBM nya aja yg gak bisa,,,

  3. salam mas, saya coba2 pake ini, tpi pas mau dijalankan proxynya tidak bisa,, cek konfig squid, ternyata ada yang eror, store_mise hit_mis yang tag utk mikrotik gitu,,,, dan di refresh_pattern juga ada yang unreconige seperti ignore-no-store , must-revalidate,
    apa gak apa2 mas sy hilangkan opsi itu,,,,

    • fazar

      apa mas pake distro selain ipfire? atau pake ipfire yg resmi? karena tutorial ini hanya berlaku untuk ipfire yang udah saya custom. link download nya ada di post ini juga.

  4. welding

    Bang, tuk install udah lancar jaya semua, cmn permasalahan ada salah satu kompi pas kita masukin sertifikat tetep error mlulu, untrusted terus meski kita instal pake firefox yg baru juga

  5. Tahoo

    Ass

    numpang tanya gan, pas ane cb iptable network address translation di webif, klik squid terus update gak ada tulisan apa di bagian bawah nya, padahal semua sudah sesuai sesuai tutor
    iptables -t nat -A SQUID -i $1 -p tcp -d $LOCALIP –dport 80 -j RETURN
    iptables -t nat -A SQUID -i $1 -p tcp -d $LOCALIP –dport 443 -j RETURN
    dan
    iptables -t nat -A SQUID -i $1 -p tcp –dport 80 -j REDIRECT –to-port”${TRANSPARENT_PORT}”
    iptables -t nat -A SQUID -i $1 -p tcp –dport 443 -j REDIRECT –to-port 3129

    mohon pencerahan nya,
    tq

    • fazar

      enable webproxy, enable transparent, lalu restart. cek kembali nat nya.

  6. StarGeneral

    Hey there, thank you very much for your tutorial. I found it very helpful and it is working flawlessly.

    While going trough I think there is a little error in your code, probably the text format was lost during copy-paste?

    You mention this line of code above:
    iptables -t nat -A SQUID -i -p tcp –dport $ 1 -j REDIRECT –to-443-Port 3129

    I think it should be “–to-Port 443”. Otherwise it was not working for me.

    Nevertheless, thank you so much for posting this. This is the only working solution to get SSL Bump up and running without large effort at the moment.

    • fazar

      firstly, thank you for your kind feedback. :)
      in order to properly bump (and proxifying) https connection, we need to transparently redirect access from port 443 to 3129 (you can change it if its necessary by editing /etc/squid/squid.conf.pre.local). easiest way to do this is using iptables NAT.

      you need to manually edit /etc/init.d/squid

      find this line :

      iptables -t nat -A SQUID -i $1 -p tcp -d $LOCALIP --dport 80 -j RETURN

      then create another rules, so it look like this :

      iptables -t nat -A SQUID -i $1 -p tcp -d $LOCALIP --dport 80 -j RETURN
      iptables -t nat -A SQUID -i $1 -p tcp -d $LOCALIP --dport 443 -j RETURN

      next, find this line:

      iptables -t nat -A SQUID -i $1 -p tcp --dport 80 -j REDIRECT --to-port "${TRANSPARENT_PORT}"

      and add new rule, so it look like this:

      iptables -t nat -A SQUID -i $1 -p tcp --dport 80 -j REDIRECT --to-port "${TRANSPARENT_PORT}"
      iptables -t nat -A SQUID -i $1 -p tcp --dport 443 -j REDIRECT --to-port 3129

      save it and finally, restart squid service: /etc/init.d/squid restart

  7. Assalamu Alaikum Mas Fazar salam kenal. Super sekali mas hasil cache ipfire tutorialmu,, ckckckck.. hebat! mantap! saya coba ini malam download ipfire dari link yg Mas Fazar berikan, instal di kompi bekas proxy terdahulu yg pake os pf****e, ikut tutorial berikutnya yg mengenai script autoconfig, test di mikrotik tanpa merubah config yaitu tetap memakai dscp tos 12 di mangle, menggunakan 2 buah ethernet wan dan lan di proxy dan hasilnya wuiihhhh!!! puas saya mas, makasih berat! https tercache, youtube yang di proxy dulunya terpotong-potong di 52 detik menjadi tercache full, lancar sampai 19Mbps lebih (soalnya cache saya limit sampai 20Mbps saja) padahal ini juga saya belum utak atik konfigurasi squidnya, masih asli bawaan tutorialnya Mas Fazar :) youtubenya juga masih berjalan setengah yaitu sekitar 3 menit lebih tapi cachenya sudah masuk waktu saya test :)
    Sekian dulu laporannya Mas, ini mau coba2 dulu lagi, mau kaget2 dulu :) Mas tidak ada yg bisa saya balas mas, hanya saya doakan saja Mas agar selalu sehat, rezeki lancar, keluarga bahagia, dan senantiasa dalam lindungan Tuhan YME di dunia dan akhirat, amiiin!

    • fazar

      Wa’alaikum salam, senang rasanya kalo posting saya bisa bermanfaat. Semoga mas dan keluarga juga selalu dalam keadaan sehat. Sukses selalu buat mas. :)

  8. obiwan

    Assalamualaikum, mas Fajar… Iam back :))
    Mas, bikin tulisan tentang bikin tproxy+mangle mikrotiknya di ipfire dong. Sepertinya belum ada deh yg menjelaskan secara lengkap. Biar kami2 ini dapat belajar, hehe…

    Sukses selalu buat mas Fajar.
    Salam.

    • fazar

      wassalamualaikum, welcome back mas :)
      monggo join grup mas.. http://www.facebook.com/groups/ipfire.id/
      karena pembahasan tproxy untuk ipfire ini panjang lebar kalo di jelaskan disini. :)

      • obiwan

        Siap! Menuju TKP :)
        Makasih, mas.

  9. zed

    mas, udah ngikutin ni petunjuknya kalo diset prerouting di firewall mangle nya browsing jalan tapi gak tercache sama sekali nah saya mau coba pake transparent dengan dstnat mikrotik malah ga jalan sama sekali mas padahal aclnya udah diset juga

  10. zed

    wah di delete ya ga bisa belajar ni maaf ya

Leave a Reply

Your email address will not be published. Required fields are marked *