Senin, 28 Mei 2012

Bagaimana mengkoneksikan Squid Proxy dengan Windows Active Directory?


Bagaimana mengkoneksikan Squid Proxy dengan Windows Active Directory?


Dalam pembahasan ini diasumsikan memakai Gentoo Linux sebagai fondasi, distro Linux lain juga dapat berfungsi, hanya saja mungkin disesuai dengan dengan distro masing-masing.

Domain Info

Sebelum memulainya kita perhatikan beberapa hal terlebih dahulu dibawah ini

Windows domain: watermelon.org
Domain server:
ad1.watermelon.org 192.168.0.1
ad2.watermelon.org 192.168.0.2
Squid server: meong.watermelon.com 192.168.0.3

Domain server setup

Pada sisi Windows Active Directory server, tepatnya servis DNS

Buat static 'A' record for meong.watermelon.org ditunjuk ke 192.168.0.3, pilih 'Yes' ketika ditanyakan apakah mau melakukan konfigurasi 'reverse PTR' juga.

Notes for Windows 2008

Untuk Windows 2008 server anda perlu menginstall hotfix 951191

Gentoo

Pada Gentoo Linux Server yang akan kita install Squid Proxy lakukan installasi dan konfigurasi beberapa item dibawah

NTP
emerge ntp

# /etc/conf.d/ntp-client

NTPCLIENT_CMD="ntpdate"
NTPCLIENT_OPTS="-s -b -u dc1.domain.local"
 
 
Pastikan untuk menjalankan ntp-client agar waktu tersinkronisasi dengan baik

# /etc/init.d/ntp-client start 

SQUID
USE="kerberos ldap pam samba ads krb winbind" emerge squid samba openldap mit-krb5

DNS
# /etc/resolv.conf

domain watermelon.org
search watermelon.org
nameserver 192.168.0.1
nameserver 192.168.0.2

Squid
# vi /etc/squid/squid.conf

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid Proxy Server
auth_param basic credentialsttl 2 hours

external_acl_type wbinfo_group_helper %LOGIN /usr/libexec/squid/wbinfo_group.pl

acl authenticated_users proxy_auth REQUIRED
acl manager_users_grp external wbinfo_group_helper InetUsersManager
acl banking_users_grp external wbinfo_group_helper InetUsersBanking

acl listBanking dstdomain .bri.co.id .hsbc.co.id mandiri.co.id klikbca.co.id

http_access allow banking_users_grp listBanking
http_access allow manager_users_grp
http_access deny all

Samba
# vi /etc/samba/smb.conf

[global]
netbios name = meong
realm = WATERMELON.ORG
workgroup = WATERMELON
security = ADS
password server = ad1.watermelon.org 
ad2.watermelon.org
socket options = TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384
idmap uid = 10000-20000
winbind enum users = yes
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind separator = +
winbind use default domain = yes
encrypt passwords = yes
log level = 3 passdb:5 auth:10 winbind:5

Kerberos
# vi /etc/krb5.conf

[libdefaults]
default_realm = WATERMELON.ORG
dns_lookup_kdc = no
dns_lookup_realm = no
ticket_lifetime = 600
default_keytab_name = /etc/squid/PROXY.keytab

;untuk Windows 2003
default_tgs_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
default_tkt_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
permitted_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
;untuk Windows 2008 with AES
; default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
; default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
; permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
[realms]
WATERMELON.ORG = {
kdc = ad1.watermelon.org
kdc = ad2.watermelon.org
admin_server = 
ad1.watermelon.org
default_domain = WATERMELON.ORG
}

[domain_realm]
.local.com = 
ad1.watermelon.org
local.com = 
ad1.watermelon.org

;[kdc]
; profile = /etc/krb5kdc/kdc.conf

[logging]
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmin.log
default = FILE:/var/log/krb5lib.log

PAM
# vi /etc/pam.d/samba

auth required pam_nologin.so
auth required pam_stack.so service=system-auth-winbind
account required pam_stack.so service=system-auth-winbind
session required pam_stack.so service=system-auth-winbind
password required pam_stack.so service=system-auth-winbind

# vi /etc/pam.d/squid

auth required /lib/security/pam_stack.so service=system-auth-winbind
account required /lib/security/pam_stack.so service=system-auth-winbind

# vi /etc/pam.d/system-auth

auth required pam_env.so
auth sufficient pam_unix.so likeauth nullok
auth required pam_deny.so

account required pam_unix.so

password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password sufficient pam_unix.so nullok md5 shadow use_authok
password required pam_deny.so

session required pam_limits.so
session required pam_unix.so

* Untuk menggabungkan mesin Linux ke domain Windows 2003/2008

