Cкрипт поиска незаблокированных URL (отчет в стиле SARG)
Добавлено: Пн фев 13, 2006 16:53
После тестирования скрипта который выложил asket. Пришлось немного его оптимизировать. Теперь поиск по ключевым словам в файле лога походит один раз да и вид стал нагляднее, чтоб можно было показать руководству.
У меня раз в неделю идет ротация логов. За пошедшую неделю логи со всех проксей (у меня их много) складируются на отдельную машину и там анализируются.
Собственно скрипт в каталоге отчета Sarg добавляет два файла porno.html и banner.html если кто знает об их существовании тот наберет ручками. Можно конечно подправить скрипт и модифицировать index.html сгенерированный sarg-ем (добавить две ссылки).
Собственно сам скрипт:
#!/bin/bash
sarg_conf_dir="/usr/local/sarg"
sarg_out_dir=$2;
key_word_porno="sex|porn|xxx|teens|slut|berkova|girls|erotic|pussy|bdsm|intim|adult|nude"
key_word_banner="adv|banner"
tmp_dir="/tmp"
squid_log=$1
main_dir="/usr/local/logs/conf"
charset ="Windows-1251"
###############################################################
####################### PORNO ################################
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"'> ... porno.html
echo '<html><head><meta http-equiv="Content-Type" content="text/html; charset='$ charset '"></head><style>'>>$sarg_out_dir/porno.html
cat $sarg_conf_dir/css.tpl >> $sarg_out_dir/porno.html
echo '</style><body class="body"><center><table cellpadding="0" cellspacing="0">'>> $sarg_out_dir/porno.html
echo '<tr><th align="center" class="title">Squid User Access Report</th></tr>'>> $sarg_out_dir/porno.html
echo '<tr><td class="header3">PORNO links</td></tr></table></center>'>> $sarg_out_dir/porno.html
echo '<br><br><center><table cellpadding="1" cellspacing="2">'>> $sarg_out_dir/porno.html
echo '<tr><th class="header">Domain</th><th class="header" >User</th><th class="header">Download bad links</th></tr>'>> $sarg_out_dir/porno.html
##########
egrep "($key_word_porno)" $squid_log |egrep -v "(HIT|NONE|DIRECT/172.17.35.3)" >$tmp_dir/porno-links-tmp
rm $tmp_dir/tmp 2> /dev/null
test -f $main_dir/allow-ip &&for i in `cat $main_dir/allow-ip`; do `egrep -v "($i)" $tmp_dir/porno-links-tmp >> $tmp_dir/tmp`; done&& mv -f $tmp_dir/tmp $tmp_dir/porno-links-tmp
rm $tmp_dir/tmp 2> /dev/null
test -f $main_dir/old-porno-url && for i in `cat $main_dir/old-porno-url`; do `egrep -v "($i)" $tmp_dir/porno-links-tmp >>$tmp_dir/tmp`; done&&mv -f $tmp_dir/tmp $tmp_dir/porno-links-tmp
awk -Fhttp:\/\/ '{print $2}' $tmp_dir/porno-links-tmp|awk -F\/ '{print $1}'|awk -F: '{print $1}'|sort -u >$tmp_dir/new-porno-sites-tmp
grep -v "www\." $tmp_dir/new-porno-sites-tmp >$tmp_dir/tmp
awk -Fwww. '{print $2}' $tmp_dir/new-porno-sites-tmp >>$tmp_dir/tmp
sort -u $tmp_dir/tmp >$tmp_dir/new-porno-sites
for i in `cat $tmp_dir/new-porno-sites`;
do
echo '<tr><td class="data2"><a href="http://'$i'" target=_blank >'$i'</a></td>' >> $sarg_out_dir/porno.html
ip_user=(`cat $tmp_dir/porno-links-tmp | egrep "($i)" |awk '{print $3}'| sort -u`);
echo '<td class="data2">'>> $sarg_out_dir/porno.html
for (( k=0; k<${#ip_user[@]}; k++ )) do
echo ${ip_user[k]}'<br>' >> $sarg_out_dir/porno.html;
done
echo '</td>' >> $sarg_out_dir/porno.html;
bad_links=(`cat $tmp_dir/porno-links-tmp | egrep "($i)" |awk '{print $7}'| sort -u`);
echo '<td class="data2" align="left">'>> $sarg_out_dir/porno.html
for (( k=0; k<${#bad_links[@]}; k++ )) do
echo '<a href="'${bad_links[k]}'" target=_blank >'${bad_links[k]}'</a><br>' >> $sarg_out_dir/porno.html;
done
echo '</tr>' >> $sarg_out_dir/porno.html;
done
echo '</table></center></body></html>'>> $sarg_out_dir/porno.html
cat $tmp_dir/new-porno-sites >> $main_dir/old-porno-url
###############################################################
####################### BANNER ###############################
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"'> ... anner.html
echo '<html><head><meta http-equiv="Content-Type" content="text/html; charset='$ charset '"></head><style>'>>$sarg_out_dir/banner.html
cat $sarg_conf_dir/css.tpl >> $sarg_out_dir/banner.html
echo '</style><body class="body"><center><table cellpadding="0" cellspacing="0">'>> $sarg_out_dir/banner.html
echo '<tr><th align="center" class="title">Squid User Access Report</th></tr>'>> $sarg_out_dir/banner.html
echo '<tr><td class="header3">BANNERs links</td></tr></table></center>'>> $sarg_out_dir/banner.html
echo '<br><br><center><table cellpadding="1" cellspacing="2">'>> $sarg_out_dir/banner.html
echo '<tr><th class="header">Domain</th><th class="header" >User</th><th class="header">Download bad links</th></tr>'>> $sarg_out_dir/banner.html
##########
egrep "($key_word_banner)" $squid_log |egrep -v "(HIT|NONE|DIRECT/172.17.35.3)" >$tmp_dir/banner-links-tmp
rm $tmp_dir/tmp 2> /dev/null
test -f $main_dir/allow-ip &&for i in `cat $main_dir/allow-ip`; do `egrep -v "($i)" $tmp_dir/banner-links-tmp >> $tmp_dir/tmp`; done&& mv -f $tmp_dir/tmp $tmp_dir/banner-links-tmp
rm $tmp_dir/tmp 2> /dev/null
test -f $main_dir/old-banner-url && for i in `cat $main_dir/old-banner-url`; do `egrep -v "($i)" $tmp_dir/banner-links-tmp >>$tmp_dir/tmp`; done&&mv -f $tmp_dir/tmp $tmp_dir/banner-links-tmp
awk -Fhttp:\/\/ '{print $2}' $tmp_dir/banner-links-tmp|awk -F\/ '{print $1}'|awk -F: '{print $1}'|sort -u >$tmp_dir/new-banner-sites-tmp
grep -v "www\." $tmp_dir/new-banner-sites-tmp >$tmp_dir/tmp
awk -Fwww. '{print $2}' $tmp_dir/new-banner-sites-tmp >>$tmp_dir/tmp
sort -u $tmp_dir/tmp >$tmp_dir/new-banner-sites
for i in `cat $tmp_dir/new-banner-sites`;
do
echo '<tr><td class="data2"><a href="http://'$i'" target=_blank >'$i'</a></td>' >> $sarg_out_dir/banner.html
ip_user=(`cat $tmp_dir/banner-links-tmp | egrep "($i)" |awk '{print $3}'| sort -u`);
echo '<td class="data2">'>> $sarg_out_dir/banner.html
for (( k=0; k<${#ip_user[@]}; k++ )) do
echo ${ip_user[k]}'<br>' >> $sarg_out_dir/banner.html;
done
echo '</td>' >> $sarg_out_dir/banner.html;
bad_links=(`cat $tmp_dir/banner-links-tmp | egrep "($i)" |awk '{print $7}'| sort -u`);
echo '<td class="data2" align="left">'>> $sarg_out_dir/banner.html
for (( k=0; k<${#bad_links[@]}; k++ )) do
echo '<a href="'${bad_links[k]}'" target=_blank >'${bad_links[k]}'</a><br>' >> $sarg_out_dir/banner.html;
done
echo '</tr>' >> $sarg_out_dir/banner.html;
done
echo '</table></center></body></html>'>> $sarg_out_dir/banner.html
cat $tmp_dir/new-banner-sites >> $main_dir/old-banner-url
Комментарии к самому скрипту:
sarg_conf_dir = из этой директории берется стиль оформления отчета
sarg_out_dir = директория отчета Sarg за период
main_dir = каталог данного скрипта.
charset = кодировка отчета Sarg
DIRECT/172.17.35.3 - необходимо заменить на IP куда режик перенаправляет, чтоб скрипт не обращал внимания на эти строки.
allow-ip адреса пользователей, исключаемых из контроля.
old-*****-url - список проверенных "плохих" URL (если проанализированный лог подставить еще раз отчет будет пустой, для тестирования предлагаю последнюю строчку в разделе PORNO и BANNER закомментировать)
Комментарии по использованию скрипта:
в качестве первого параметра скрипту передается файл лога сквида, а второй параметр - директория с уже готовым отчетом Sarg того же лога.
Пример:
rus.sh /usr/local/squid/var/logs/access.log /usr/local/www/sarg/23Jan2006-29Jan2006
P.S. У меня есть скрипт который заменяет в отчете sarg ip пользователей на ФИО + подразделение. Если кому надо поделюсь.
P.P.S.
Предложение к Славе:
этот скрипт можно еще усовершенствовать следующим образом:
Возле каждого выявленного правила добавить checkbox и внизу окна добавить кнопку отсылки выявленных URL (можно и с проверочными адресами) в DBL. После отсылки пользователю предлагается ввести пароль DBL для подтверждения действий.
У меня раз в неделю идет ротация логов. За пошедшую неделю логи со всех проксей (у меня их много) складируются на отдельную машину и там анализируются.
Собственно скрипт в каталоге отчета Sarg добавляет два файла porno.html и banner.html если кто знает об их существовании тот наберет ручками. Можно конечно подправить скрипт и модифицировать index.html сгенерированный sarg-ем (добавить две ссылки).
Собственно сам скрипт:
#!/bin/bash
sarg_conf_dir="/usr/local/sarg"
sarg_out_dir=$2;
key_word_porno="sex|porn|xxx|teens|slut|berkova|girls|erotic|pussy|bdsm|intim|adult|nude"
key_word_banner="adv|banner"
tmp_dir="/tmp"
squid_log=$1
main_dir="/usr/local/logs/conf"
charset ="Windows-1251"
###############################################################
####################### PORNO ################################
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"'> ... porno.html
echo '<html><head><meta http-equiv="Content-Type" content="text/html; charset='$ charset '"></head><style>'>>$sarg_out_dir/porno.html
cat $sarg_conf_dir/css.tpl >> $sarg_out_dir/porno.html
echo '</style><body class="body"><center><table cellpadding="0" cellspacing="0">'>> $sarg_out_dir/porno.html
echo '<tr><th align="center" class="title">Squid User Access Report</th></tr>'>> $sarg_out_dir/porno.html
echo '<tr><td class="header3">PORNO links</td></tr></table></center>'>> $sarg_out_dir/porno.html
echo '<br><br><center><table cellpadding="1" cellspacing="2">'>> $sarg_out_dir/porno.html
echo '<tr><th class="header">Domain</th><th class="header" >User</th><th class="header">Download bad links</th></tr>'>> $sarg_out_dir/porno.html
##########
egrep "($key_word_porno)" $squid_log |egrep -v "(HIT|NONE|DIRECT/172.17.35.3)" >$tmp_dir/porno-links-tmp
rm $tmp_dir/tmp 2> /dev/null
test -f $main_dir/allow-ip &&for i in `cat $main_dir/allow-ip`; do `egrep -v "($i)" $tmp_dir/porno-links-tmp >> $tmp_dir/tmp`; done&& mv -f $tmp_dir/tmp $tmp_dir/porno-links-tmp
rm $tmp_dir/tmp 2> /dev/null
test -f $main_dir/old-porno-url && for i in `cat $main_dir/old-porno-url`; do `egrep -v "($i)" $tmp_dir/porno-links-tmp >>$tmp_dir/tmp`; done&&mv -f $tmp_dir/tmp $tmp_dir/porno-links-tmp
awk -Fhttp:\/\/ '{print $2}' $tmp_dir/porno-links-tmp|awk -F\/ '{print $1}'|awk -F: '{print $1}'|sort -u >$tmp_dir/new-porno-sites-tmp
grep -v "www\." $tmp_dir/new-porno-sites-tmp >$tmp_dir/tmp
awk -Fwww. '{print $2}' $tmp_dir/new-porno-sites-tmp >>$tmp_dir/tmp
sort -u $tmp_dir/tmp >$tmp_dir/new-porno-sites
for i in `cat $tmp_dir/new-porno-sites`;
do
echo '<tr><td class="data2"><a href="http://'$i'" target=_blank >'$i'</a></td>' >> $sarg_out_dir/porno.html
ip_user=(`cat $tmp_dir/porno-links-tmp | egrep "($i)" |awk '{print $3}'| sort -u`);
echo '<td class="data2">'>> $sarg_out_dir/porno.html
for (( k=0; k<${#ip_user[@]}; k++ )) do
echo ${ip_user[k]}'<br>' >> $sarg_out_dir/porno.html;
done
echo '</td>' >> $sarg_out_dir/porno.html;
bad_links=(`cat $tmp_dir/porno-links-tmp | egrep "($i)" |awk '{print $7}'| sort -u`);
echo '<td class="data2" align="left">'>> $sarg_out_dir/porno.html
for (( k=0; k<${#bad_links[@]}; k++ )) do
echo '<a href="'${bad_links[k]}'" target=_blank >'${bad_links[k]}'</a><br>' >> $sarg_out_dir/porno.html;
done
echo '</tr>' >> $sarg_out_dir/porno.html;
done
echo '</table></center></body></html>'>> $sarg_out_dir/porno.html
cat $tmp_dir/new-porno-sites >> $main_dir/old-porno-url
###############################################################
####################### BANNER ###############################
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"'> ... anner.html
echo '<html><head><meta http-equiv="Content-Type" content="text/html; charset='$ charset '"></head><style>'>>$sarg_out_dir/banner.html
cat $sarg_conf_dir/css.tpl >> $sarg_out_dir/banner.html
echo '</style><body class="body"><center><table cellpadding="0" cellspacing="0">'>> $sarg_out_dir/banner.html
echo '<tr><th align="center" class="title">Squid User Access Report</th></tr>'>> $sarg_out_dir/banner.html
echo '<tr><td class="header3">BANNERs links</td></tr></table></center>'>> $sarg_out_dir/banner.html
echo '<br><br><center><table cellpadding="1" cellspacing="2">'>> $sarg_out_dir/banner.html
echo '<tr><th class="header">Domain</th><th class="header" >User</th><th class="header">Download bad links</th></tr>'>> $sarg_out_dir/banner.html
##########
egrep "($key_word_banner)" $squid_log |egrep -v "(HIT|NONE|DIRECT/172.17.35.3)" >$tmp_dir/banner-links-tmp
rm $tmp_dir/tmp 2> /dev/null
test -f $main_dir/allow-ip &&for i in `cat $main_dir/allow-ip`; do `egrep -v "($i)" $tmp_dir/banner-links-tmp >> $tmp_dir/tmp`; done&& mv -f $tmp_dir/tmp $tmp_dir/banner-links-tmp
rm $tmp_dir/tmp 2> /dev/null
test -f $main_dir/old-banner-url && for i in `cat $main_dir/old-banner-url`; do `egrep -v "($i)" $tmp_dir/banner-links-tmp >>$tmp_dir/tmp`; done&&mv -f $tmp_dir/tmp $tmp_dir/banner-links-tmp
awk -Fhttp:\/\/ '{print $2}' $tmp_dir/banner-links-tmp|awk -F\/ '{print $1}'|awk -F: '{print $1}'|sort -u >$tmp_dir/new-banner-sites-tmp
grep -v "www\." $tmp_dir/new-banner-sites-tmp >$tmp_dir/tmp
awk -Fwww. '{print $2}' $tmp_dir/new-banner-sites-tmp >>$tmp_dir/tmp
sort -u $tmp_dir/tmp >$tmp_dir/new-banner-sites
for i in `cat $tmp_dir/new-banner-sites`;
do
echo '<tr><td class="data2"><a href="http://'$i'" target=_blank >'$i'</a></td>' >> $sarg_out_dir/banner.html
ip_user=(`cat $tmp_dir/banner-links-tmp | egrep "($i)" |awk '{print $3}'| sort -u`);
echo '<td class="data2">'>> $sarg_out_dir/banner.html
for (( k=0; k<${#ip_user[@]}; k++ )) do
echo ${ip_user[k]}'<br>' >> $sarg_out_dir/banner.html;
done
echo '</td>' >> $sarg_out_dir/banner.html;
bad_links=(`cat $tmp_dir/banner-links-tmp | egrep "($i)" |awk '{print $7}'| sort -u`);
echo '<td class="data2" align="left">'>> $sarg_out_dir/banner.html
for (( k=0; k<${#bad_links[@]}; k++ )) do
echo '<a href="'${bad_links[k]}'" target=_blank >'${bad_links[k]}'</a><br>' >> $sarg_out_dir/banner.html;
done
echo '</tr>' >> $sarg_out_dir/banner.html;
done
echo '</table></center></body></html>'>> $sarg_out_dir/banner.html
cat $tmp_dir/new-banner-sites >> $main_dir/old-banner-url
Комментарии к самому скрипту:
sarg_conf_dir = из этой директории берется стиль оформления отчета
sarg_out_dir = директория отчета Sarg за период
main_dir = каталог данного скрипта.
charset = кодировка отчета Sarg
DIRECT/172.17.35.3 - необходимо заменить на IP куда режик перенаправляет, чтоб скрипт не обращал внимания на эти строки.
allow-ip адреса пользователей, исключаемых из контроля.
old-*****-url - список проверенных "плохих" URL (если проанализированный лог подставить еще раз отчет будет пустой, для тестирования предлагаю последнюю строчку в разделе PORNO и BANNER закомментировать)
Комментарии по использованию скрипта:
в качестве первого параметра скрипту передается файл лога сквида, а второй параметр - директория с уже готовым отчетом Sarg того же лога.
Пример:
rus.sh /usr/local/squid/var/logs/access.log /usr/local/www/sarg/23Jan2006-29Jan2006
P.S. У меня есть скрипт который заменяет в отчете sarg ip пользователей на ФИО + подразделение. Если кому надо поделюсь.
P.P.S.
Предложение к Славе:
этот скрипт можно еще усовершенствовать следующим образом:
Возле каждого выявленного правила добавить checkbox и внизу окна добавить кнопку отсылки выявленных URL (можно и с проверочными адресами) в DBL. После отсылки пользователю предлагается ввести пароль DBL для подтверждения действий.