• сквид и динамические правила

    From Dmitriy Romanov@2:6078/1 to All on Wed Apr 1 21:55:48 2026

    Приветики, All!

    А вот тут у меня странная хотелка возникла. Вдруг кто знает, можно ли в сквиде это реализовать штатными средствами.
    Хочется чтобы описать как-нибудь правило, что если запрос ему соответствует, то соответствующий src или юзер
    добавляется в список, который можно использовать в дальнейшем как описание acl для другого правила. При этом по
    истечении заданного промежутка времени с последнего запроса с этого src, подпадающего под условия правила, этот src из
    этого списка удалялся. Есть ли там такая возможность?


    Hа сем разрешите письмо закончить. Elec (RA2FDR)
    --- NoSFeRaTU's GoldED+/W32-MINGW 1.1.5-b20090603
    * Origin: В свинарнике не стыдно быть свиньей (2:6078/1)
  • From Nil A@2:5015/46 to Dmitriy Romanov on Wed Apr 1 23:10:46 2026
    Hello, Dmitriy!

    Wednesday April 01 2026 21:55, from Dmitriy Romanov -> All:

    А вот тут у меня странная хотелка возникла. Вдруг кто знает, можно ли
    в сквиде это реализовать штатными средствами. Хочется чтобы описать как-нибудь правило, что если запрос ему соответствует, то
    соответствующий src или юзер добавляется в список, который можно использовать в дальнейшем как описание acl для другого правила. При
    этом по истечении заданного промежутка времени с последнего запроса с этого src, подпадающего под условия правила, этот src из этого списка удалялся. Есть ли там такая возможность?

    А в ГПТ сходить?

    В Squid это реализуется через механизм external_acl_type в связке с хелпером session. Это штатное средство, которое идет в комплекте с большинством дистрибутивов.
    Хелпер squid_session (или ext_session_acl) поддерживает базу данных активных сессий. Когда запрос попадает под правило, хелпер проверяет, есть ли запись в базе. Если нет - создает. Если есть - обновляет время последнего обращения.

    squid.conf, мы хотим, чтобы при посещении "триггерного" сайта юзер попадал в список "под наблюдением" на 30 минут.
    ===
    # -t 1800 означает время жизни записи 1800 секунд (30 минут) после последнего хита
    external_acl_type session_tracker ttl=60 negative_ttl=0 children=1 %SRC /usr/lib/squid/ext_session_acl -t 1800 -b /var/lib/squid/session.db

    # ACL для проверки/активации сессии
    acl session_active external session_tracker

    # ACL для триггера (то, на что должен зайти юзер, чтобы попасть в список)
    acl trigger_url dstdomain .evil-site.com

    # ACL для ограничения тех, кто уже в списке
    acl restricted_access http_access deny ... # (см. логику ниже)
    ===

    # Если зашел на триггерный сайт - помечаем сессию (всегда разрешаем, но хелпер запишет IP)
    http_access allow trigger_url session_active

    # Если сессия уже активна (юзер в списке), запрещаем ему доступ куда-то еще http_access deny !trigger_url session_active


    Best Regards, Nil
    --- GoldED+/LNX 1.1.5-b20260305
    * Origin: Gemini can make mistakes, so double-check it (2:5015/46)