Kamis, 04 Desember 2008

Otentikasi squid dengan openldap backend

By Henry Saptono

Anda dapat menerapkan pembatasan akses internet (akses http) pada jaringan Anda dengan berdasarkan user account. Jika Anda menggunakan squid sebagai proxy server pada jaringan Anda, maka tidaklah sulit untuk menerapkan otentikasi tersebut. Squid banyak mendukung beberapa schema otentikasi (authentication) dengan backend database yang beragam diantaranya menggunakan ncsa, pam, ldap, mysql, postgresql, samba dan lain-lain. Umumnya squid yang disertakan oleh berbagai distro dalam distribusinya sudah dilengkapi dengan berbagai modul otentikasi (authentication helper program)
seperti ncsa_auth, pam_auth, smb_auth, squid_ldap_auth, ntlm_auth dan lain-lain.

Kali ini penulis akan mencoba menjelaskan bagaimana menerapkan proses otentikasi pada squid dengan menggunakan salah satu modul otentikasi yang ada yaitu menggunakan modul squid_ldap_auth menggunakan backend database ldap. Pada tulisan ini penulis tidak akan menjelaskan secara detail tentang ldap. Penulis menggunakan openldap dan squid bawaan distro linux Fedora Core 6 yang diasumsikan sudah terinstal saat instalasi linux.

I. Skenario
Untuk mempermudah penjelasan maka penulis membuat skenario sebagai berikut:
Jaringan komputer Anda memiliki alamat 192.168.1.0/24 lihat gambar 1.
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
Proxy server tidak menerapkan transparent proxy (otentikasi tidak dapat diterapkan dalam mode ini)
Agar tidak ada user yang dapat mengakses internet(http) secara langsung melalui proxy atau gateway maka pada komputer gateway diterapkan kebijkan firewall yang memblok semua akses http (port 80) secara langsung dari LAN ke internet. Hal ini dimaksudkan agar user mau tidak mau harus menyetel “connection setting” pada web client dengan setingan “manually use proxy”. Pada web client proxy harus disetel ke IP 192.168.1.1 dengan nomor port 3128, seperti tampak pada gambar 2.
Skenario filtering proxy hanya mengijinkan koneksi dari LAN (192.168.1.0/24) ke Internet, dengan ketentuan harus login terlebih dahulu menggunakan user account yang terdaftar di ldap .




Gambar 1. Skema jaringan




Gambar 2. Connection setting pada web client

II. Konfigurasi Gateway
Langkah konfigurasi 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 service
Langkah selanjutnya adalah mengkonfigurasi ldap service sebagai backend database user account.
Langkah pertama adalah mengedit file konfigurasi ldap server yaitu file /etc/openldap/slapd.conf. Ada beberapa parameter yang perlu ditentukan nilai-nilainya agar sesuai dengan keinginan kita diantaranya berikut ini:

# database menyatakan backend database yang digunakan
database bdb
# suffix menyatakan base distinguished name direktori ldap
suffix "dc=myldap,dc=com"
#rootdn menyatakan distinguished name user admin ldap server
rootdn "cn=admin,dc=myldap,dc=com"
#rootpw menyatakan password rootdn
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 data seperti berikut ini:

#Entri Base dn
dn: dc=myldap, dc=com
objectclass: top
objectclass: dcObject
objectclass: organization
dc: myldap
o: PT Myldap Perkasa Utama
street: Jl LDAP, Depok-jawa Barat

#Entri sub/unit
dn: ou=People,dc=myldap,dc=com
objectclass: organizationalUnit
ou: People
description: Semua user ada di grup ini


#Entri user 1
dn: cn=akhtar,ou=People,dc=myldap,dc=com
objectclass: inetorgPerson
cn: akhtar
sn: Akhtar Naufal Shagufta
homePhone: 62-21-8953124
mobile: 08158984709
mail: akhtar@myldap.com
userPassword: {SSHA}I8YlQv2gvNJhWZXTLwQIfo/imQ8i+r+h

#Entri user 2
dn: cn=utari,ou=People,dc=myldap,dc=com
objectclass: inetorgPerson
cn: utari
sn: Pipiet Utari
homePhone: 62-21-68253395
mobile: 08161453263
mail: utari@myldap.com
userPassword: {SSHA}XYOxaUa/J7Jg01Tyrl66qACtFPk7P05B


Untuk nilai atribut userPassword, dapat Anda hasilkan/buat dengan bantuan tool slappasswd, seperti
contoh berikut ini:
# slappasswd
New password: ...isi dgn password yang ingin Anda buat...
Re-enter new password: ...isi dgn password yang ingin Anda buat...
{SSHA}XYOxaUa/J7Jg01Tyrl66qACtFPk7P05B


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

Sampai disini Anda telah berhasil menpopulasikan data kedalam database direktori ldap, dan untuk membuktikan bahwa saat ini ldap service telah berisi entri data sebagaimana yang terdapat dalam file data.ldif, coba Anda list seluruh entri tersebut dengan perintah berikut ini:
#ldapsearch -x -b "dc=myldap,dc=com"

IV. Konfigurasi squid HTTP Proxy
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 parameter konfigurasi squid yang perlu Anda setup diantaranya sebagai berikut:
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 sebagai berikut:
visible_hostname proxy.mydomain.com
http_port: direktif ini menunjukkan nomor port service squid. Nilai defaultnya dalah 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 daftar modul otentikasi yang ada dalam direktori /usr/lib/squid. Dalam artikel ini penulis akan 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 kedalam file konfigurasi squid adalah sebagai berikut:

auth_param basic program /usr/lib/squid/squid_ldap_auth \
-b "ou=People,dc=myldap,dc=com" -s sub -u "cn" -h localhost
# tanda \ diatas menyatakan dua baris diatas seharusnya ditulis satu baris
# untuk mengetahui parameter-parameter dari squid_ldap_auth lihat man

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

acl: direktif ini digunakan untuk mendefinisikan access control list atau untuk filtering 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 HERE(S) ...”, seperti berikut ini:
acl lan src 192.168.1.0/24
acl haruslogin proxy_auth REQUIRED

http_access: direktif ini menunjukkan rule yang akan diterapkan pada suatu access control list. Agar sesuai dengan skenario kita maka Anda harus mendefinisikan rule, tulislah rule tersebut dibagian bawah atau setelah seluruh pendefinisian acl sehingga konfigurasi rule tampak sebagai berikut:
# baris berikut ini adalah daftar rule akses http yang menyatakan
# semua akses dari lan diijinkan jika user telah berhasil login
http_access allow lan 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

Silahkan Anda uji pengaksesan web.

Tidak ada komentar:

Posting Komentar