Rabu, 10 Desember 2008

Penerapan Otorisasi user pada squid via ldap group

By Henry Saptono

Jika Anda ingin menggunakan squid sebagai proxy server pada jaringan Anda, maka tidaklah sulit untuk menerapkan otorisasi user yakni pembatasan akses internet berdasarkan group. Squid banyak mendukung beberapa schema otentikasi dan otorisasi dengan backend database yang beragam diantaranya menggunakan ncsa, pam, ldap, samba dan lain-lain. Umumnya squid yang disertakan oleh berbagai distro sudah dilengkapi dengan berbagai modul otentikasi (authentication helper program) seperti ncsa_auth, pam_auth, smb_auth, squid_ldap_auth dan modul-modul otorisasi (authorization helper program) seperti squid_unix_group, dan squid_ldap_group.

Pada tulisan kali ini penulis akan menjelaskan bagaimana menerapkan otorisasi user pada squid melalui ldap group. Helper program yang digunakan adalah squid_ldap_auth dan squid_ldap_group. Pada tulisan ini penulis tidak akan menjelaskan secara detil tentang ldap. Penulis menggunakan openldap dan squid bawaan distro linux CentOS 5 yang diasumsikan sudah terinstal.

I. Skenario
Untuk mempermudah penjelasan maka penulis membuat skenario sebagai berikut:
- Komputer yang berperan sebagai proxy server dan ldap server adalah komputer gateway
- Komputer proxy/gateway memiliki dua interface network yaitu eth0 dan eth1, eth0 terhubung langsung dengan modem ADSL, dan eth1 terhubung ke jaringan lokal dengan ip 192.168.1.1 (gambar 1)
- Agar tidak ada user yang dapat mengakses internet(http) secara langsung maka pada gateway diterapkan kebijkan firewall yang memblok semua akses http (port 80) secara langsung dari LAN ke internet. Hal ini dimaksudkan agar user harus mengatur “connection setting” pada web client dengan setingan “manually use proxy”. Pada web client proxy diset ke IP 192.168.1.1 dan port 3128 (gambar 2).
- Skenario otentikasi, proxy hanya mengijinkan akses internet, dengan ketentuan harus login terlebih dahulu menggunakan user account yang terdaftar di ldap (openldap)
- Skenario group, group pada ldap terdiri dari group vip dan internet
- Skenario otorisasi, proxy memblok koneksi atau akses ke website dengan nama domain “youtube.com” dan “keepvid.com” jika yang mengakses adalah user yang tergabung dalam group internet tetapi untuk user yang tergabung dalam group vip bebas mengakses.




Gambar 1. Skema jaringan



Gambar 2. Connection setting pada web client

II. Konfigurasi Gateway
Langkah pertama adalah setup komputer sebagai gateway, sebagai berikut:
Enbale IP Forwarding
# echo 1 > /proc/sys/net/ipv4/ip_forward
Enable IP Masquerade
Diasumsikan default policy firewall pada komputer gateway adalah ACCEPT, dan tidak ada rule spesifik apapun sebelumnya.
# service iptables stop
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Rule iptables untuk memblok akses http dari LAN
# iptables -A INPUT -p tcp -s 192.168.1.0/24 –dport 80 -j REJECT
# iptables -A FORWARD -p tcp -s 192.168.1.0/24 –dport 80 -j REJECT

Simpan rule firewall dan pastikan agar firewall diaktifkan saat boot dengan perintah berikut ini:
# service iptables save
# chkconfig iptables on


III. Konfigurasi ldap server
Langkah selanjutnya mengkonfigurasi ldap service.
Langkah pertama mengedit file konfigurasi ldap server yaitu file /etc/openldap/slapd.conf. Ada beberapa parameter yang perlu ditentukan nilainya agar sesuai dengan skenario kita diantaranya sebagai berikut:
database bdb
suffix "dc=myldap,dc=com"
rootdn "cn=admin,dc=myldap,dc=com"
rootpw rahasia

Langkah berikutnya mengaktifkan service ldap dan memastikan agar ldap diaktifkan saat boot.
# service ldap start
# chkconfig ldap on

Berikutnya menambahkan entri data ke ldap. Untuk itu Anda buat dahulu file ldif (nama file: data.ldif) yang berisi entri seperti berikut:
dn: dc=myldap,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: myldap
o: PT Myldap Perkasa Utama

dn: ou=groups,dc=myldap,dc=com
ou: groups
objectClass: organizationalUnit
objectClass: top

dn: cn=vip,ou=groups,dc=myldap,dc=com
cn: vip
gidNumber: 1000
memberUid: henry
objectClass: posixGroup
objectClass: top

