Тех. поддержка статьи https://www.ingineer.ru/linux/squid/

Конфигурирование прокси-сервера (Установка, настройка SQUID)
Ответить
Аватара пользователя
Роман Торопов
Администратор
Сообщения: 134
Зарегистрирован: 24 мар 2008, 10:49
Откуда: г. Пермь
Контактная информация:

Тех. поддержка статьи https://www.ingineer.ru/linux/squid/

Сообщение Роман Торопов » 25 мар 2008, 09:51

Тех. поддержка статьи https://www.ingineer.ru/linux/squid/

В статье рассматривается версия squid-2.4.STABLE7
но это же самое можно организовать и в версии squid-2.5.STABLE x
если в конфиг внести некоторые изменения.
К примеру конфиг для squid-2.4.STABLE7 без выше стоящего прокси, squid.conf:

http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 100 MB
ftp_user anonymous@rex.mail.ru
authenticate_program /usr/local/squid/bin/auth
quick_abort_min 5 KB
quick_abort_max 5 KB
negative_ttl 1 minutes
read_timeout 4 minutes
client_lifetime 2 minutes
acl all src 0.0.0.0/0.0.0.0
acl work_time time SMTWHFA 8:00-23:00
acl good proxy_auth "/usr/local/squid/etc/conf/good"
acl normal proxy_auth "/usr/local/squid/etc/conf/normal"
acl allday proxy_auth "/usr/local/squid/etc/conf/allday"
acl onesite proxy_auth "/usr/local/squid/etc/conf/onesite"
acl onesite_list url_regex "/usr/local/squid/etc/conf/onesite_list"
acl halfgood_time time SMTWHFA 8:00-23:00
acl halfgood proxy_auth "/usr/local/squid/etc/conf/halfgood"
acl porn url_regex "/usr/local/squid/etc/porn"
acl noporn url_regex "/usr/local/squid/etc/conf/noporn"
acl bigfiles url_regex \.wmv$ \.wm$ \.asf$ \.qt$ \.avi$ \.mpeg$ \.mpg$ \.exe$ \.mov$ \.iso$ \.nrg$ \.mpe$ \.dll$ \.tar$ \.tiff$ \.tga$ \.bmp$ \.psd$
http_access allow good
http_access allow halfgood_time halfgood
http_access deny bigfiles all
http_access allow onesite_list onesite
http_access allow noporn all
http_access deny porn all
http_access allow allday
http_access deny !work_time normal
http_access allow normal
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
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
http_access deny all
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
icp_access allow all
proxy_auth_realm Ural-Inform TV (UTV)
cache_mgr ingineer@uitv.ru
cache_effective_user squid
cache_effective_group squid


а теперь, тоже самое, но для squid-2.5.STABLE x , Версию squid-2.5.STABLE11 с поддержкой ошибок на русском языке можно скачать http://www.ingineer.ru/linux/squid/file ... E11.tar.gz (1, 3 МБ)
squid.conf:

http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 100 MB
ftp_user anonymous@rex.mail.ru
auth_param basic program /usr/local/squid/bin/auth
quick_abort_min 5 KB
quick_abort_max 5 KB
negative_ttl 1 minutes
read_timeout 4 minutes
client_lifetime 2 minutes
acl all src 0.0.0.0/0.0.0.0
acl work_time time SMTWHFA 8:00-23:00
acl good proxy_auth "/usr/local/squid/etc/conf/good"
acl normal proxy_auth "/usr/local/squid/etc/conf/normal"
acl allday proxy_auth "/usr/local/squid/etc/conf/allday"
acl onesite proxy_auth "/usr/local/squid/etc/conf/onesite"
acl onesite_list url_regex "/usr/local/squid/etc/conf/onesite_list"
acl halfgood_time time SMTWHFA 8:00-23:00
acl halfgood proxy_auth "/usr/local/squid/etc/conf/halfgood"
acl porn url_regex "/usr/local/squid/etc/conf/porn"
acl noporn url_regex "/usr/local/squid/etc/conf/noporn"
acl bigfiles url_regex \.wmv$ \.wm$ \.asf$ \.qt$ \.avi$ \.mpeg$ \.mpg$ \.exe$ \.mov$ \.iso$ \.nrg$ \.mpe$ \.dll$ \.tar$ \.tiff$ \.tga$ \.bmp$ \.psd$
http_access allow good
http_access allow halfgood_time halfgood
http_access deny bigfiles all
http_access allow onesite_list onesite
http_access allow noporn all
http_access deny porn all
http_access allow allday
http_access deny !work_time normal
http_access allow normal
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
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
http_access deny all
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
icp_access allow all
error_directory /usr/local/squid/share/errors/Russian-1251
visible_hostname ingineer
auth_param basic realm Ural-Inform TV (UTV)
cache_mgr ingineer@uitv.ru
cache_effective_user squid
cache_effective_group squid

