Проблема с конфигурационным файлом SQUID



  • Добрый день!

    Может кто сталкивался:

    2.0.1-RELEASE (i386) built on Mon Dec 12 17:53:52 EST 2011 FreeBSD 8.1-RELEASE-p6

    squid 2.7.9 pkg v.4.3.1

    Настраиваю SQUID: Proxy server: Authentication - вкладка Auth Settings

    Прописываю 4 компьютера которые должны ходить через SQUID без авторизации (каждый с новой строки): Subnets that don't need authentication

    172.20.1.215/32
    172.20.1.190/32
    172.20.1.126/32
    172.20.1.76/32

    Жмем кнопку Save.

    По факту: некоторые из прописанных компьютеров запрашивают логин и пароль на доступ к SQUID.

    Смотрим squid.conf

    acl noauth  src 172.20.1.215/32^M 172.20.1.190/32^M 172.20.1.126/32^M 172.20.1.76/32

    Откуда то взялись ^M . Убираю в редакторе прямо на хосте. Все начинает правильно работать.
    Стоит что либо сделать на pfSense: обновить у кого либо настройки или перегрузиться. Конфиг восстанавливается с ^M

    Смотрим файл /cf/conf/config.xml

    <no_auth_hosts>MTcyLjIwLjEuMjE1LzMyDQoxNzIuMjAuMS4xOTAvMzINCjE3Mi4yMC4xLjEyNi8zMg0KMTcyLjIwLjEuNzYvMzI=</no_auth_hosts>

    Что пробовал: сделал <no_auth_hosts>(удалил строку в config.xml), удалил acl noauth  src из конфига squid.conf. Через веб-интерфейс добавил по новый адреса. В конфиг SQUID лезут ^M

    Во всем конфиге эти символы только в этой строке. Пробовал разными браузерами.

    Кто нибудь может подсказать как это побороть?</no_auth_hosts>



  • Попробуйте установить squid 3-ий , предварительно удалив 2-ой.



  • Удалил старый SQUID через вебинтерфейс
    Поставил 3 версию SQUID

    Проблема та же.
    Если один адрес то все нормально, второй и последющие добавляю и получаю в конфиге следующее:

    acl noauth src 172.20.1.76/32^M 172.20.1.215/32



  • Возможно это баг в squid.inc



  • И что делать? В squid.inc нашел кусок кода:

    $noauth = implode(' ', explode("\n", base64_decode($settings['no_auth_hosts'])));
                    if (!empty($noauth)) {
                            $conf .= "acl noauth src $noauth\n";
                            $valid_acls[] = 'noauth';
                    }

    Вроде все правильно.

    ЗЫ: на всякий случай на виртуально машине развернул чистый pfsense … в нем такая же проблема.



  • Вчера вот не смог найти ответ на эту проблему. Сегодня как то вот нашлось :)

    http://forum.pfsense.org/index.php/topic,38961.0.html

    Incorrect behavior of the configurator creates a list noaut (Subnets that don't need authentication) wrong.

    From comment "Enter each subnet or IP address on a new line (in CIDR format, e.g.: 10.5.0.0/16, 192.168.1.50/32) that should not be asked for authentication to access the proxy."
    squid.inc generated squid.conf

    acl noauth src  subnet/mask
    subnet/mask
    subnet/mask
    ......

    Need to work
    acl noauth src  subnet/mask subnet/mask subnet/mask ...

    Please fill in the source package chenge squid.inc
    Code:

    .....
    else {
    // $noauth = implode(' ', explode("\n", base64_decode($settings['no_auth_hosts'])));
    // if (!empty($noauth)) {
    // $conf .= "acl noauth src $noauth\n";
    // $valid_acls[] = 'noauth';

    // Corrector
    $noauth = explode("\n", base64_decode($settings['no_auth_hosts']));
    $noauthed = "";
    foreach ($noauth as $subnet) {
    if(!empty($subnet)) {
    $subnet = trim($subnet);
    $noauthed .= "$subnet ";
    }
    }

    if (!empty($noauthed)) {
    $conf .= "acl noauth src $noauthed\n";
    $valid_acls[] = 'noauth';
    }
    // EndCorrector
    }
    …..

    Note a very important work at least for me since that moment gave me a lot of inconvenience since the version 1.2.3 and version 2.0 is preserved.



  • Это

    That "^M" is control-M, which is a carriage return, and is not needed in Unix file systems.

    Они один "\n" прессуют, хотя там везде "\r\n"

    $noauth = implode(' ', explode("\n", base64_decode($settings['no_auth_hosts'])));
    

    можно так попробовать

    $noauth = implode(' ', explode("\r\n", base64_decode($settings['no_auth_hosts'])));
    

    или так

    
    $noauth = base64_decode($settings['no_auth_hosts']);
    $noauth = str_replace("\r\n", " ", $noauth);
    
    

Locked