iptables --uid-owner соответствует локальным сокетам Squid, а не пользователям LAN
Используйте значение --uid-owner как создателя локального сокета, когда рассуждаете об исходящем трафике Squid, и держите пересылаемые пакеты LAN отдельно.
Сопоставление owner в iptables позволяет определить пакеты, созданные сокетом локального процесса. Например, -m owner --uid-owner 1234 относится к локальному сокету, принадлежащему UID 1234; это не идентифицирует имя пользователя HTTP-прокси.
На машине с Squid различайте эти пути:
| Трафик | Существенное различие |
|---|---|
| Клиент подключается к Squid на этой машине | Входящее соединение к слушателю прокси |
| Squid открывает соединение к назначению | Локально созданный исходящий сокет |
| Клиент LAN маршрутизируется напрямую через эту машину | Пересылаемый трафик без локального сокета-создателя |
Расширение действует в OUTPUT и POSTROUTING. У пересылаемых пакетов нет связанного локального сокета для этого сопоставления, поэтому правило FORWARD не может обнаружить пользователя удалённого компьютера, запросив UID Squid.
Поэтому политика, разрешающая собственные исходящие сокеты Squid, охватывает лишь одну часть схемы сети, построенной только на прокси. Пересылка через шлюз, доступ к слушателю, другие разрешённые службы и фактическая учётная запись службы прокси должны обрабатываться в своей области.
Используйте настроенную идентичность времени выполнения, а не предполагайте, что Squid работает как nobody. Несколько процессов могут делить один UID, поэтому разрешение на основе UID — это граница учётной записи, а не доказательство, что конкретный исполняемый файл создал каждое разрешённое соединение.