Но !!! Замечена одна ВЕЩЬ!!!
В файлах:
/usr/local/squid/etc/conf/good
/usr/local/squid/etc/conf/normal
/usr/local/squid/etc/conf/allday
/usr/local/squid/etc/conf/onesite
/usr/local/squid/etc/conf/halfgood
т.е. в списках имен пользователей squid-ом 2.5.STABLE x ИГНОРИРУЮТСЯ заглавные символы !!! Т.е. в именах пользователей нельзя использовать заглавные символы.

Аватара пользователя
Роман Торопов
Администратор
Сообщения: 134
Зарегистрирован: 24 мар 2008, 10:49
Откуда: г. Пермь
Контактная информация:

Re: Тех. поддержка статьи https://www.ingineer.ru/linux/squid/

Сообщение Роман Торопов » 25 мар 2008, 09:52

Наблюдался такой эффект, squid на одни сайты пускает на другие нет.
Оказалось, (версия squid 2.5 stable X) что авторизация проходила нормально (В именах пользователей были заглавные символы) - внешняя программа авторизации говорила ОК. А далее (по конфигу squid правила acl xxx proxy_auth) в списках пользователей (во внешних файлах) были те-же имена пользователей, так же с заглавными символами, при проверке squid-ом этих списков он не находил совпадений имён пользователей, соответственно ни одно правило в этом конфиге не срабатывало, и ещё одно, в свой лог он складывает, так-же - все символы маленькие.
К примеру лог squid 2.4 steble 7:
1128356051.458 6 101.101.101.23 TCP_MISS/200 1241 GET http://www.october.perm.ru/images/nav_afisha_over.gif VMerkushev DIRECT/195.222.141.126 image/gif
1128356051.549 24 101.101.101.23 TCP_MISS/200 1500 GET http://www.october.perm.ru/images/nav_arhiv_over.gif VMerkushev DIRECT/195.222.141.126 image/gif
1128356051.550 19 101.101.101.23 TCP_MISS/200 1247 GET http://www.october.perm.ru/images/nav_forum_over.gif VMerkushev DIRECT/195.222.141.126 image/gif
1128356051.550 21 101.101.101.23 TCP_MISS/200 1490 GET http://www.october.perm.ru/images/nav_zakaz_over.gif VMerkushev DIRECT/195.222.141.126 image/gif

А вот лог squid 2.5.stable11:
1128355861.220 3114 101.101.101.111 TCP_MISS/304 218 GET http://www.ingineer.ru/forum/templates/ ... embers.gif rtoropov DIRECT/80.177.71.88 -
1128355861.291 1253 101.101.101.111 TCP_MISS/304 219 GET http://www.ingineer.ru/forum/templates/ ... r_lock.gif rtoropov DIRECT/80.177.71.88 -
1128355871.709 2510 101.101.101.111 TCP_MISS/200 33314 GET http://www.ingineer.ru/forum/viewtopic.php? rtoropov DIRECT/80.177.71.88 text/html
1128355931.823 641 101.101.101.111 TCP_MISS/200 34014 GET http://www.ingineer.ru/forum/posting.php? rtoropov DIRECT/80.177.17.88 text/html

А когда, для пробы, создал ещё одного пользователя rtoropov (все маленькие символы) и занёс в один из списков (во внешних файлах) всё сразу зароботало в полном объёме !!!

Аватара пользователя
Роман Торопов
Администратор
Сообщения: 134
Зарегистрирован: 24 мар 2008, 10:49
Откуда: г. Пермь
Контактная информация:

Re: Тех. поддержка статьи https://www.ingineer.ru/linux/squid/

Сообщение Роман Торопов » 25 мар 2008, 09:52

