Типичная задача: Разрешить доступ пользователю к списку сетей (например UA-IX)
и запретить мир, и наоборот, запретить доступ пользователя к списку сетей и разрешить все остальноеacl UAIXLIST dst "/usr/local/etc/squid/access_list/ua-ix.cfg" #Список сетей
acl host_alfa src 10.0.38.1 # первый хост
acl host_luna src 10.0.38.2 # второй хост
http_access allow host_alfa UAIXLIST # Разрешаем доступ к UAIXLISThttp_access deny host_alfa all # Запрещаем ко всему остальному
http_access deny host_luna UAIXLIST # Запрещаем доступ к UAIXLIST
http_access allow host_luna all # разрешаем ко всему остальномуВ последних двух правилах возможна альтернатива:
http_access allow host_luna !UAIXLISTсодержимое /usr/local/etc/squid/access_list/ua-ix.cfg
62.16.0.0/19
62.64.64.0/18
62.80.160.0/19
62.149.0.0/19
62.221.32.0/24
62.221.33.0/24
62.221.34.0/24
62.221.37.0/24
......Знаки комментариев # нежелательны, возможны ошибки(по крайней мере в squid-2.5.x). Повторы сетей из разряда
62.64.64.0/18
62.64.64.0/24
вызовут предупреждения о дублировании адресов сетей
URL:
Обсуждается: http://www.opennet.me/tips/info/954.shtml
не самый быстрый, и не самый оптимальный, но работающий перловый скрипт превращающий http://noc.ix.net.ua/ua-list.txt в удобоваримый для сквида вид.
<pre>
#!/usr/bin/perl
@uaix=<STDIN>;#@uaix = ("192.168.0.0", "192.168.0.0/16");
undef @netz;
foreach $net (@uaix) {
chomp $net;
my ($addr,$mask)=split/\//,$net;
if ( $mask eq "" ) { $mask = 24; }
push (@netz, "$addr/$mask");
}undef %saw;
@nethash{@netz} = ();
@uaix = sort keys %nethash;foreach $net1 (@uaix) {
$overlapped = 0;
foreach $net2 (keys %nethash) {
if ((check4overlap($net1,$net2) == 1)and($net1 ne $net2)) { $overlapped = 1; }
}
if ($overlapped ==1) {
delete $nethash{$net1};
}}
@uaix = sort keys %nethash;
foreach $net (@uaix) {
print "$net\n";
}
sub check4overlap {
($net1,$net2) =@_;my ($addr1,$mask1)=split/\//,$net1;
my $paddrp1=pack("C4",(split (/\./, $addr1)));
my $paddr1=unpack("L",$paddrp1);
my $pmask1=unpack("L",pack("B32",(1 x $mask1)));
my $phmin1 = pack("B*",("0"x31) . "1") | $paddrp1;
my $phmax1 = pack("B*",("0"x $mask1) . ("1" x (31 - $mask1)) . "0" ) | $paddrp1;
my $pminaddr1 = unpack("L",$phmin1);
my $pmaxaddr1 = unpack("L",$phmax1);
my ($addr2,$mask2)=split/\//,$net2;
my $paddr2=unpack("L",pack("C4",(split (/\./, $addr2))));
my $pmask2=unpack("L",pack("B32",(1 x $mask2)));
my $ifmin1in2 = (($pminaddr1 & $pmask2)==($paddr2 & $pmask2));
my $ifmax1in2 = (($pmaxaddr1 & $pmask2)==($paddr2 & $pmask2));
if (($ifmin1in2==1)and($ifmax1in2==1)){
return 1;
}return 0;
}</pre>
фигня какая-то...acl all src 0.0.0.0/0.0.0.0
all вот этот что-ли или там тоже dst?
выложу скриптик (копирайт mizzy :))разбирает в удобоваримый список украинских сетей:#!/usr/bin/perl
use Net::Netmask;
$in = "/usr/local/bin/wget -O - http://colocall.net/ua/?list";
$out = "/usr/local/etc/uaprefixes";$squid = "/usr/local/sbin/squid";
open(UA, "$in |") || die("Can't open $in!");
while (<UA>) {
next if !(/^\d+\.\d+\.\d+.\d+/);
chomp;
/(.*)\/\d+/;
$uanet = new Net::Netmask("$_");
$subnet = 0;
foreach $net (@uanets) {
if ($net->match("$1")) {
$subnet = 1;
last;
}
}
push(@uanets, $uanet) if ($subnet == 0);
}
close(UA);open(UAS, ">$out") || die("Can't open $out!");
foreach $net (@uanets) {
print UAS $net->desc() . "\n";
}
close(UAS);system("$squid -k reconfigure");
так как списки меняються, то в кроне выполнение каждые минут 20 :)
да и вдогонку делай пулы после перезапуска сквида ранее наченые сесии закачивают по полной скорости (настройки слетают) :(
А можно сделать так, чтобы squid давал качать только из укр. сетей, а с зарубежных не давал качать?
>А можно сделать так, чтобы squid давал качать только из укр. сетей,
>а с зарубежных не давал качать?можно
acl
http_access
строй
Не, я имею ввиду, чтобы по самому зарубежному сайту можно было ходить, а вот качать с него файлы с определенными расширениями нельзя было.
Не, я имею ввиду, чтобы по самому зарубежному сайту можно было ходить, а вот качать с него файлы с определенными расширениями нельзя было.
>Не, я имею ввиду, чтобы по самому зарубежному сайту можно было ходить,
>а вот качать с него файлы с определенными расширениями нельзя было.
>
те же самые аклы
укажешь список с расширением файлов какие тебе не надо
и дальше разрешай+- запрещай кому хочешь
Я не хочу показаться навязчивым,
но у меня сейчас как раз и работает по аклам, где указаны запрещенные расширения, которые нельзя качать.Но я не совсем понимаю, как, к примеру, мне запретить людям качать файлы с этими расширениями с иностранных ресурсов, но при этом разрешить людям эти самые ресурсы просматривать. А вот с отечественных ресурсов разрешить качать такие файлы.
Можно ли разделить расширения по списку сетей. С одних разрешать качать, а с других нет?