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.
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_portshttp_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ı
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
#!/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:
#
# 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
}