аутентификация по IP
При аутентификации по IP
в файле squid.conf
удалите строку:
authenticate_program /usr/local/squid/bin/auth
или
auth_param basic program /usr/local/squid/bin/auth
в зависимости от версии squid.
Замените файл /usr/local/squid/plan/baza.pl файлом:
https://www.ingineer.ru/linux/squid/files/baza.zip (сохранить объект как)
В этом файле в строках содержащий IP (101.101.101.101) и Пароль (passwd) замените на свой IP (127.0.0.1) и пароль к MySQL под пользователем loger
При заведении пользователей (через вэб-интерфейс) вместо имен указывайте IP адреса.
Это касается и файлов по пути /usr/local/squid/etc/conf/
good, normal, halfgood, onesite и т.д. (вместо имен IP адреса).
Но появится одно, но - исчезнет возможность отсекать пользователей по исчерпанию лимита трафика.
Но и на это есть выход, можно написать скрипт, который будет слушать скаченные объёмы, и интерактивно вносить изменения в конфиг IPTABLES, для запрета доступа этим (му) IP к порту squid, об этом в сапорте по IPTABLES http://www.ingineer.ru/forum/viewtopic.php?f=7&t=10

к авторизации по IP
acl all src 0.0.0.0/0.0.0.0
acl work_time time SMTWHFA 8:00-23:00
acl good src "/usr/local/squiddrweb/etc/conf/good"
acl onesite src "/usr/local/squiddrweb/etc/conf/onesite"
acl onesite_list url_regex "/usr/local/squiddrweb/etc/conf/onesite_list"
acl normal src "/usr/local/squiddrweb/etc/conf/normal"
acl allday src "/usr/local/squiddrweb/etc/conf/allday"
acl halfgood_time time SMTWHFA 8:00-23:00
acl halfgood src "/usr/local/squiddrweb/etc/conf/halfgood"
acl porn url_regex "/usr/local/squiddrweb/etc/porn"
acl noporn url_regex "/usr/local/squiddrweb/etc/conf/noporn"
acl bigfiles url_regex \.wmv$ \.wm$ \.asf$ \.qt$ \.avi$ \.mpeg$ \.mpg$ \.exe$ \.mov$ \.iso$ \.nrg$ \.mpe$ \.dll$ \.tar$ \.tiff$ \.tga$ \.bmp$ \.psd$
http_access allow good
http_access allow onesite_list onesite
http_access deny onesite
http_access allow halfgood_time halfgood
http_access deny bigfiles all
http_access allow noporn all
http_access deny porn all
http_access allow allday
http_access deny !work_time normal
http_access allow normal

где,
good - ip адреса компов без каких либо ограничений
onesite - ip адреса компов - доступ только на сайты перечисленные в onesite_list
onesite_list - url сайтов к которым разрешен доступ IP адресам в onesite
halfgood - теже, что и good, но ограничены по времени.
alldey - пользователи которые работают круглосуточно (без ограничений во времени), но с отсечением по porno
normal - пользователи, отсекаемые по времени, порно, бигфайлам и т.д.
porn - url сайтом отсекаемые (порно).
noporn - url сайтов исключения из porn

Аватара пользователя
Роман Торопов
Администратор
Сообщения: 134
Зарегистрирован: 24 мар 2008, 10:49
Откуда: г. Пермь
Контактная информация:

Re: Тех. поддержка статьи https://www.ingineer.ru/linux/squid/

Сообщение Роман Торопов » 25 мар 2008, 09:53

Вот пример готового конфига при авторизации по IP, без вышестоящего прокси:

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

