Назад | Перейти на главную страницу

Перенаправить трафик 443 с определенного входящего IP-адреса?

В настоящее время мой IPtable без разбора отправляет все входящие запросы на мой прозрачный прокси-сервер Squid. Однако, поскольку мне нужен SSL для работы, мне нужен способ избежать перехвата SSL-трафика.

Идея

  1. example.com -> IP = 100.100.100.1
  2. http-доступ к example.com -> Отправить на прокси-сервер Squid
  3. https-доступ к example.com -> Запрос на перехват для 100.100.100.1:443; вместо того, чтобы отправлять его на прокси-сервер Squid, перенаправьте его обратно на ip example.com 100.100.100.1

Можно ли это сделать в iptable? Спасибо!

Изменить: я добавляю дополнительную информацию о своей настройке.

  1. Конечный клиент
  2. DNS сервер
  3. Ящик для кальмаров

Из-за особых требований я должен отправлять трафик на прозрачный прокси-сервер Squid, используя перенаправление DNS, а не обычное перенаправление маршрутизатора / шлюза.

Метод перехвата

Текущие правила таблицы IP

По-видимому, вы используете типичный маршрутизатор / шлюз для перенаправления трафика в Squid, вы можете просто перенаправить порт 80 и игнорировать 443, потому что трафик 443 будет идти напрямую, минуя Squid.

К сожалению, при моей текущей настройке, если я не пересылаю 443, любое https-соединение просто истечет.

Единственное решение сейчас - перехватить все запросы 443, сопоставить каждый домен с каждым уникальным IP-адресом и отправить запрос обратно на исходный IP-адрес источника.

Я попытался использовать Rinetd для пересылки 443 на исходный IP-адрес веб-сайта. К сожалению, этот метод перенаправит весь мой трафик 443 только на 1 IP-адрес, поскольку он не будет различать IP-адрес запроса.

Например, я сопоставляю 443 IP-адресу Gmail.com. Когда я приезжаю https://gmail.com, он будет работать нормально. Однако, если я приду https://hotmail.com, он все равно будет отправлять меня на IP-адрес gmail.com

Мне нужно найти способ сопоставить каждый IP-адрес с каждым доменом, чтобы при посещении gmail.com он перенаправлялся на IP-адрес gmail; когда я захожу на hotmail.com, он перенаправляет меня на IP hotmail.com

Вы описываете "прозрачный SSL-прокси", которого фактически не существует (для вперед кейс; он может работать для ускорителей SSL). Посмотрим почему:

  1. Клиент пытается разрешить serverfault.com.
  2. Ваш «фиктивный DNS» сервер возвращает адрес ящика Squid.
  3. Клиент подключается к squidbox: 443 и пытается начать сеанс TLS.
  4. На этом этапе необходимо обменять сертификаты и т. Д.

    Однако… как Squid-бокс узнает, к какому сайту на самом деле осуществляется доступ (т.е. к какому удаленному хосту подключиться)? Клиент не сообщает серверу SSL, какой сайт он ожидает - он полагается, что сервер уже знает это! Это часть функций безопасности SSL.

Та же проблема с iptables - как узнать, на каком хосте находится клиент? действительно разыскивается? Эта информация просто недоступна (потому что «фиктивный DNS-сервер» выбросил ее).

Единственный известный мне способ прокси SSL - через CONNECT метод; и для этого вам нужно указать поле Squid как явный прокси.

Честно говоря, проблема в перенаправлении DNS. Я сбит с толку, почему вы не можете использовать iptables для перенаправления порта 80 и оставить 443 в покое.

Вы не можете перенаправить трафик https (443) на любой порт, используя iptables. Squid не обрабатывает https-запросы в прозрачном режиме (только http):

PD: eth1 localnet и eth0 интернет

Ты можешь сделать это: Перенаправить http-трафик LAN (eth1) на прозрачный порт прокси-сервера squid 8080 (http). В squid.conf должно быть правило: http_port 8080 intercept

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080

И откройте порт 443 для локальной сети

iptables -A INPUT -i eth1 -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --dport 443 -o eth0 -j ACCEPT

Ты не сможешь это сделать: Перенаправить трафик https LAN (eth1) на непрозрачный порт прокси-сервера squid 3128 (https) (Fake Rule). Не имеет значения, существует ли в squid.conf правило: http_port 3128

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 3128

Альтернативы:

  1. Squid-in-the-middle SSL Bump
  2. Используйте фильтрацию по DNS вместо прокси (например, пи-отверстие). Но он медленнее squid и не фильтрует протокол DNS через HTTPS