«

»

Mar 14

Squid3, Sarg Optimizasyonu ve LDAP Authentication ile Web Based Control List Management

Ubuntu 16.04.5 lts sürümündeki vekil sunucu ubuntu 18.04 lts sürümüne upgrade edilmiştir. 01/02/2019
Eski versiyondaki squid3 artık mevcut sürümde squid olarak güncelenmiştir.
http://sunucuipadresi/saklama.php adresinden mevcut kütüphane sisteminde kullanılan veritabanlarının listesi görülmekte ve düzenleme yapılabilmektedir.
abonelikler dosyasındaki veritabanları crontab’daki bir betikle XXXxxx.pac dosyasını oluşturmakta ve squid’in hedefler konfigi olan acl listesini güncellemektedir.

Örnek Betik Kodu

#!/bin/bash
KLASOR="/var/www/html/saklama/admin"
DOSYA="/var/www/html/saklama/admin/abonelikler.conf"
ZAMAN=`date +"%d.%m.%Y %H:%M"`
MD5yeni=`md5sum $DOSYA`
MD5eski=`cat $DOSYA.md5`
WEB_KLASOR="/var/www/html"
cd $KLASOR# Dosya icerigini array e alıyoruz
# sed ilk komut boşlukları siler;2.si boş satırları (/^ *$/d -> /^$/d olunca sadece bos satir siler. Boyle olunca bosluk da siliyor. Ama dolu satirlardaki bosluklari silmiyor. Onun icin sed de ilk komutu kullandik)
sed “/^$/d;s/[[:blank:]]//g;/^ *$/d” $DOSYA > output.txt
mapfile -t aboneliklerArray < output.txt
ELEMENTSAYISI=${#aboneliklerArray[@]}

# eski MD5 ile yeni MD5 ozetlerini karsilastir. Dosya degismemisse, betikten cik!
if [[ $MD5yeni == $MD5eski ]]
then
{ echo “Dosya degismemis”; exit 1; }
else
echo -e “\nDosya degismis, donusturme yapiliyor…\n”
fi

# XXXxxx.pac basina yazilacak kisimlari degiskene atalim
read -r -d ” BASLANGIC << EOM
\n// OTOMATIK OLUSTURULMUSTUR
\n// Guncellenme zamani: $ZAMAN
\n// ————————–
\nfunction FindProxyForURL(url, host)
\n{
\nvar pr_in = “PROXY proxy_nat_ip:3128; DIRECT”;
\nvar pr_no = “DIRECT”;
\n
\nif (
EOM

# XXXxxx.pac sonuna yazilacak kisimlari degiskene atalim
read -r -d ” BITIS << EOM
) {
\nreturn pr_in;
\n}
\n
\nelse
\nreturn pr_no;
\n}
EOM

# XXXxxx.pac dosyasini olustur
echo -e $BASLANGIC > XXXxxx.pac

# Son elementin || ile bitmemesi icin olusturulan for dongusu
i=0
for word in “${aboneliklerArray[@]}”
do
let i=i+1
if [ $i -eq $ELEMENTSAYISI ]; then
echo -e ”   dnsDomainIs( host,\”$word\”)” >> XXXxxx.pac
fi
done

echo -e $BITIS >> XXXxxx.pac

# yeni dosyanin md5 özetini al.
md5sum $DOSYA > $DOSYA.md5

# Ynei olusturulan dosyayi yerine yaz.
cp -pf XXXxxx.pac $WEB_KLASOR/
#duzenlenmis dosyayi squide yazdir
cp -pf output.txt /etc/squid/squid.XXxx.conf
service squid restart

grep ^[^#] /etc/squid/squid.conf ile mevcut configteki açıklama satırları ignore edilince yeni güncel config şu yapıda olmuştur.

Kod:
acl localnet src lanip/8     # RFC1918 possible internal network
acl localnet src backboneip/12  # RFC1918 possible internal network
acl localnet src dmzip/16 # RFC1918 possible internal network
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
acl kutuphane_hedef dstdomain "/etc/squid/squid.XXxx.conf"
http_reply_access allow kutuphane_hedef
acl deny_all_replies src all
http_reply_access deny deny_all_replies
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
auth_param basic program /usr/lib/squid/basic_ldap_auth -b “dc=XXXxxx,dc=edu,dc=tr” -f “uid=%s” -h ldap_server_ip
auth_param basic children 10
auth_param basic realm Hesap isminizi @XXXxxx.edu.tr olmadan giriniz.
auth_param basic credentialsttl 1 minute
auth_param basic casesensitive on
acl ldap-auth proxy_auth REQUIRED
http_access deny !ldap-auth
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .               0       20%     4320

sarg -x parametresiyle çalıştırıldığında o anki mevcut logların analizi http://proxy_sunucu_web/squid-reports/ sayfasında ve geçmişe dönük daily weekly ve monthly rapolar ise http://proxy_sunucu_web/squid-reports/all/ dizininde yapılandırılmıştır.

Bu işlemlerden ilki crontab -e ile * */1 * * * /usr/local/bin/sarg -x bu komutla yapılırken diğeri ise;
/etc/sarg/sarg-reports dosyasını

Kod:
SARG=/usr/bin/sarg
CONFIG=/etc/sarg/sarg.conf
HTMLOUT=/var/www/html/squid-reports/all
LASTLOGDAILY=31
LASTLOGWEEKLY=4
LASTLOGMONTHLY=12
PAGETITLE="Access Reports on $(hostname)"
LOGOIMG=/sarg/images/sarg.png
LOGOLINK="http://$(hostname)/"
DAILY=Daily
WEEKLY=Weekly
MONTHLY=Monthly
EXCLUDELOG1="SARG: No records found"
EXCLUDELOG2="SARG: End"
EXCLUDELOG3="SARG: Period covered by log files"

cron.daily weekly ve monthly olarak eklenen sarg komutuyla yaptık.
cron.daily’deki sarg örneği

Kod:

#!/bin/sh

if [ -x /usr/sbin/sarg-reports ]; then
/usr/sbin/sarg-reports daily
fi

son olarak /etc/logrotate.d/squid dizini yapılandırması şöyledir:

Kod:
#
#       Logrotate fragment for squid.
#
/var/log/squid/*.log {
daily
compress
delaycompress
rotate 750
missingok
nocreate
sharedscripts
prerotate
test ! -x /usr/sbin/sarg-reports || /usr/sbin/sarg-reports daily
endscript
postrotate
test ! -e /var/run/squid.pid || test ! -x /usr/sbin/squid || /usr/sbin/squid -k rotate
endscript
}

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

AlphaOmega Captcha Classica  –  Enter Security Code
     
 

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>