http_port 3128 
hierarchy_stoplist cgi-bin ? 
acl QUERY urlpath_regex cgi-bin \? 
no_cache deny QUERY 
cache_mem 100 MB 
ftp_user squid@localhost
auth_param basic children 5
auth_param basic realm proxy (squid)
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320
quick_abort_min 5 KB 
quick_abort_max 5 KB 
negative_ttl 1 minutes 
read_timeout 4 minutes 
client_lifetime 2 minutes 
acl all src 0.0.0.0/0.0.0.0 
acl work_time time SMTWHFA 8:00-23:00 
acl good src "/usr/local/squid/etc/conf/good" 
acl normal src "/usr/local/squid/etc/conf/normal" 
acl porn url_regex "/usr/local/squid/etc/conf/porn" 
acl noporn url_regex "/usr/local/squid/etc/conf/noporn" 
acl bigfiles url_regex \.wmv$ \.wm$ \.asf$ \.qt$ \.avi$ \.mpeg$ \.mpg$ 
http_access allow good 
http_access deny bigfiles all 
http_access allow noporn all 
http_access deny porn all 
http_access deny !work_time normal 
http_access allow normal
acl manager proto cache_object 
acl localhost src 127.0.0.1/255.255.255.255 
acl SSL_ports port 443 563 
acl Safe_ports port 80 # http 
acl Safe_ports port 21 # ftp 
acl Safe_ports port 443 563 # https, snews 
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 
http_access deny all 
http_access allow manager localhost 
http_access deny manager 
http_access deny !Safe_ports 
http_access deny CONNECT !SSL_ports 
http_access allow localhost 
http_access deny all 
icp_access allow all 
error_directory /usr/local/squid/share/errors/Russian-1251
visible_hostname proxy
cache_mgr ingineer@localhost
cache_effective_user squid
cache_effective_group squid

Аватара пользователя
Роман Торопов
Администратор
Сообщения: 134
Зарегистрирован: 24 мар 2008, 10:49
Откуда: г. Пермь
Контактная информация:

Re: Тех. поддержка статьи https://www.ingineer.ru/linux/squid/

Сообщение Роман Торопов » 25 мар 2008, 09:54

Вобщем, после длительных мучений(с моим нулевым знанием языка си) была исправлена грубейшая ошибка в программе utv.cpp которая не позволяла работать с mysql сервером выше 4.0.15.

заключалась она в том что в запрос к серверу mysql поподали спец символы \n(переноса строки), что в свою очередь недопустимо.

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

#include<stdio.h>
#include <string>
#include <mysql/mysql.h>

#define MYSQL_HOST "localhost" //mysql host or ip
#define MYSQL_LOGIN "root" //login for mysql
#define MYSQL_PASS "qweqwe" //password for mysql
#define MYSQL_DB "proxy" //database in mysql

using namespace std;
int main(int argc,char *argv[])
{
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
mysql_init(&mysql);
char *login,*password,*login_mysql,*password_mysql;
char buf[256];
char zap[200];
int p;
float limit,used,ostat;

	setbuf(stdout,NULL);
	while (fgets(buf, 256, stdin) != NULL) {
		login=strtok(buf," ");
		password=strtok(NULL,"\n");
		sprintf(zap,"SELECT * FROM auth WHERE login='%s' AND password='%s'",login,password);
		mysql_real_connect(&mysql,MYSQL_HOST,MYSQL_LOGIN,MYSQL_PASS,MYSQL_DB,0,NULL,0);
		mysql_query(&mysql,zap);
		res=mysql_store_result(&mysql);
		p=mysql_num_rows(res);
		if (p==1){ 
			row=mysql_fetch_row(res);
			login_mysql=row[0]; password_mysql=row[1];
			limit=atof(row[2]);
			used=atof(row[3]);
			if (limit!=0) {ostat=limit-used;}
			if  (strcmp(password,password_mysql)==0  && ((limit==0)||(ostat>0))) printf("OK\n");
			else printf("ERR\n");
		}else printf("ERR\n");
		mysql_close(&mysql);
	}
	exit(0);
}

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

#include<stdio.h>
#include <string>
#include <mysql/mysql.h>
using namespace std;

int main(int argc,char **argv)
{
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
mysql_init(&mysql);
char *login,*password;
char *login_mysql,*password_mysql;
char rex[100];
char buf[256];
char zap[200];
int p;
float limit,used,ostat;


    setbuf(stdout,NULL);
    while (fgets(buf, 256, stdin) != NULL) {
    login=strtok(buf," ");
    password=strtok(NULL,"");


p=strlen(password);
p=p-1;    
    strncpy(rex,password,p);    
    rex[p]='\0';
    
    

sprintf(zap,"select *  from auth where login='%s' and password='%s'",login,rex);
mysql_real_connect(&mysql,"127.0.0.1","login","passwd","proxy",0,NULL,0);
mysql_query(&mysql,zap);
res=mysql_store_result(&mysql);
p=mysql_num_rows(res);





if (p==1){ 
row=mysql_fetch_row(res);
login_mysql=row[0]; password_mysql=row[1];
limit=atof(row[2]);
used=atof(row[3]);
if (limit!=0) {ostat=limit-used;}

//mysql_close(&mysql);
    
//cout<<login_mysql<<endl;
//cout<<password_mysql<<endl;


strcat(password_mysql,"\n");
//if ((strcmp(login,login_mysql)==0) && (strcmp(password,password_mysql)==0) ) 
if  (strcmp(password,password_mysql)==0  && ((limit==0) ||(ostat>0)    )  ) 
    //cout<<"OK\n";
    printf("OK\n");
else 
    printf("ERR\n");
    //cout<<"ERR\n";
}
else   printf("ERR\n");

mysql_close(&mysql);
}

exit(0);
} 
Компилим:

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

