The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Ограничение доступа по ip назначения в Squid
Типичная задача: Разрешить доступ пользователю к списку сетей (например 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 
вызовут предупреждения о дублировании адресов сетей
 
11.01.2006 , Автор: Skif (Чижиков Владимир)
Ключи: squid, acl / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевые сервисы / Прокси сервер Squid / ACL, ограничения трафика и пользователей

Обсуждение [ RSS ]
  • 1.1, Eugene Marko (?), 15:51, 11/01/2006 [ответить]  
  • +/
    не самый быстрый, и не самый оптимальный, но работающий перловый скрипт превращающий 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>

     
  • 1.2, keepver (??), 20:17, 18/01/2006 [ответить]  
  • +/
    фигня какая-то...

    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

     
  • 1.3, MaxSvet (??), 12:16, 01/02/2006 [ответить]  
  • +/
    выложу скриптик (копирайт 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 :)

     
  • 1.4, MaxSvet (??), 12:29, 01/02/2006 [ответить]  
  • +/
    да и вдогонку делай пулы после перезапуска сквида ранее наченые сесии закачивают по полной скорости (настройки слетают) :(
     
  • 1.5, Толик (?), 14:46, 17/07/2007 [ответить]  
  • +/
    А можно сделать так, чтобы squid давал качать только из укр. сетей, а с зарубежных не давал качать?
     
     
  • 2.6, maxsvet (??), 14:56, 17/07/2007 [^] [^^] [^^^] [ответить]  
  • +/
    >А можно сделать так, чтобы squid давал качать только из укр. сетей,
    >а с зарубежных не давал качать?

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

     
     
  • 3.7, Толик (?), 15:43, 17/07/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Не, я имею ввиду, чтобы по самому зарубежному сайту можно было ходить, а вот качать с него файлы с определенными расширениями нельзя было.
     
  • 3.8, Толик (?), 15:43, 17/07/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Не, я имею ввиду, чтобы по самому зарубежному сайту можно было ходить, а вот качать с него файлы с определенными расширениями нельзя было.
     
     
  • 4.9, maxsvet (??), 15:47, 17/07/2007 [^] [^^] [^^^] [ответить]  
  • +/
    >Не, я имею ввиду, чтобы по самому зарубежному сайту можно было ходить,
    >а вот качать с него файлы с определенными расширениями нельзя было.
    >


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

     
     
  • 5.10, Толик (?), 15:54, 17/07/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Я не хочу показаться навязчивым,
    но у меня сейчас как раз и работает по аклам, где указаны запрещенные расширения, которые нельзя качать.

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

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

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру