Помогите со SquidGuard'ом

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
ded_usama
рядовой
Сообщения: 13
Зарегистрирован: 2008-02-25 11:58:45

Помогите со SquidGuard'ом

Непрочитанное сообщение ded_usama » 2008-03-17 18:27:21

Проблема такова: не отрабатывается CGI скрипт вывода "красивых" сообщений о причине блокировки.
Итак по порядку.
FreeBSD 7.0 + Squid 3.0.1 + SquidGuard 1.2.0_1 + Apache 2.0.63 + PHP 5.2.5 (CGI работают, test.cgi кажет инфу)
Не могу понять почему при срабатывании правила редиректа не срабатывает CGI скрипт, выводя вот эту ошибку:

Код: Выделить всё

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, you@example.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
Apache/2.0.63 (FreeBSD) PHP/5.2.5 Server at 192.168.2.16 Port 80
Собственно вот конфиги:
Squid.conf

Код: Выделить всё

# OPTIONS FOR AUTHENTICATION
# -----------------------------------------------------------------------------
external_acl_type nt_group %LOGIN /usr/local/libexec/squid/wbinfo_group.pl

        auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
        auth_param ntlm children 10
#        auth_param ntlm max_challenge_reuses 0
#        auth_param ntlm max_challenge_lifetime 

        auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
        auth_param basic children 10
        auth_param basic realm Squid proxy-caching web server
        auth_param basic credentialsttl 2 hours
        auth_param basic casesensitive off

# REDIRECT CONTROLS
# -----------------------------------------------------------------------------

redirect_program /usr/local/bin/squidGuard -c /usr/local/etc/squid/squidGuard.conf
redirector_bypass on
redirect_children 20


# ACCESS CONTROLS
# -----------------------------------------------------------------------------

acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed

acl localnet src 192.168.2.0/24	# 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

# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports

#http_access allow all
http_access allow localnet
http_access deny all

# NETWORK OPTIONS
# -----------------------------------------------------------------------------

http_port 8080
http_port 3128 

# DISK CACHE OPTIONS
# -----------------------------------------------------------------------------

cache_dir ufs /usr/local/squid/cache 1000 24 256
# LOGFILE OPTIONS
# -----------------------------------------------------------------------------

access_log /usr/local/squid/logs/access.log squid
cache_log /usr/local/squid/logs/cache.log
cache_store_log /usr/local/squid/logs/store.log
logfile_rotate 10
pid_filename /usr/local/squid/logs/squid.pid
# debug_options ALL,1

# OPTIONS FOR TUNING THE CACHE
# -----------------------------------------------------------------------------

acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY

refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern .		0	20%	4320
SquidGuadr.conf (для теста сделал всего 2 ACL: себя и еще один комп)

Код: Выделить всё

#
# SAMPLE CONFIG FILE FOR SQUIDGUARD
# (for further configuration options see the
# documentation and http://www.squidguard.org/)
#
dbhome /var/db/squidGuard
logdir /var/log

#
# TIME RULES:
# abbrev for weekdays:
# s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat
time workhours {
     weekly mtwhf 08:00 - 20:30
     date *-*-01  08:00 - 20:30
}

#
# SOURCE ADDRESSES
#
source sample-clients {
     ip 192.168.2.80
}
src dr {
     ip 192.168.2.99

}
#
# DESTINATION CLASSES
#
dest ads {
	domainlist ads/domains
	urllist ads/urls
}
dest aggressive {
	domainlist aggressive/domains
	urllist aggressive/urls
}
dest audio-video {
	domainlist audio-video/domains
	urllist audio-video/urls
}
dest drugs {
	domainlist drugs/domains
	urllist drugs/urls
}
dest gambling {
	domainlist gambling/domains
	urllist gambling/urls
}
dest hacking {
	domainlist hacking/domains
	urllist hacking/urls
}
dest mail {
	domainlist mail/domains
}
dest porn {
	domainlist porn/domains
	urllist porn/urls
	expressionlist porn/expressions
}
dest proxy {
	domainlist proxy/domains
	urllist proxy/urls
}
dest violence {
	domainlist violence/domains
	urllist violence/urls
	expressionlist violence/expressions
}
dest warez {
	domainlist warez/domains
	urllist warez/urls
}

acl {
     sample-clients within workhours {
	pass	any
     }
     dr {
	pass	!ads !aggressive !audio-video !drugs !gambling !hacking !mail !porn !proxy !violence !warez !in-addr any
	redirect http://192.168.2.16/cgi-bin/bl.cgi?caddr=%a&cname=%n&user=%i&group=%s&url=%u&target=%t 
     }

     default {
         pass     none
	 redirect http://192.168.2.16/cgi-bin/bl.cgi?caddr=%a&cname=%n&user=%i&group=%s&url=%u&target=%t
     }
}
После редиректа в http-error.log вот такаие ошибки:

Код: Выделить всё

[Mon Mar 17 17:57:29 2008] [error] [client 127.0.0.1] (2)No such file or directory: exec of '/usr/local/www/cgi-bin/bl.cgi' failed
[Mon Mar 17 17:57:29 2008] [error] [client 127.0.0.1] Premature end of script headers: bl.cgi
и

Код: Выделить всё

[Mon Mar 17 18:15:01 2008] [error] [client 192.168.2.16] (2)No such file or directory: exec of '/usr/local/www/cgi-bin/bl.cgi' failed, referer: http://sysadmins.ru/forum3.html?sid=02d374cef6d058b473f9bb779d28d376
[Mon Mar 17 18:15:01 2008] [error] [client 192.168.2.16] Premature end of script headers: bl.cgi, rreferer: http://sysadmins.ru/forum3.html?sid=02d374cef6d058b473f9bb779d28d376

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: Помогите со SquidGuard'ом

Непрочитанное сообщение manefesto » 2008-03-18 7:54:09

Код: Выделить всё

(2)No such file or directory: exec of '/usr/local/www/cgi-bin/bl.cgi'
Говорит о том что у тебя нету этого файла

Код: Выделить всё

ls /usr/local/www/cgi-bin/
в студию
я такой яростный шо аж пиздеЦ
Изображение

ded_usama
рядовой
Сообщения: 13
Зарегистрирован: 2008-02-25 11:58:45

Re: Помогите со SquidGuard'ом

Непрочитанное сообщение ded_usama » 2008-03-18 9:33:32

В том то и дело что есть

Код: Выделить всё

$ ls /usr/local/www/cgi-bin
bl.cgi                          squidGuard-simple.cgi.in
block.cgi                       squidGuard.cgi.in
printenv                        test-cgi

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: Помогите со SquidGuard'ом

Непрочитанное сообщение manefesto » 2008-03-18 12:08:18

права на выполнения стоят ???

Код: Выделить всё

chmod +x bl.cgi
я такой яростный шо аж пиздеЦ
Изображение

ded_usama
рядовой
Сообщения: 13
Зарегистрирован: 2008-02-25 11:58:45

Re: Помогите со SquidGuard'ом

Непрочитанное сообщение ded_usama » 2008-03-18 13:40:24

Да, стоят 100775 принадлежит root:wheel
на test.cgi вообще стоят 100615 и выполняется

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: Помогите со SquidGuard'ом

Непрочитанное сообщение manefesto » 2008-03-18 13:43:32

значит проблема с bl.cgi
я такой яростный шо аж пиздеЦ
Изображение

ded_usama
рядовой
Сообщения: 13
Зарегистрирован: 2008-02-25 11:58:45

Re: Помогите со SquidGuard'ом

Непрочитанное сообщение ded_usama » 2008-03-18 13:50:17

Похоже на то, но вот только я не силен в CGI. Могу выложить скрипт сюда.

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: Помогите со SquidGuard'ом

Непрочитанное сообщение manefesto » 2008-03-18 13:55:38

кидай...коль уж такой безнадега
я такой яростный шо аж пиздеЦ
Изображение

ded_usama
рядовой
Сообщения: 13
Зарегистрирован: 2008-02-25 11:58:45

Re: Помогите со SquidGuard'ом

Непрочитанное сообщение ded_usama » 2008-03-18 14:21:16

Ну вот такой я, но я учусь :roll:

bl.cgi

Код: Выделить всё

#! @PERL@
#
# Sample CGI to explain to the user that the URL is blocked and by which rule set
#
# By Pеl Baltzersen 1998
#

$QUERY_STRING = $ENV{'QUERY_STRING'};
$DOCUMENT_ROOT = $ENV{'DOCUMENT_ROOT'};