g++ ./utv.cpp -o auth -lm -lmysqlclient

LZevs
Сообщения: 2
Зарегистрирован: 10 июл 2008, 10:37

Re: Тех. поддержка статьи https://www.ingineer.ru/linux/squid/

Сообщение LZevs » 10 июл 2008, 11:10

для того чтоб SQUID распознавал ЗАГЛАВНЫЙ и строчные символы надо добавить ключ "-i"

Пример:

acl good proxy_auth -i "/usr/local/squid/etc/conf/good"
и всё будет ОК !

Аватара пользователя
Роман Торопов
Администратор
Сообщения: 134
Зарегистрирован: 24 мар 2008, 10:49
Откуда: г. Пермь
Контактная информация:

Re: Тех. поддержка статьи https://www.ingineer.ru/linux/squid/

Сообщение Роман Торопов » 09 ноя 2008, 13:09

При использовонии родного (из дистрибутива) SQUID-а версией выше 2.5.х

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

http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 80 MB
ftp_user anonymous@rex.mail.ru
auth_param basic program /etc/squid/bin/auth
quick_abort_min 5 KB
quick_abort_max 5 KB
negative_ttl 1 minutes
read_timeout 4 minutes
client_lifetime 2 minutes
acl all src 0.0.0.0/0.0.0.0
acl work_time time SMTWHFA 7:00-22:00
acl good proxy_auth "/etc/squid/conf/good"
acl normal proxy_auth "/etc/squid/conf/normal"
acl allday proxy_auth "/etc/squid/conf/allday"

acl onesite proxy_auth "/etc/squid/conf/onesite"

acl onesite_list  url_regex "/etc/squid/conf/onesite_list"

acl halfgood_time time SMTWHFA 7:00-18:00
acl halfgood  proxy_auth "/etc/squid/conf/halfgood"


acl porn url_regex "/etc/squid/conf/porn"
acl noporn url_regex "/etc/squid/conf/noporn"
acl bigfiles url_regex \.avi$ \.mpeg$ \.mpg$ \.exe$ \.mov$ \.iso$ \.nrg$ \.mpe$

http_access allow good
http_access deny bigfiles all

http_access allow halfgood_time halfgood   

http_access allow onesite_list onesite

http_access allow noporn all
http_access deny porn all
http_access allow allday

http_access deny !work_time normal
http_access allow normal
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80		# http
acl Safe_ports port 21		# ftp
acl Safe_ports port 443 563	# https, snews
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
http_access deny all
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
icp_access allow all
access_log /var/log/squid/access.log squid
visible_hostname notebook
auth_param basic realm Kontora (squid)
cache_mgr admin@mail.ru
cache_effective_user squid
cache_effective_group squid 
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Роман Торопов
Администратор
Сообщения: 134
Зарегистрирован: 24 мар 2008, 10:49
Откуда: г. Пермь
Контактная информация:

Re: Тех. поддержка статьи https://www.ingineer.ru/linux/squid/

Сообщение Роман Торопов » 09 ноя 2008, 13:20

кому лень что либо творить руками, вот бэкапы с работающего сервера на Mandriva CS-4.0 Update 3

Файлы локализации на рус. язык и Mysql 4.0.15 17,1 МБ
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Роман Торопов
Администратор
Сообщения: 134
Зарегистрирован: 24 мар 2008, 10:49
Откуда: г. Пермь
Контактная информация:

Re: Тех. поддержка статьи https://www.ingineer.ru/linux/squid/

Сообщение Роман Торопов » 30 ноя 2008, 19:58

Для особых бездельников:
ставим прокси в Mandriva 2008.1 spring РР недостающие пакеты дистрибутива, скаченые с свободного доспупа фри дистрибутивов.

Ответить