net ads join Servers/Linux -U administrator -S ad1.watermelon.org
or
net ads join -U administrator

notes: Servers – OU; Linux – OU

Set hak akses yang benar

# chgrp squid /var/cache/samba/winbindd_privileged
# chmod 750 /var/cache/samba/winbindd_privileged

sampe tahap ini, aktifkan SAMBA dan winbindd dengan melakukan hal berikut

/etc/init.d/samba start
/usr/sbin/winbindd

keduanya diperlukan oleh Squid agar dapat melakukan otentikasi ke active directory dengan benar. Pastikan winbindd berfungsi dengan baik dengan menjalankan perintah berikut. Jika semua berjalan sesuai yang direncanakan maka kita akan mendapatkan respon sebagai berikut:

Tes berikut dimaksudkan apakah kita sudah terotentikasi dengan Active Directory:

# wbinfo -t
checking the trust secret via RFC calls succeeded

Berikut ini akan memperlihatkan semua user yang ada di Active Directory:

# wbinfo -u
LOCAL+Administrator
LOCAL+Guest
...

Berikut ini akan memperlihatkan semua group yang ada di Active Directory:

# wbinfo -g
LOCAL+Domain Computers
LOCAL+Domain Controllers
...

Pastikan bahwa Squid dapat melakukan otentikasi dengan active directory dengan benar dengan melakukan tes berikut:

# /usr/bin/ntlm_auth –helper-protocol=squid-2.5-basic

LOCAL+kucing.persia password
utils/ntlm_auth.c:check_plaintext_auth(292)
NT_STATUS_OK: Success (0x0)

Asumsi bahwa semua yang diatas berjalan dengan baik, aktifkan Squid dengan perintah berikut

/etc/init.d/squid start

Konfigurasi web browser anda, untuk menunjuk ke proxy server secara langsung dan pastikan bahwa browsing dapat berjalan dengan baik tanpa ada kotak dialog otentikasi  (untuk mesin yang sudah terjoin ke Active Directory). Tes ini untuk memastikan bahwa otentikasi NTLM dengan Windows active directory server domain controller sudah bekerja dengan baik. Konfirmasikan juga lalu lintas proxy yang sudah diotorisasi dengan baik dengan memeriksa log file Squid

Tes Squid dengan otentikasi
  1. Internet Explorer
    Tes browsing melalui squid dengan IE, jika komputer kita sudah terdaftar ke domain, maka password TIDAK akan lagi diminta. Konfirmasikan bahwa lalu-lintas proxy benar-benar diotorisasi dengan memeriksa file access.log. Kolom domain\username harus lah tercantum.
  1. Firefox, etc
    Lakukan tes dengan browser selain IE. Kotak dialog password standar akan muncul. Jika user account sudah termasuk dalam domain awal dan "winbind use default domain = yes" sudah ada di smb.conf, maka kita tidak perlu memasukkan domain sebagai awalan. Sebaliknya, user name harus dimasukkan dengan format "domain\username"

Ketika menggunakan otentikasi NTLM, adalah hal yang lumrah jika melihat 2 pesan kesalahan TCP_DENIED/407 muncul secara bersamaan pada log file Squid. Ini dikarenakan mekanisme challenge/response dari otentikasi NTLM.

Jika tidak ada user name yang muncul di file access.log nya squid, atau kotak dialog password muncul, maka harus diperiksa file squid.conf untuk memastikan ACL sudah terkonfigurasi dengan baik. Juga pastikan winbindd berfungsi dengan baik seperti yang tertera diatas. Jika terdapat perubahan ke squid.conf maka Squid perlu direstart agar modifikasi setting dapat berlaku.

Jika semuanya berjalan dengan baik sesuai rencana maka pastikan Squid dan SAMBA dapat berjalan secara otomatis apabila server reboot dengan menjalankan perintah berikut

rc-update add squid default
rc-update add samba default
rc-update add ntp-client default

Modifikasi file berikut agar winbindd dapat berjalan setelah reboot:

# vi /etc/local.d/baselayout1.start

# Jalankan winbindd daemon agar Squid dapat melakukan pengecekan ke AD
/usr/sbin/winbindd

1 komentar:

  1. Hi mas,
    Wah nices mas tapi caranya puanjang banget ya kalo pake karberos. Tapi saya penasaran pengen coba juga nih mas
    ow ya saya juga sudah berhasil mengintegrasikan squid dg AD mungkin detailnya bisa dilihat di blog saya. terlihat lebih singkat caranya dan mudah di mengerti.
    Integrasi Squid Dengan Active Directory

    Terima kasih

    BalasHapus