$clientaddr = "";
$clientname = "";
$clientident = "";
$srcclass = "";
$targetclass = "";
$url = "";
$time = time;
@day = ("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
@month = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

while ($QUERY_STRING =~ /^\&?([^&=]+)=([^&=]*)(.*)/) {
  $key = $1;
  $value = $2;
  $QUERY_STRING = $3;
  if ($key =~ /^(clientaddr|clientname|clientident|srcclass|targetclass|url)$/) {
    eval "\$$key = \$value";
  }
  if ($QUERY_STRING =~ /^url=(.*)/) {
    $url = $1;
    $QUERY_STRING = "";
  }
}

if ($url =~ /\.(gif|jpg|jpeg|mpg|mpeg|avi|mov)$/i) {
  print "Content-Type: image/gif\n";
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($time);
  printf "Expires: %s, %02d-%s-%02d %02d:%02d:%02d GMT\n\n", $day[$wday],$mday,$month[$mon],$year,$hour,$min,$sec;
  open(GIF, "$DOCUMENT_ROOT/images/ok.jpg");
  while (<GIF>) {
    print;
  }
  close(GIF)
} else {
  print "Content-type: text/html\n";
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($time);
  printf "Expires: %s, %02d-%s-%02d %02d:%02d:%02d GMT\n\n", $day[$wday],$mday,$month[$mon],$year,$hour,$min,$sec;
  print "<HTML>\n\n  <HEAD>\n    <TITLE>302 Access denied</TITLE>\n  </HEAD>\n\n";
  print "  <BODY BGCOLOR=\"#FFFFFF\">\n";
  if ($srcclass eq "unknown") {
    print "    <P ALIGN=RIGHT>\n";
    print "      <A HREF=\"http://192.168.2.16/\"><IMG SRC=\"/images/ok.jpg\"\n";
    print "         BORDER=0></A>\n      </P>\n\n";
    print "    <H1 ALIGN=CENTER>Access denied because<BR>this client is not<BR>defined on the proxy</H1>\n\n";
    print "    <TABLE BORDER=0 ALIGN=CENTER>\n";
    print "      <TR><TH ALIGN=RIGHT>Supplementary info<TH ALIGN=CENTER>:<TH ALIGN=LEFT>\n";
    print "      <TR><TH ALIGN=RIGHT>Client address<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$clientaddr\n";
    print "      <TR><TH ALIGN=RIGHT>Client name<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$clientname\n";
    print "      <TR><TH ALIGN=RIGHT>User ident<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$clientident\n";
    print "      <TR><TH ALIGN=RIGHT>Client group<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$srcclass\n";
    print "    </TABLE>\n\n";
    print "    <P ALIGN=CENTER>If this is wrong, contact<BR>\n";
    print "      <A HREF=mailto:proxymaster\@foo.bar>proxymaster\@foo.bar</A>\n";
    print "    </P>\n\n";
  } elsif ($targetclass eq "in-addr") {
    print "    <P ALIGN=RIGHT>\n";
    print "      <A HREF=\"http://192.168.2.16/\"><IMG SRC=\"/images/ok.jpg\"\n";
    print "         BORDER=0></A>\n      </P>\n\n";
    print "    <H1 ALIGN=CENTER>IP address URLs<BR>are not allowed<BR>from this client</H1>\n\n";
    print "    <TABLE BORDER=0 ALIGN=CENTER>\n";
    print "      <TR><TH ALIGN=RIGHT>Supplementary info<TH ALIGN=CENTER>:<TH ALIGN=LEFT>\n";
    print "      <TR><TH ALIGN=RIGHT>Client address<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$clientaddr\n";
    print "      <TR><TH ALIGN=RIGHT>Client name<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$clientname\n";
    print "      <TR><TH ALIGN=RIGHT>User ident<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$clientident\n";
    print "      <TR><TH ALIGN=RIGHT>Client group<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$srcclass\n";
    print "      <TR><TH ALIGN=RIGHT>URL<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$url\n";
    print "      <TR><TH ALIGN=RIGHT>Target class<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$targetclass\n";
    print "    </TABLE>\n\n";
    print "    <P ALIGN=CENTER>Contact the <B>webmaster</B> of <B>$url</B><BR>\n";
    print "      and ask him to give the webserver a proper <U>domain name</U>\n";
    print "    </P>\n\n";
  } else {
    print "    <P ALIGN=RIGHT>\n";
    print "      <A HREF=\"http://192.168.2.16/\"><IMG SRC=\"/images/ok.jpg\"\n";
    print "         BORDER=0></A>\n      </P>\n\n";
    print "    <H1 ALIGN=CENTER>Access denied</H1>\n\n";
    print "    <TABLE BORDER=0 ALIGN=CENTER>\n";
    print "      <TR><TH ALIGN=RIGHT>Supplementary info<TH ALIGN=CENTER>:<TH ALIGN=LEFT>\n";
    print "      <TR><TH ALIGN=RIGHT>Client address<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$clientaddr\n";
    print "      <TR><TH ALIGN=RIGHT>Client name<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$clientname\n";
    print "      <TR><TH ALIGN=RIGHT>User ident<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$clientident\n";
    print "      <TR><TH ALIGN=RIGHT>Client group<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$srcclass\n";
    print "      <TR><TH ALIGN=RIGHT>URL<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$url\n";
    print "      <TR><TH ALIGN=RIGHT>Target class<TH ALIGN=CENTER>=<TH ALIGN=LEFT>$targetclass\n";
    print "    </TABLE>\n\n";
    print "    <P ALIGN=CENTER>If this is wrong, contact<BR>\n";
    print "      <A HREF=mailto:proxymaster\@foo.bar>proxymaster\@foo.bar</A>\n";
    print "    </P>\n\n";
  }
  print "  </BODY>\n\n</HTML>\n";
}
exit 0;

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: Помогите со SquidGuard'ом

Непрочитанное сообщение manefesto » 2008-03-18 14:43:50

с дубу рухнул что ли...
вместо

Код: Выделить всё

#! @PERL@
пиши

Код: Выделить всё

#!/usr/bin/perl
я такой яростный шо аж пиздеЦ
Изображение

ded_usama
рядовой
Сообщения: 13
Зарегистрирован: 2008-02-25 11:58:45

Re: Помогите со SquidGuard'ом

Непрочитанное сообщение ded_usama » 2008-03-18 22:33:06

И правда с дуба рухнул :oops: . Спасибо, работает.