Przezroczyste proxy na innej maszynie



W wielu sieciach stosowane jest wymuszone cachowanie treści przesyłanych przez WWW. Oprócz zmniejszenia zajętości pasma pozwala to też na ingerencję w treść - np. wycięcie niechcianych reklam. Pozwala też ominąć wielokrotną konfigurację wszelakich programów korzystających z HTTP na porcie 80.

Skonfigurowanie transparentnego proxy na maszynie będącej routerem jest trywialne i nie ma sensu go omawiać. Co jednak zrobić, gdy za router służy niezbyt silny komputer, czy wręcz Access Point z Linuksem? Stworzenie przezroczystego proxy gdzie indziej, niż na routerze, jest odrobinę bardziej skomplikowane. Ale dzięki iptables, wciąż proste. Należy jednak pamiętać, że do tego celu został opracowany protokół WCCP i to on jest prawidłowym rozwiązaniem.

Załóżmy, że na proxy przenaczono komputer o adresie IP 192.168.1.128, z uruchomionych Squidem, nasłuchującym na porcie 8080. Konfiguracja składa się z trzech etapów:

  1. włączenie przezroczystego cacheowania w Squidzie; tu w zależności od wersji postępujemy w dwójnasób:
    • Squid w wersji 2.5 - w pliku konfiguracyjnym umieszczamy 4 dyrektywy:
          httpd_accel_port 80
          httpd_accel_host virtual
          httpd_accel_with_proxy on
          httpd_accel_uses_host_header on
          
      Do czego one służą należy oczywiście przeczytać w dokumentacji lub komentarzach w squid.conf
    • Squid w wersji 3 - w tym przypadku konfiguracji jest mniej; wystarczy jedynie przypiąć Squida do dodatkowego portu, zaznaczając przy tym, że na tym porcie odbywać się będzie przezroczyste buforowanie:
          http_port 192.168.1.128:8081 transparent
          
      Co ciekawe, można dopisać opcje protocol=, co powinno umożliwić przechwytywanie i obslugiwanie przez proxy również protokołu FTP. Nie sprawdzałem jednak takiego trybu działania.

  2. Przekierowanie przychodzących pakietów do Squida. Prosta regułka - wszystkie pakiety TCP idące na port 80. Robi się to w łańcuchu FORWARD, w którym pojawiają się pakiety z pakietem docelowym różnym od adresu maszyny:
        iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8081
        
    Należy zwrócić uwagę na numer portu docelowego - zależy od konfiguracji Squida.

  3. Pozostaje jeszcze dodanie na routerze regułki przekazującej pakiety do maszyny z proxy. I tu pojawia się jedyna trudność - należy posłużyć się łatką z patch-o-matic dodającą cel ROUTE. Chyba, że dystrybutor zrobił to za nas.
        iptables -t mangle -A FORWARD  -p tcp --dport 80 \
                 -s ! 192.168.1.128 -j ROUTE --gw 192.168.1.128
        
I to wszystko! Trzy linijki konfiguracji.

Comments


Comments powered by Disqus