내 상자에 일부 자녀 보호 기능(http 필터링)을 추가하고 있습니다.
상자는 온 가족이 사용하며(회원당 하나의 계정) Squid는 동일한 컴퓨터에서 실행됩니다.
두 개의 Squid 인스턴스가 있습니다. 하나는 캐싱 전용이고 다른 하나는 squidGuard를 사용하는 것입니다.
--uid-owner
두 개의 오징어 인스턴스 중에서 선택하기 위해 NAT 규칙을 사용합니다 .
iptables -t nat -A OUTPUT -m owner --uid-owner $owner -p tcp -m tcp --dport 80 -j REDIRECT --to-ports $port
(위와 같이 ip6tables)
현재 저는 IPv4 및 IPv6(상당히 새로운 Linux 커널 사용)에 NAT를 사용하고 있지만 Squid는 "가로채기"가 IPv4만 지원한다고 말합니다. IPv6도 원합니다.
TPROXY를 사용해 보았습니다(예:이것들--uid-owner
규칙) 그러나 POSTROUTING(PREROUTING 대신)에 설정하려는 iptable이 필요하기 때문에 실패했습니다 .
이러한 규칙은 다음과 같습니다.
iptables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129
--uid-owner
이 맹글 테이블에 적절한 규칙을 어떻게 추가할 수 있나요 ?즉, 포트 3128 또는 3129로 전달하기로 어떻게 결정합니까?
편집하다:내 NAT 규칙이 제대로 작동하고 있다고 답장하지 마세요. 알아요. Squid의 NAT는 IPv4만 지원하기 때문에 NAT를 없애야 합니다. 다시 한번 말씀드리지만 NAT를 사용하지 마세요. TPROXY나 mangle 또는 무엇이라고 부르는 것이든 mangle
위의 규칙을 준수합니다.
답변1
--uid-owner
에서는 필요하지 않습니다 . 예에서와 같이 PREROUTING
에서 필요합니다 .OUTPUT