Basit anlamda Açık kaynak kodlu süper performanslı Squid Proxy server’I Active Directory ile entegre ederek internet çıkışını kontrolsüz halden kontrollü hale getirmeyi hedefliyoruz. Yapmanız gerekenler aslında çok basit. Ben bu işlem için En sağlam Linux sürümlerinden biri olan CentOS’u kullandım. Eğer adımları eksiksiz yaparsanız Squid proxy’nin ne kadar mükemmel çalıştığını göreceksiniz.
Öncelikle www.centos.org adresinden CentOS’un en son sürümü olan 6.2’yi indiriyoruz. DVD’ye yazarak sunucumuzu boot edip kuruluma başlıyoruz. Ben x64 CentOS kurmayı uygun gördüm. Artık platform olarak x86’dan uzaklaşmaya çalışıyorum. Günümüzde tüm uygulamalar artık x64 olarak sıkıntısız çalışabiliyorlar. Bir sonraki makalede SARG’ı anlatacağım. SARG, Squid’den rapor almanızı sağlayacak. CentOS sağlamlığını kanıtlamış bir Linux dağıtımı. Çünkü temelini Redhat’tan alıyor. Aşağıdaki Screenshotlardaki gibi kurulum yapıyoruz. ScreenShotların altına detay yazmaya gerek yok. Çünkü herkesin anlayabileceği seviyede basit zaten.
Mutlu son. Reboot sonrası Linux Serverimiz hazır. Bundan sonra artık squid’i kurmaya başlıyoruz. Hemen gerekli komutları yazarak gerekli paketleri yükleyelim.
# yum -y install squid nano
Yükleme işi bitti. Hemen linux’umuzu son pakerlere update edelim.
# yum -y update
Update işlemi zaman alabilir. Update bittikten sonra kuruluma devam ediyoruz. Öncelikle Squid’in AD’den kullanıcı bilgilerini çekmesini sağlamamız lazım. Bunun için CentOS sunucumuzu AD’ye dahil etmeliyiz. Yani Windows Client’lar gibi CentOS’u AD’ye alıyoruz. Bunun için Linux tarafında bir takım paketler yüklememiz gerekiyor. Hemen aşağıdaki komutu vererek yükleme işini hallediyoruz.
# yum -y install samba* krb5-devel* krb5-server* krb5-server-ldap* ntp krb5-workstation
Yukarıdaki gibi yükleme yapacaktır. Yükleme işi bittikten sonra öncelikle NTP servisinin konfigrürasyonun yapılması gerekecek. Çünkü NTP servisi eğer zaman bilgisini AD’den almazsa Domaine dahil edemezsiniz.
# mv /etc/ntp.conf /etc/ntp.conf.org
Bu dosyanın yenisini oluşturup içerisine AD bilgilerini yazıyoruz.
# echo "server srvdc01.techtalk.intra">> /etc/ntp.conf
Bu şekilde dosyamızın yenisi oluştu. Kırmızı kısmı kullanmakta olduğunuz AD sunucusu ile değiştirmek zorundasınız. Sonrasında NTP servisinin her açılışta otomatik start olmasını sağlayalım. Ayrıca start edelim,
# chkconfig ntpd on; service ntpd start
Şimdi aynı işlemleri kurduğumuz programlar içinde yapalım. Hem açılışta otomatik açılsınlar. Hemde start olsunlar.
# chkconfig squid on; service squid start
# chkconfig smb on; service smb start
# chkconfig winbind on; service winbind start
# chkconfig iptables off; service iptables stop
# chkconfig ip6tables off; service ip6tables stop
Ekran görüntüsü aşağıdaki gibi olacaktır,
Şimdi aşağıdaki komutu verelim ve sunucuyu restart edelim.
# usermod -a -G wbpriv squid
Bundan sonraki adımlar çok önemli. Buradaki adımları kusursuz yapmalısınız. Öncelikle Linux’un DNS’i AD sunucu DNS’i olmak zorunda. Pinglediğinizde sunucu ismiyle pingleyebilmelisiniz. Çünkü Linux sunucu AD ile entegre hale gelecek.
# ping srvdc
# ntpdate -u srvdc ß bu işlemi birkaç kez yapmanızı öneririm.
Gördüğünüz gibi işlem tamam. Şimdi Linux sunucuyu domain’e almak için gerekli komutu vereceğiz. Fakat bundan önce hosts file içeriğini değiştiriyoruz. Bunun için öncelikle hosts dosyasının orjinalinin bir kopyasını alalım.
# cp /et c/hosts /etc/hosts.org
Şimdi düzenleyelim,
# nano /etc/hosts
Dosyayı açtıktan sonra içeriğini tamamen silin. Sonra sadece aşağıdaki gibi olması gerekenleri yazın.
127.0.0.1 squid squid.techtalk.intra
192.168.1.10 srvdc srvdc.techtalk.intra
Buradaki isimleri kendi domaininize göre düzenlemeniz çok önemli. J
Bu şekilde yapılandırdıktan sonra ctrl+x tuş kombinasyonu ile save ederek çıkalım.
En önemli noktaya geldik. Şimdi aşağıdaki komut ile domaine giriş yapacağız. Kırmızı bölümleri sizin domain bilgileri ile değiştirmeniz gerekiyor. Ayrıca komut büyük küçük harfe duyarlıdır.
# authconfig --enableshadow --enablemd5 --passalgo=md5 --krb5kdc=srvdc.techtalk.intra --krb5realm=TECHTALK.INTRA --smbservers=srvdc.techtalk.intra --smbworkgroup=TECHTALK --enablewinbind --enablewinbindauth --smbsecurity=ads --smbrealm=TECHTALK.INTRA --smbidmapuid="16777216-33554431" --smbidmapgid="16777216-33554431" --winbindseparator="+" --winbindtemplateshell="/bin/false" --enablewinbindusedefaultdomain --disablewinbindoffline --winbindjoin=Administrator --disablewins --disablecache --enablelocauthorize –updateall
Bu komut sonrası AD Administrator password’ü gerekecek. Aşağıdaki gibi şifreyi veriyor ve domain’e girişi seyrediyoruz.
Şimdi AD tarafına bir bakalım,
Gördüğünüz gibi hem DNS’e hemde Computers’e gerekli kayıtlar açılmış. Şimdi detayları CentOS tarafında inceleyelim, gerekli komut,
# net ads info
İşlem tamam. Birkaç komut daha var onlarıda sizlerle paylaşmak isterim.
# wbinfo -g ß AD druplarını görmeye yarar.
# wbinfo -u ß AD user’larını görmeye yarar.
Şimdi Selinux’u disable ederek devam edelim.
# nano /etc/selinux/config
komutunu vererek selinux dosyasının içindeki “SELINUX=enforcing” kısmını “SELINUX=disabled” olarak değiştiriyoruz.
Bir komut daha kaldı. Bu komutu bulmak için 1 hafta uğraşıp bir rus sitesinde bulmuştum. O kadar rusça yazı içinden bu komutu nasıl görebildim hala aklıma geldikçe şaşırırım. Allahın takdirinden başka bişey değil.
# chown -R root:squid /var/lib/samba/winbindd_privileged
Şimdi son işlemde sıra. Squid için konfigürasyon vakti. Önce squid’i çalıştıralım,
# service squid stop
# squid -f /etc/squid/squid.conf -z
# service squid start
Bu konfigürasyonu grup ve kullanıcı bazlı hale getirebilirsiniz. Ben Domain kapsamı için bir konfig dosyası örneği vereceğim. Şimdi squid.conf dosyasını düzenlememiz gerekecek. Dosyanın orjinal halini saklamak için bir kopya almanızı öneririm.
# cp /etc/squid.conf /etc/squid.conf.org
# nano /etc/squid/squid.conf
Copy paste edebilirsiniz. –‘li satırları alma manız gerekiyor.
------------------------------------------------------------------------------------------------------------------------------------
# kirmizi kisimlari ben ilave ediyorum. <- buradan itibaren alıyoruz
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 15
auth_param ntlm keep_alive on
auth_param basic realm Squidproxy-caching
auth_param basic credentialsttl 2 hour
# Recommended minimum configuration:
#
acl NTLMUsers proxy_auth REQUIRED
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
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
acl CONNECT method CONNECT
#
# Recommended minimum Access Permission configuration:
#
# Only allow cachemgr access from localhost
http_access allow NTLMUsers all
http_access allow manager localhost
http_access deny manager
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
# Squid normally listens to port 3128
http_port 3128
# We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?
# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256
# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid
# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
# bir üst satıra kadar.
---------------------------------------------------------------------------------------------------------------------------------
Ve sıra sonuca geldi. Şimdi domain dışında olan bir client makinasına internet explorer ayarlarına bizim proxy serverin ip’sini ve portunu girelim.
Sonuç
Şifresiz girişler engellendi. İlk internet girişlerinden sonraki girilenlerin sitelerin inanılmaz hızlandığını göreceksiniz. Ayrıca izinsiz girişlerde engellenmiş olacak. Yapılan konfigürasyonda şifre hatırlama süresi 2 saat olarak ayarandı. İsterseniz arttırabilir veya düşürebilirsiniz.
Domain içinden kullanıcılarda denediğinizde şifre sormadığını göreceksiniz.