Я пытаюсь создать админ-сайт, контролирующий доступ в Интернет. Когда я разрешаю доступ на этот сайт к клиентскому ip, сайт записывает этот ip в файл acl и перезагружает squid. Это нормально работает - доступ разрешен. И когда я удаляю ip и перезагружаю squid, клиент блокируется. Но когда я уже присоединился к Google (https!), Доступ к Google все еще возможен. После нескольких минут бездействия доступ также блокируется. Так что кто-то может построить туннель и оставить для себя доступным Интернет.
Можно ли принудительно отключить открытые сеансы CONNECT?
небольшой пример:
acl allowed_dst dstdomain "/etc/squid/allowed_dst"
acl allowed_clients src "/etc/squid/allowed_clients"
http_access allow allowed_dst
http_access allow allowed_clients
http_access deny all
В настоящее время нет возможности делать то, что вы просите из Squid.
Списки управления доступом http_access оцениваются только при возникновении HTTP-запросов. Как только сообщение CONNECT настроило слепой TCP-туннель для отправки клиентских данных через него, он перестает быть HTTP, поэтому даже если Squid будет повторно обрабатывать ACL, у него не будет причин обрабатывать правила http_access когда-либо снова для туннеля.
Есть также много других решений, основанных на ACL, которые могли быть приняты и нуждаются в повторной оценке. Некоторые из них зависели бы от предыдущих значений ACL и данных, которых больше не существует. Это не так просто, как если клиенту разрешено или отказано.
Лучше всего, чтобы ваш сценарий, удаляющий записи ACL, следовал за перезагрузкой Squid, прерывая на уровне TCP любые соединения этих клиентов с прокси. В Linux для этого есть инструмент conntrack.