Прозрачный SSL прокси мифы и факты

8

Я много часов искал способ настроить прозрачный прокси для SSL (не Squid). Общий ответ - я не могу, но я знаю, что есть несколько способов . Моя цель только следующее:

  1. Доменные имена в черном / белом списке (не IP-номера). Контент не будет фильтроваться или изменяться вообще.
  2. Заставить пользователей проходить через эти списки. Если я изменю такие настройки в веб-браузерах, они могут просто отменить это.

На следующей странице сказано, что я могу передать трафик без изменений, но там не сказано, как: iptables https прозрачный прокси с privoxy?

На следующей странице показано правило iptables для 443, которое я сам не смог заставить работать: http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:proxy

На следующей странице рассказывается, как заставить это работать только со Squid: http://www.rahulpahade.com/content/squid-transparent-proxy-over-ssl-https

РЕДАКТИРОВАТЬ: Один человек говорит здесь: Как я могу использовать IPTABLES для создания HTTPS (443) сквозной вокруг Squid? «Лучше всего заблокировать прямой доступ к порту 443 и сообщить своим пользователям, что если они хотят использовать HTTPS, они должны настроить свой браузер на использование прокси». Но я просто знаю, как полностью заблокировать 443, чтобы он не работал под прокси.

Тереза ​​и Джуниор
источник

Ответы:

7

Если вы хотите фильтровать по доменным именам, у вас есть два возможных способа: вы можете взять имя из метода CONNECT, выданного клиентом, если он знает, что ему нужно использовать прокси-сервер для HTTPS-соединений, и фильтровать по нему (Squids поддерживает это BTW). Или, если вы на самом деле действительно нужны сделать это прозрачно, вы должны смотреть в (зашифрованном) заголовки запроса.

Если вы хотите увидеть зашифрованные заголовки запроса, вам нужен ключ. Если вы хотите иметь ключ, вам нужен сертификат, которому а) доверяет клиент, чтобы он был «правильным» сертификатом, и б) сертифицирует каждый возможный хост (wildcard-everything).

Так что вам нужно сделать, это

  1. настроить сертификат для вашего прокси. Как это сделать, зависит от вашего программного обеспечения - вы можете использовать stunnel, чтобы разорвать SSL-соединение на стороне прокси-сервера, установить некоторую фильтрацию HTTP-прокси и восстановить SSL для всего исходящего трафика, используя цели iptables DNAT, и снова выполнить stunnel. Могут быть и «коробочные» решения для прокси MitM SSL.
  2. установите вышеупомянутый сертификат на всех ваших клиентах, которые собираются использовать прокси

В основном, если вам нужен прозрачный прокси, это потому, что вы не хотите или не можете перенастроить клиентов для использования прокси. Если это также относится к вашему запросу, у вас, вероятно, не будет возможности установить сертификаты на клиентах и ​​пометить их как «доверенные». Поэтому, несмотря на то, что существует технический способ прозрачного SSL-прокси, я подозреваю, что за вас мало что выиграет.

заместитель Wabbit
источник
Этого было достаточно, чтобы мне было очень ясно узнать о прозрачных прокси. Спасибо!
Тереза ​​и Джуниор
Как вы "... берете имя из метода CONNECT, выпущенного клиентом, если он знает, что ему нужно использовать прокси для соединений HTTPS и фильтровать его"?
Big McLargeHuge
@ davidkennedy85 с Squid почти так же, как вы бы фильтровали другие методы доступа - просто используйте ACL. Пример: servercomputing.blogspot.de/2012/01/…
the-wabbit
Ваше объяснение в основном выполнимо; Я многому научился. Спасибо. Я думаю, что у меня есть сомнения в том, что имя хоста (доменное имя) известно любому, кто отслеживает трафик. security.stackexchange.com/questions/2914/…
Альберт Нетимк
4

Я знаю, что это старый вопрос, но если ОП хочет только занести в черный / белый список определенные доменные имена, им вообще не нужно использовать прокси-сервер, они могут просто использовать черный список на основе DNS.

  • настройте локальные DNS-серверы так, чтобы они возвращали 127.0.0.1 для любого домена, который вы хотите поместить в черный список
  • на вашем интернет-шлюзе заблокируйте все IP-адреса, кроме DNS-серверов, доступ к TCP / UDP-портам 53, поэтому только ваши DNS-серверы могут делать DNS-запросы с интернет-серверов.

Любой другой домен будет разрешен. Весь веб-трафик SSL или иным образом будет проходить через шлюз без изменений.

Редактировать: видя, как ОП готов к тому, чтобы заставить пользователей просматривать свои списки, он может заблокировать другие методы доступа к DNS. Таким образом, если пользователь пытается использовать один из тех методов DNS, которые заблокированы, веб-сайты просто не будут работать. ака «Мой путь или шоссе»

Для DNS-over-HTTPS, о котором упоминал @wheeler, вы можете просто заблокировать обычные DNS-запросы для таких сайтов, как https://dns.google.com и https://cloudflare-dns.com/dns-query и https: // doh.cleanbrowsing.org/doh/family-filter/ . Хотя это быстро станет несостоятельным, так как все больше и больше сервисов приходят в онлайн.

Вам также может понадобиться способ блокировки типов MIME, таких как application / dns-udpwireformat для других разрабатываемых методов DNS.

BeowulfNode42
источник
Больше не очень эффективное решение, так как DNS-over-HTTPS - это вещь сейчас.
Уилер
2

Делегат может работать в качестве прокси - сервера Man-In-The-Middle для HTTPS.

AlexD
источник
Спасибо, это действительно так, но я не смог заставить его работать! Кажется, что для него нужны другие правила iptables, чем для порта 80, или есть какая-то опция, которую я не могу найти для Delegate.
Тереза ​​и Джуниор
1

В прозрачном режиме система Inline IPS (Suricata, Snort) может помочь вам заблокировать ssl-сайты.

https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Setting_up_IPSinline_for_Linux

Блокировать правила сайта SSL для конкретного пользователя:

drop ip any 443 -> 192.168.3.x any (content:".facebook.com"; msg:"Simplewall block facebook.com  ";sid:7;rev:1;)

drop ip any 443 -> 192.168.3.204 any (content:".youtube"; msg:"Simplewall block youtube.com" ;sid:4;rev:1;)

Блокировать правила загрузки файлов на основе расширений:

drop ip any any -> 192.168.3.63 any (msg:"File exe block"; fileext:"exe"; filestore ;sid:1;rev:1;)

drop ip any ssl -> 192.168.3.63 any (msg:"File mp3 block"; fileext:"mp3"; filestore ;sid:11;rev:1;)

drop ip any ssl -> 192.168.3.63 any (msg:"File pdf block"; fileext:"pdf"; filestore ;sid:21;rev:1;)

Попробуйте это с SimpleWall

Очень просто добавить правило блокировки с помощью веб-интерфейса Simplewall.

Вы также можете добавить правила в соответствии с Simplewall => Content Filterтеми же правилами для IPS вместе с фильтром содержимого http.

Четан-simplewall
источник