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. zed

    topologi nya untuk proxy melalui rb750 ya mas bukan modem

  2. zed

    Salam Mas dari newbie ipfire.

    saya sudah coba berulang kali ngikutin petunjuk untuk install ipfire single interface + mikrotik

    topologi saya

    local 192.168.1.0/28
    proxy 192.168.2.0/30
    public 192.168.10.0/29
    using rb750 + ipfire 2.15 core85(bahaya.kebiasaan.ml)

    topologi

    192.168.10.1 192.168.1.1 192.168.1.1-192.168.1.12
    internet ————–rb750—————-client
    |
    ipfire
    192.168.2.2

    betulin ya mas kalo ada salah maklum pemula.

    nah masalah setelah selesai pas mau browsing keluar invalid request. mohon bantuannya

    • fazar

      coba periksa kembali bagian nat/mangle pada mikrotik nya.. mungkin ada terlewat atau harus di koreksi.
      dan untuk IPFire jangan lupas set 192.168.1.0/24 di allowed subnet (web interface > network > webproxy)

  3. obiwan

    Mas fajar, ketika sampe proses “wget http://bahaya.kebiasaan.ml/autocfg.sh ; bash autocfg.sh” kok muncul error gini ya: http://postimg.org/image/ryc0btx0p/

    Gimana tuh mas? :(

    • fazar

      iso nya download yg mana mas? coba download yang core 85.
      http://bahaya.kebiasaan.ml/ipfire-2.15.i586-full-core85.iso

  4. zed

    keluar error: ‘sslcrtd_program’ requires –enable-ssl-crtd ga bisa browsing mohon bantuannya mas

    • fazar

      download iso installernya di http://bahaya.kebiasaan.ml/ :)

  5. wins

    sudah berhasil dengan racikan agan, tp gmail error yaa gan..

    ssnya gan

    http://postimg.org/image/73bkeo9dz/
    http://s23.postimg.org/u4s5kf91m/IMG_20141027_223637_HDR.jpg

    • fazar

      coba klik di technical detail nya, kemudian upload lagi fotonya. saya perlu informasi di bagian technical detail.

      • wins

        gan, yg di ss itu saya sudah klik technical detailnya gan..
        ini isinya gan..

        www.gmail.com uses an invalid security certificate.
        The certificate is only valid for mail.google.com
        (Error code: ssl_error_bad_cert_domain)

      • wins

        gan, yg di ss itu saya sudah klik technical detailnya gan..
        ini isinya gan..

        “www.gmail.com uses an invalid security certificate.
        The certificate is only valid for mail.google.com
        (Error code: ssl_error_bad_cert_domain)”

        • fazar

          coba di disable aja untuk gmail. contoh config nya :

          ## Disable ssl interception for dropbox.com and hotmail.com (and localhost)
          acl no_ssl_interception dstdomain .dropbox.com .hotmail.com
          ssl_bump none localhost
          ssl_bump none no_ssl_interception

          • wins

            gak berhasil jg gan.. tetap spti yg lama jg gan..
            ada solusi gan..

          • fazar

            coba re-import sertifikat ssl nya mas.. caranya, hapus dulu certificate yang lama, kemudian download dan instal ulang certificate nya seperti panduan pada post diatas.

  6. achmad faishol

    ie n chrome tetap gak bisa import certificate nya

    • fazar

      bisa kok mas.. caranya rada beda dengan firefox. coba cek di bagian certificate nya. :)

  7. Deny Afrizan

    oooo Soalnya firefox baru banget saya update… mungkin versi firefox nya … cocoknya di versi berapa ya ?

    • fazar

      coba versi 29 atau 30.

  8. Deny Afrizan

    Mas fazar,
    Saya https cache sudah berjalan. google yahoo dll sudah bisa di cache https. Tetapi https://www.facebook.com masih Secure Connection Failed . katanya bermasalah di Certificate Keyerror code : sec_error_inadequate_key_usage . Mohon pencerahan. Thanks.

    • fazar

      ini berkenaan dengan key usage… coba reinstal dengan iso ini :
      http://bahaya.kebiasaan.ml/ipfire-2.15.i586-full-core81.iso
      update tanggal 06/09/2014 udah include patch remove key usage (ssl).

      • Deny Afrizan

        Saya sudah menggunakan core81-dirty. Dan tutorial juga sudah saya ikuti . Semua website https dapat di cache dengan baik. Hanya https://www.facebook.com saja yg tidak bisa. mohon petunjuk

        • fazar

          hmmm.. coba versi firefox nya di turunkan, ke versi 29 mas.

          • Deny Afrizan

            Sudah berhasil….saya install ulang saja. Tapi saya masih belum tau kendalanya dimana . Saya install ulang dengan cara yg sama. Dan berhasil. Thanks. Tinggal optimasi refresh pattern :)

  9. choi

    Thx tutornya mas broo….

    tapi setting los bandwidthnya di mikrotik gimana yaa ?? :D

    • fazar

      saya pake routeros 6.x, dan scriptnya seperti ini:

      /ip firewall mangle
      add action=mark-packet chain=forward comment="Local QoS Proxy HIT" dscp=12 new-packet-mark=proxy-hit
      /queue tree
      add disabled=yes name="Proxy HIT" packet-mark=proxy-hit parent=global queue=default

  10. jaka belanda

    download setifikatnya eror

    • fazar

      error not found atau gimana? coba download dengan menggunakan winscp / sejenisnya. sertifikat terdapat di direktori /srv/web/ipfire/html/ dengan nama client.crt

      • jaka belanda

        makasih gan dah ketemu

Leave a Reply

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