URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 13247
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Ограничение доступа по ip назначения в Squid"

Отправлено auto_tips , 11-Янв-06 15:51 
Типичная задача: Разрешить доступ пользователю к списку сетей (например 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 # Разрешаем доступ к UAIXLIST

   http_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


Содержание

Сообщения в этом обсуждении
"Ограничение доступа по ip назначения в Squid"
Отправлено Eugene Marko , 11-Янв-06 15:51 
не самый быстрый, и не самый оптимальный, но работающий перловый скрипт превращающий 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>


"Ограничение доступа по ip назначения в Squid"
Отправлено keepver , 18-Янв-06 20:17 
фигня какая-то...

acl all src 0.0.0.0/0.0.0.0

all вот этот что-ли  или там тоже dst?

http://www.squid-cache.org/Doc/FAQ/FAQ-10.html#ss10.11


"Ограничение доступа по ip назначения в Squid"
Отправлено MaxSvet , 01-Фев-06 12:16 
выложу скриптик (копирайт 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 :)


"Ограничение доступа по ip назначения в Squid"
Отправлено MaxSvet , 01-Фев-06 12:29 
да и вдогонку делай пулы после перезапуска сквида ранее наченые сесии закачивают по полной скорости (настройки слетают) :(

"Ограничение доступа по ip назначения в Squid"
Отправлено Толик , 17-Июл-07 14:46 
А можно сделать так, чтобы squid давал качать только из укр. сетей, а с зарубежных не давал качать?

"Ограничение доступа по ip назначения в Squid"
Отправлено maxsvet , 17-Июл-07 14:56 
>А можно сделать так, чтобы squid давал качать только из укр. сетей,
>а с зарубежных не давал качать?

можно
acl
http_access
строй


"Ограничение доступа по ip назначения в Squid"
Отправлено Толик , 17-Июл-07 15:43 
Не, я имею ввиду, чтобы по самому зарубежному сайту можно было ходить, а вот качать с него файлы с определенными расширениями нельзя было.

"Ограничение доступа по ip назначения в Squid"
Отправлено Толик , 17-Июл-07 15:43 
Не, я имею ввиду, чтобы по самому зарубежному сайту можно было ходить, а вот качать с него файлы с определенными расширениями нельзя было.

"Ограничение доступа по ip назначения в Squid"
Отправлено maxsvet , 17-Июл-07 15:47 
>Не, я имею ввиду, чтобы по самому зарубежному сайту можно было ходить,
>а вот качать с него файлы с определенными расширениями нельзя было.
>


те же самые аклы
укажешь список с расширением файлов какие тебе не надо
и дальше разрешай+- запрещай кому хочешь


"Ограничение доступа по ip назначения в Squid"
Отправлено Толик , 17-Июл-07 15:54 
Я не хочу показаться навязчивым,
но у меня сейчас как раз и работает по аклам, где указаны запрещенные расширения, которые нельзя качать.

Но я не совсем понимаю, как, к примеру, мне запретить людям качать файлы с этими расширениями с иностранных ресурсов, но при этом разрешить людям эти самые ресурсы просматривать. А вот с отечественных ресурсов разрешить качать такие файлы.

Можно ли разделить расширения по списку сетей. С одних разрешать качать, а с других нет?