dn: cn=internet,ou=groups,dc=myldap,dc=com
cn: internet
gidNumber: 1001
memberUid: akhtar
objectClass: posixGroup
objectClass: top

dn: ou=users,dc=myldap,dc=com
ou: users
objectClass: organizationalUnit
objectClass: top

dn: cn=henry,ou=users,dc=myldap,dc=com
objectClass: inetOrgPerson
cn: henry
sn: Henry Saptono
homePhone: 62-21-68253395
mail: henry@myldap.com
uid: henry
userPassword:: e01ENX1BbjVCZ0w3dHNwZEVRVHArcHJoS1FnPT0=

dn: cn=akhtar,ou=users,dc=myldap,dc=com
objectClass: inetOrgPerson
cn: akhtar
sn: Akhtar Naufal Shagufta
homePhone: 62-21-8953124
mail: akhtar@myldap.com
uid: akhtar
userPassword:: e01ENX1XVStBT3pnS1FUbHUxajNLT1ZBMVFnPT0=


Selanjutnya file data.ldif yang sudah dibuat Anda tambahkan(entri) kedalam database direktori ldap dengan cara berikut:
#ldapadd -x -D "cn=admin,dc=myldap,dc=com" -f data.ldif -W

IV. Konfigurasi squid
Langkah selanjutnya adalah konfigurasi squid, secara default konfigurasi squid akan memblok semua koneksi dari jaringan LAN ke internet. Untuk itu kita harus melakukan konfigurasi ulang dengan mengedit file /etc/squid/squid.conf. Beberapa direktif yang perlu Anda setup diantaranya adalah:
visible_hostname : direktif ini mendefinisikan nama komputer proxy server Anda , nilai default parameter ini tidak diset. Parameter ini dapat diisi dengan nama komputer yang dilengkapi dengan nama domain. Misalnya:
visible_hostname proxy.mydomain.com
http_port: direktif ini menunjukkan nomor port service squid. Nilai defaultnya adalah 3128.
http_port 3128
auth_param: direktif ini digunakan untuk mendefinisikan parameter-parameter untuk berbagai schema otentikasi yang didukung oleh squid, beberapa schema otentikasi yang secara default didukung oleh squid diantaranya dapat Anda ketahui dengan melihat isi direktori /usr/lib/squid. Dalam skenario ini penulis menggunakan schema otentikasi menggunakan ldap, untuk itu modul yang digunakan adalah squid_ldap_auth , dan konfigurasi parameter-parameter squid_ldap_auth yang harus Anda tulis adalah sebagai berikut:
auth_param basic program /usr/lib/squid/squid_ldap_auth -b dc=myldap,dc=com -f "cn=%s" -s sub -h localhost
# auth_param diatas harus ditulis dalam single line
auth_param basic credentialsttl 2 hours
auth_param digest children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic casesensitive off

external_acl_type: direktif ini menentukan helper program apa yang digunakan oleh external acl. Sesuai skenario, kita menggunakan helper program squid_ldap_group, sehingga konfigurasinya seperti berikut ini (ditulis dalam single line):
external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -b dc=myldap,dc=com -f "(&(cn=%a)(memberUid=%v)(objectClass=posixGroup))" -s sub -h localhost
acl: direktif ini digunakan untuk mendefinisikan access control list format penulisannya sebagai berikut:
acl nama-acl tipe-acl string-pattern ....
acl nama-acl tipe-acl "file" ....

Agar sesuai dengan skenario maka, Anda harus mendefinisikan beberapa acl , sebaiknya pendefinisian acl ini Anda tulis pada file konfigurasi squid yaitu dibawah baris yang bertuliskan “#INSERT YOUR OWN RULE ...”, seperti berikut ini:
acl haruslogin proxy_auth REQUIRED
acl groupVip external ldap_group vip
acl groupInternet external ldap_group internet
acl vipweb dstdomain .youtube.com .keepvid.com

http_access: direktif ini menunjukkan rule yang akan diterapkan pada suatu access control list. Sesuai skenario, kita harus mendefinisikan rule, tulislah rule tersebut dibagian bawah atau setelah seluruh pendefinisian acl seperti berikut ini:
http_access allow groupVip haruslogin
http_access deny vipweb
http_access allow groupInternet haruslogin

Setelah konfigurasi squid Anda lakukan cobalah Anda aktifkan service squid dan pastikan service squid diaktifkan saat boot dengan cara berikut ini:
# service squid start
# chkconfig squid on

Selamat mencoba.

Tidak ada komentar:

Posting Komentar