Quick Squid – Proxy server

19Jun - by zky - 0 - In Guide Networking

Berikut guide singkat untuk installasi dan setup Squid Proxy server untuk melakukan blacklisting/whitelisting domain dan port. Tutorial ini dapat digunakan untuk beberapa distribusi Linux seperti Ubuntu, atau Raspberry OS. Disini saya contohkan dengan Debian raspberry OS dan juga Ubuntu 22.04 server.

Tujuan saya menulis guide ini adalah … supaya ga lupa hahaha~

Installasi

sudo apt update
sudo apt install squid

Perintah pertama untuk melakukan update repository, perintah kedua adalah perintah untuk melakukan install package Squid.

Setelah selesai, pastikan service berjalan

sudo systemctl enable squid
sudo systemctl start squid
sudo systemctl status squid

Apabila semua berjalan lancar, status akan menunjukan status “Active (running)”

[email protected]:/home/pi# sudo systemctl status squid
● squid.service - Squid Web Proxy Server
     Loaded: loaded (/lib/systemd/system/squid.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-06-19 05:09:25 BST; 20min ago
       Docs: man:squid(8)
    Process: 383 ExecStartPre=/usr/sbin/squid --foreground -z (code=exited, status=0/SUCCESS)
   Main PID: 401 (squid)
      Tasks: 4 (limit: 1598)
        CPU: 24.360s
     CGroup: /system.slice/squid.service
             ├─401 /usr/sbin/squid --foreground -sYC
             ├─403 (squid-1) --kid squid-1 --foreground -sYC
             ├─404 (logfile-daemon) /var/log/squid/access.log
             └─405 (pinger)

Jun 19 05:09:25 raspberrypi squid[403]: Using Least Load store dir selection
Jun 19 05:09:25 raspberrypi squid[403]: Set Current Directory to /var/spool/squid
Jun 19 05:09:25 raspberrypi squid[403]: Finished loading MIME types and icons.
Jun 19 05:09:25 raspberrypi squid[403]: HTCP Disabled.
Jun 19 05:09:25 raspberrypi squid[403]: Pinger socket opened on FD 14
Jun 19 05:09:25 raspberrypi squid[403]: Squid plugin modules loaded: 0
Jun 19 05:09:25 raspberrypi squid[403]: Adaptation support is off.
Jun 19 05:09:25 raspberrypi squid[403]: Accepting HTTP Socket connections at local=[::]:3128 remote=[::] FD 12 flags=9
Jun 19 05:09:25 raspberrypi systemd[1]: Started Squid Web Proxy Server.
Jun 19 05:09:26 raspberrypi squid[403]: storeLateRelease: released 0 objects

Persiapan

Sekarang kita bagi menjadi dua skenario, pertama adalah saat Squid digunakan untuk melakukan blacklist, kedua saat digunakan sebagai whitelist.

Contoh penggunaan blacklist adalah saat pengguna network dapat mengakses lebih banyak website daripada yang tidak diperbolehkan(contohnya dalam penggunaan rumahan untuk melakukan blokir pada domain-domain nakal, judi, atau situs-situs aneh lainnya).

Sedangkan penggunaan whitelist lebih ditujukan ketika sebuah network sangat di batasi tujuannya, contohnya lingkungan server yang hanya memperbolehkan servernya mengakses domain tempat update OS berada atau end-point API tertentu saja.

Untuk melakukan blacklisting atau whitelisting sebenarnya dapat ditulis pada file konfigurasi utama Squid yang berada pada

/etc/squid/squid.conf

Tetapi file tersebut adalah config yang sangat penuh sekali dengan dokumentasi(isinya sekitar 8.000 baris), sehingga akan lebih bijak apabila daftar website dan rules-nya dipisahkan saja ke file lain.

Dalam kasus ini kita akan buat dua buah file:

sudo mkdir /etc/squid/override/ -p
sudo touch /etc/squid/override/rules.conf
sudo touch /etc/squid/override/domain-list.txt

Perintah:

  1. Kita buat folder baru bernama “override” pada folder konfigurasi Squid
  2. Kita buat config file untuk menampung aturan-aturan(kita isi pada step berikutnya)
  3. Kita buat list domain yang kita akan gunakan untuk melakukan whitelist atau blacklist

Edit site-list.txt dengan menggunakan vim/nano (terserah selera)

Aturan pembuatan list domain adalah:

  1. Masukan 1 domain per baris
  2. Apabila hendak memasukan sebuah domain beserta dengan seluruh sub-domain di bawahnya, awali dengan “.” (titik)
    contoh:
    • google.com (hanya ber-efek kepada google.com, sedangkan sub domain seperti mail.google.com, atau calendar.google.com tidak masuk)
    • .google.com (diawali oleh titik maka semua domain baik google.com ataupun di bawahnya akan termasuk).
Contoh blacklisting domain

Blacklisting

Untuk melakukan blacklisting, kita buka file override/rules.conf dan isi dengan konfigurasi berikut:

acl list_domain dstdomain '/etc/squid/override/domain-list.txt'
http_access deny list_domain
http_access allow all

Keterangan:

  1. Baris pertama, include file domain list dan beri alias “list_domain” dengan mode “dstdomain” atau destination domain(sesuaikan nama file dan path apabila dibuat dengan nama atau tempat berbeda).
  2. Baris kedua, meminta Squid untuk memblokir http/s access ke domain yang berada dalam list yang di deklarasikan pada baris pertama
  3. Baris ketiga, apabila domain yang dituju tidak terdaftar/lolos filtering pada baris kedua, maka squid harus memperbolehkan traffic ke alamat tersebut.

Whitelisting

Untuk melakukan blacklisting, kita buka file override/rules.conf dan isi dengan konfigurasi berikut:

acl list_domain dstdomain '/etc/squid/override/domain-list.txt'
http_access allow list_domain
http_access deny all

Keterangan:

  1. Baris pertama, include file domain list dan beri alias “list_domain” dengan mode “dstdomain” atau destination domain(sesuaikan nama file dan path apabila dibuat dengan nama atau tempat berbeda).
  2. Baris kedua, meminta Squid untuk mengijinkan akses http/s access ke domain yang berada dalam list yang di deklarasikan pada baris pertama
  3. Baris ketiga, apabila domain yang dituju tidak terdaftar/lolos filtering pada baris kedua, maka squid harus memblokir traffic ke alamat tersebut

Applying rules

Simpan file tersebut, kemudian buka file konfigurasi utama dari Squid (/etc/squid/squid.conf) kemudian cari line:

include /etc/squid/conf.d/*

Kemudian tambahkan line di bawahnya(sesuaikan path apabila tempat dan nama file berbeda)

include /etc/squid/override/rules.conf

Kemudian komen line berikut apabile belum terkomen(dengan menambahkan tanda # di awal baris)

http_access allow localnet

Terakhir komen juga baris berikut(karena kita sudah memindahkan perannya pada rules.conf di atas.

http_access deny all

Jalankan perintah berikut untuk melakukan testing semua konfigurasi, tentunya apabila semua konfigurasi telah benar, tidak akan menampilkan pesan apapun.

squid -k reconfigure

Troubleshooting

Error yang biasa terjadi selain salah path(yaaaaaa biasa lah hahaha) adalah squid tidak bisa membaca konfigurasi file yang kita buat. Wajar karena kita buat dengan user kita masing-masing/root sedangkan Squid berjalan menggunakan user dan group “proxy”).
Untuk memperbaikinya jalankan perintah chown,

sudo chown -R proxy:proxy /etc/squid/override/

perintah di atas akan mengubah ownership semua file yang kita buat menjadi sama dengan yang digunakan Squid.

Terakhir, lakukan restart service squid

sudo systemctl restart squid

Restarting Squid akan memekan waktu beberapa saat. Selain menggunakan mode restart, bisa juga menggunakan mode “Reload” hanya saja entah kenapa apabila menggunakan reload, sering kali konfigurasi tidak langsung berjalan pada client browser(walau kalau kita check dengan curl, statusnya telah 403 atau forbidden).

Testing

Untuk testing(saya contohkan di Windows) sebaiknya menggunakan browser yang dapat menggunakan proxy diluar dari system proxy, sehingga kalau ada yang tidak beres, tidak perlu cabut-pasang setting proxy-nya. Contoh browser yang dapat digunakan seperti ini adalah Mozilla Firefox.

Pilih settings
Ketik proxy pada search box kanan atas untuk mempermudah kemudian klik “Settings…” pada bagian Network Settings
Pilih “Manual proxy configuration” lalu isi isian HTTP proxy dengan IP Address dimana Squid berada, masukan portnya juga 3128(default Squid)

Setelah itu klik OK dan coba masukan alamat situs yang Anda blokir atau Blacklist:

Contoh ketika saya melakukan blokir terhadap service ads Google.

Apabila setting sudah benar, seharusnya browser akan menampilkan hasil sesuai dengan yang terdapat pada setting(Contoh di atas adalah contoh dalam melakukan blacklist).

Maintenence

Langkah selanjutnya, Anda dapat memperkaya daftar domain blacklist/white list atau lebih baik Anda memisahkan list di file-file terpisah apabila Anda memiliki pengkategorian yang mungkin dapat mempermudah manajemen.

Yang terpenting adalah setelah melakukan perubahan, jangan lupa lakukan “restart service“, dan apabila terjadi error, gunakan perintah “reconfigure” untuk melakukan checking terhadap configurasi file yang diubah.

Ports

Secara default, Squid hanya memperbolehkan port-port umum seperti berikut

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http

Secara best practice security sebaiknya Anda hanya memasukan port-port yang Anda kenal saja untuk menghindari kejadian-kejadian yang tidak diinginkan. Apabila menggunakan port lain, tambahkan pada list di atas(pada file /etc/squid/squid.conf)

Logs

Log dapat dilihat pada path

 /var/log/squid/access.log

Gunakan perintah “tail” untuk melihat line-line terakhir dari log, atau tambahkan option -f untuk melkihatnya secara live.

Contoh diatas dimana saya mencontohkan saya membuka web dan ads domain di blokir, tetapi beberap atraffict penting lainnya diijinkan lewat.

Afterwords…

Guide ini adalah guide basic yang dapat digunakan untuk melakukan blacklist atau whitelisting, banyak konfigurasi lainnya seperti ssl_bump dan lain-lain.

Dan kalau dilihat dari pendekatan cara memblokir dari Squid saya nilai lebih baik ketimbang blokir dengan jalan menghalangi resolving DNS(seperti blokiran yang ada di Internet positif) yang mana dapat diakali dengan menggunakan DNS resolver lain(masih banyak yang free atau diakali lagi juga dengan free contohnya dengan mengkombinasikan piHole dan juga cloudflared), sedangkan apabila trafik diblok dengan menggunakan Squid, satu-satunya cara menggunakan VPN, dan VPN yang bagus, tidaklah murah. Selain itu apabila kasusnya untuk whitelisting, setup listnya tidak akan terlalu merepotkan(DNS whitelist pada beberapa domain yang memiliki ‘recursive DNS’ apalagi yang sampai ‘dinamis’ kita harus memasukan setiap record domainnya).

Tetapi untuk kasus lainnya, misalnya untuk filtering trafik yang non HTTP, ada baiknya Squid ini digabungkan dengan DNS Filtering, karena sepertinya Squid lebih khusus untuk filtering protokol dengan jenis HTTP & HTTPS saja, untuk jenis lainnya sepertinya kurang lengkap opsinya.

Leave a Reply

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