Назад | Перейти на главную страницу

SquidGuard и Active Directory: как работать с несколькими группами?

Я настраиваю SquidGuard (1.4) для проверки пользователей в домене Active Directory и применения ACL на основе членства в группах; это пример моего squidGuard.conf:

src AD_Group_A {
        ldapusersearch  ldap://my.dc.name/dc=domain,dc=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=cn=Group_A%2cdc=domain%2cdc=com))
}

src AD_Group_B {
        ldapusersearch  ldap://my.dc.name/dc=domain,dc=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=cn=Group_B%2cdc=domain%2cdc=com))
}

dest dest_a {
    domainlist  dest_a/domains
    urllist     dest_b/urls
    log     dest_a.log
}

dest dest_b {
    domainlist  dest_b/domains
    urllist     dest_b/urls
    log     dest_b.log
}

acl {
    AD_Group_A {
        pass    dest_a !dest_b all
        redirect http://some.url
    }

    AD_Group_B {
        pass    !dest_a dest_b all
        redirect http://some.url
    }

    default {
        pass    !dest_a !dest_b all
        redirect http://some.url
    }
}

Все работает нормально, если пользователь является членом Group_A ИЛИ Группа_B. Но если пользователь является членом ОБЕ групп, оценивается только первое исходное правило, поэтому применяется только первый ACL.

Я понимаю, что это связано с тем, как сопоставление правил источника работает в SquidGuard (если одно правило совпадает, оценка останавливается на этом, а затем применяется соответствующий ACL); поэтому я тоже пробовал это:

src AD_Group_A_B {
        ldapusersearch  ldap://my.dc.name/dc=domain,dc=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=cn=Group_A%2cdc=domain%2cdc=com))
        ldapusersearch  ldap://my.dc.name/dc=domain,dc=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=cn=Group_B%2cdc=domain%2cdc=com))
}

acl {
    AD_Group_A_B {
        pass    dest_a dest_b all
        redirect http://some.url
    }

    [...]
}

Но это тоже не работает: если пользователь является членом одной из этих групп, все исходное правило все равно соответствует, так что он может достичь обоих пунктов назначения (что, конечно, не то, что я хочу).

Единственное решение, которое я нашел до сих пор, - это создание ТРЕТИЙ сгруппируйте в AD и назначьте ему исходное правило и ACL; но эта установка растет экспоненциально с более чем двумя или тремя наборами адресатов.

Есть ли способ справиться с этим лучше?

Решено ... частично. Я полностью упустил из виду тот факт, что вы можете добавить другой условие для запроса LDAP ... так что довольно легко проверить членство более чем в одной группе.

Некоторые предостережения:

  • По-прежнему необходимо определить ACL SquidGuard для каждой возможной комбинации групп.
  • Вам необходимо добавить как минимум две другие директивы в конфигурацию SquidGuard: ldapbinddn (который определяет имя пользователя для подключения к AD, и здесь вы должны использовать DN объекта пользователя, а не простое имя пользователя!) и ldapbindpass, который определяет пароль пользователя.
  • SquidGuard должен быть скомпилирован с поддержкой LDAP, который по умолчанию не компилируется.

… Но, по крайней мере, фактические группы в AD можно свести к минимуму.