Monday, May 18, 2009

Gateway Ubuntu dengan firewall, transparent-proxy, dan filtering (part1)

Tulisan ini adalah lanjutan tulisan sebelumnya: Gateway ubuntu 8.10.

Dalam tutorial kali ini kita akan mencoba membuat sebuah gateway di ubuntu 8.10 yang memiliki custom firewall. Gateway kita juga berfungsi sebagai transparent proxy yang dapat melakukan content filtering.

Prekondisi: Ubuntu-box Anda telah terkonfigurasi sebagai Router sesuai tulisan sebelumnya, walaupun tanpa pengamanan apapun.

Perlu diingat! Dalam contoh ini, penulis menggunakan:

internal interface: eth0
internal IP: 192.168.0.1
internal network: 192.168.0.0/24

internet interface: eth1
internet IP: 192.168.1.2

Seperti biasa, berdoa sebelum mulai.

1. Install Squid
Squid yang tersedia di repository adalah Squid 2.7 Stable3, bukan yang paling baru, tetapi ini yang saya gunakan. Untuk mendapatkan Squid terbaru, Anda perlu mendownload tarball dari situs squid-cache.org dan melakukan kompilasi manual.

Untuk melakukan instalasi otomatis dari repository, ketikkan perintah ini di terminal:

sudo get-apt install squid

2. Konfigurasi Squid
[PENTING!] Backup file asli squid.

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.backup

Buka file konfigurasi Squid dengan gedit, atau editor lain favorit Anda.

sudo gedit /etc/squid/squid.conf

Anda bisa menghapus semua isi file ini kemudian menggantinya dengan konfigurasi Anda:

Pertama, atur squid agar menjadi transparent proxy. Atur squid agar mendengar request hanya dari internal network.


# transparent proxy, internal only
http_port 192.168.0.1:8888 transparent
http_port 127.0.0.1:8888 transparent


Tentukan lokasi menyimpan log dan error. Besar log file squid sangat bergantung terhadap web traffic jaringan Anda. Karena itu Anda mungkin perlu membuat cron job untuk mengganti logfile squid secara berkala (akan dijelaskan nanti). Direktif 'logfile_rotate' mengatur jumlah logfile yang perlu dipertahankan sebelum squid menghapus file lama.


# log & error
access_log /var/log/squid/access.log squid
error_directory /usr/share/squid/errors
logfile_rotate 7


Squid dapat berfungsi sebagai web cache. Untuk dapat mengakses cache, squid perlu berjalan sebagai user tertentu yang mendapatkan izin akses. Dalam contoh ini, penulis menggunakan user 'squid'. User tersebut harus telah dibuat terlebih dahulu (cara membuat user akan dijelaskan nanti).


cache_effective_user squid
cache_effective_group squid
cache_dir ufs /var/spool/squid 100 16 256


Perlu diingat bahwa squid harus memiliki izin untuk mengakses semua direktori dan file yang akan diperlukan, seperti lokasi log dan error, direktori konfigurasi, dan cache. Anda mungkin perlu melakukan chown kepada lokasi tersebut.

Berikutnya mengatur nama cache manager yang bertanggung jawab mengatur squid dan visible hostname untuk squid server.


cache_mgr youremail@domain.com
visible_hostname gatewayku


Bagian acl dan http_access (berikutnya) adalah bagian yang paling penting yang menentukan user mana bisa mengakses apa. Kesalahan di bagian ini dapat mengakibatkan user Anda tidak dapat mengakses web sama sekali.


# acl source, spesifikasikan asal koneksi
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl localnet src 192.168.0.0/24

# acl time
acl workhours time M T W H F 08:30-17:00


Untuk memblok beberapa domain, Anda dapat menuliskannya dalam sebuah file tersendiri, dengan setiap baris untuk sebuah domain atau url. Pada contoh ini file yang digunakan adalah "/etc/squid/denied_domains.acl" dan "/etc/squid/denied_ads.acl".


# acl else
acl denied_domains dstdomain "/etc/squid/denied_domains.acl"
acl denied_ads url_regex "/etc/squid/denied_ads.acl"


Inilah bagian yang benar-benar menetukan siapa dapat mengakses apa. Model logika http_access mungkin mirip dengan logika 'iptables'. Squid akan melakukan pencocokan request dimulai dari rule http_access yang paling atas, terus hingga menemukan rule yang cocok atau hingga rule terakhir.


# http_access
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access allow localhost
http_access allow admin
http_access deny denied_ads
http_access deny workhours denied_domains
http_access allow localnet
http_access deny all


,,bersambung,,

No comments:

Post a Comment